一个不错的操作 excel 的文章
https://www.elearningsolutions.co.in/a-to-z-of-ole-excel-in-abap-7-4-2/
重点
workbooks 和 workbook 是两个变量,open、saveAs 的时候都用 workbook
CALL METHOD OF lo_excel 'Workbooks' = lo_workbooks.
CALL METHOD OF lo_workbooks 'Open' = lo_workbook
EXPORTING
#1 = file_mal.
完整代码
REPORT z_save_excel.
*----------------------------------------------------------------------*
* DATA DECLARATIONS
*----------------------------------------------------------------------*
DATA: lo_excel TYPE ole2_object, " Excel 应用对象
lo_workbooks TYPE ole2_object, " 工作簿集合
lo_workbook TYPE ole2_object, " 当前工作簿
lo_worksheet TYPE ole2_object, " 当前工作表
lo_range TYPE ole2_object,
lv_template TYPE string, " 模板文件路径
lv_save_path TYPE string, " 保存路径
lv_msg TYPE string. " 消息文本
*----------------------------------------------------------------------*
* MACRO: 安全释放 OLE 对象
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* START-OF-SELECTION
*----------------------------------------------------------------------*
START-OF-SELECTION.
PARAMETERS file_mal(100) TYPE c LOWER CASE DEFAULT 'D:\Template.xlsx'.
PERFORM genexcel.
write: 'finish', file_mal.
form genexcel.
lv_template = 'D:\Template.xlsx'. " 示例:本地模板文件路径
lv_save_path = 'D:\Hello_ABAP.xlsx'.
CREATE OBJECT lo_excel 'excel.application'.
IF sy-subrc <> 0.
MESSAGE '无法启动 Excel 应用,请检查是否安装 Excel' TYPE 'E'.
ENDIF.
* # 设置 Excel 可见性,便于调试(完成后可以注释掉)
SET PROPERTY OF lo_excel 'visible' = 1.
CALL METHOD OF lo_excel 'Workbooks' = lo_workbooks.
CALL METHOD OF lo_workbooks 'Open' = lo_workbook
EXPORTING
#1 = file_mal.
CALL METHOD OF lo_workbook 'Worksheets' = lo_worksheet
EXPORTING
#1 = 1. " 1 表示第一个工作表(Sheet1)
" 使用Range方法直接操作A1单元格
CALL METHOD OF lo_worksheet 'Range' = lo_range
EXPORTING
#1 = 'A1'.
" 在A1单元格写入值
SET PROPERTY OF lo_range 'Value' = 'hello world'.
CALL METHOD OF lo_workbook 'SaveAs'
EXPORTING
#1 = lv_save_path.
MESSAGE '文件已保存至:' && lv_save_path TYPE 'S'.
CALL METHOD OF lo_workbook 'Close'
EXPORTING
#1 = ABAP_FALSE. " 关闭时不再次保存
ENDFORM.