【问题标题】:Assigning Field Symbols to Internal Table将字段符号分配给内部表
【发布时间】:2022-08-09 14:05:26
【问题描述】:

我正在尝试将 Excel 文件上传到 ABAP 中的内部表。我正在使用函数GUI_UPLOAD,然后是SCMS_BINARY_TO_XSTRING。最后我有来自 Excel 文件的数据的字段 sybmbol <gt_data>

DATA(lo_data_ref) = lo_excel_ref->if_fdt_doc_spreadsheet~get_itab_from_worksheet(
                                             lv_woksheetname ).
*-- Excel work sheet data in dyanmic internal table
    ASSIGN lo_data_ref->* TO <gt_data>.
A [CString] B [CString]
data1 data11
data2 data22
data3 data33

我如何将&lt;gt_data&gt; 迭代到内部表?我会尝试如下,但我收到了转储。

 TYPES: BEGIN OF lty_test,
           A  TYPE string,
           B TYPE string,
         END OF lty_test.

  DATA: lt_test_table    TYPE STANDARD TABLE OF lty_test.
  • 尝试发布一个最小的可重现示例。
  • get_itab_from_worksheet() 未收到转储后,您没有尝试检查 sy-subrc 吗?
  • 你什么时候被转储的?你能给我们更多关于转储线的细节吗?
  • 我试过LOOP AT &lt;gt_data&gt; ASSIGNING FIELD-SYMBOL(&lt;ls_data&gt;). DO 10 TIMES. MOVE-CORRESPONDING &lt;ls_data&gt; TO lt_test_table. ENDDO. ENDLOOP. 并收到转储The MOVE-CORRESPONDING statement can only be used on operands if both operands are structured types or internal tables. If the KEEPING TARGET LINES addition is used, only tables can be used as operands. One of these conditions has not met here: Operand \"&lt;LS_DATA&gt;\" has type \"DEEP_STRUCTURE\". Operand \"LT_TEST_TABLE\" has type \"INTERNAL_TABLE\".

标签: abap


【解决方案1】:

据我了解,您想使用此代码读取 excel 行。

LOOP AT <gt_data> ASSIGNING FIELD-SYMBOL(<ls_data>).
ENDLOOP.

我不确定 <ls_data> 的结构,但我认为您可以使用索引阅读它以了解主要思想。

你能像下面这样试试吗?

CHECK <gt_data> IS ASSIGNED.
"It's column count for excel file. It can be found dynamically.
DATA(lv_column_count) = 10.
"Loop for rows.
LOOP AT <gt_data> ASSIGNING FIELD-SYMBOL(<ls_data>).
  "Loop for columns
  DO lv_column_count.
   ASSIGN COMPONENT sy-index OF <ls_dat> TO FIELD-SYMBOL(<lfs_value>).
  ENDDO.
ENDLOOP.

【讨论】:

  • 对,就是这样。在 <lfs_value> 我有字符串值。以及如何填充内部表,例如lt_sflight
  • 只需将 <lfs_value> 附加到新的内部表行。分配 <lfs_value> 时,不要忘记匹配新内部表行的精确值。您可以使用索引号、字段名称等来执行此操作。这取决于您的方法。
  • 谢谢。我不知道该怎么做,现在。但我会寻找。
【解决方案2】:

尝试这个:

    file = 'C:\xyz.XLS'.

  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      filename                = file
      i_begin_col             = '1'
      i_begin_row             = '1'
      i_end_col               = '5'
      i_end_row               = '6000'
    TABLES
      intern                  = xcel
    EXCEPTIONS
      inconsistent_parameters = 1
      upload_ole              = 2
      OTHERS                  = 3.

LOOP AT xcel.
  " xcel is an internal table and has field xcel-value
ENDLOOP.

【讨论】:

  • 是的,它就是这样工作的。但我的问题是使用GUI_UPLOAD,然后使用SCMS_BINARY_TO_XSTRING。我可以用一个以上的电子表格上传文件。我在字段符号 <gt_data> 中有数据,我迭代了:` LOOP AT <gt_data> ASSIGNING FIELD-SYMBOL(<ls_data>).`。但我不知道接下来会发生什么。在 <ls_data> 我有很深的结构。
  • 您知道要阅读的深层结构 <ls_data> 的组成部分吗?
  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
【解决方案3】:

这正是我正在寻找的......你得到答案了吗?如果你解决了请分享

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    • 2012-01-17
    • 2013-11-13
    • 1970-01-01
    • 2019-02-08
    相关资源
    最近更新 更多