关于通过OLE在Excel单元格中的不正确值

2020-08-26 04:18发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我目前在OLE中遇到问题。在编写OLE时,在excel单元中带来了错误的值,并且以指数格式带来了它。

我正在发送此值='98123456789999991999'和Excel工作表,我正在获取'981234567899999000'。

就像这样,它在excel中显示。

DATA:日期类型字符串,
ciw类型字符串,
ciw2类型字符串,
ciw3类型字符串,
ciw4类型字符串,
ciw5类型字符串,
sr_no TYPE i ,
line_cnt类型i,
总类型i,
totwrd(200)类型c,
总1类型pc207-betrg,
d1类型字符串,
d2类型字符串,
d3类型字符串,
列类型ole2_object,
cell1 TYPE ole2_object,
range TYPE ole2_object,
BORDER TYPE ole2_object,
cell2 TYPE ole2_object。

数据:p_file TYPE localfile。

*启动Excel
创建对象w_excel'Excel.Application'。
调用方法
w_excel
'Workbooks'= w_workbook。
调用方法
w_workbooks
'添加'= w_workbook。

呼叫方法
w_excel
'列'=列。
呼叫方法
COLUMN
'自动拟合'。
自由对象列。

d1 = sy-datum + 6(2)。" date
d2 = sy-datum + 4(2)。" month
d3 = sy-datum +0(4)。" year

合并'Date:'d1'/'d2'/'d3 INTO date。
执行fill_cell USIN G 1 7日期。
PERFORM fill_cell使用3 1'到',
PERFORM fill_cell使用4 1'银行经理'。

如果lv_bankid EQ'A2A'或lv_bankid EQ'A2O' 或r1 EQ'X'或aa EQ'X'。 " AXIS
PERFORM fill_cell使用5 1'AXIS Bank'。
PERFORM fill_cell使用6 1'SBRoad'。
PERFORM fill_cell使用7 1'Pune-411016'。
ELSEIF lv_bankid EQ'H2H "或lv_bankid EQ'H2O'或r2 EQ'X'或hh EQ'X'。" HDFC
使用5 1'HDFC Bank'执行PERF填充单元。
使用6 1'模型菌落'执行PERF填充单元。 > ENDIF。
PERFORM fill_cell使用11 1'亲爱的先生'。
PERFORM fill_cell使用13 1'请转移'。
PERFORM fill_cell使用13 2'以下'。
PERFORM fill_cell使用13 3 '从我们的A/C号中提取的金额'。
如果lv_bankid EQ'A2A'或lv_bankid EQ'A2O'或r1 EQ'X'或aa EQ'X'。
执行fill_cell使用13 4'-315010200006385'
ELSEIF lv_bankid EQ'H2H'或lv_bankid EQ'H2O'或r2 EQ'X'或hh EQ'X'。
执行fill_cell使用13 4'-57500000035701'。
ENDIF。
PERFORM fill_cell使用13 5'到各个供应商'。
PERFORM fill_cell使用13 6'详细信息的帐户。.
PERFORM fill_cell使用14 1'在下面给出。 '。

"""""""""""""""""""""""""""""""""""表格标题"""""" """""""""""""""""""""""""""""""""""""""""""""""""""""" """"""""""""""""""
PERFORM fill_cell使用16 1'序列号'。
PERFORM fill_cell使用16 2'收款人姓名'。
PERFORM fill_cell使用 16 3'受益。 A/C编号。
PERFORM fill_cell使用16 4'IFSC代码'。
PERFORM fill_cell使用16 5'银行名称'。
PERFORM fill_cell使用16 6'地址'。
PERFORM fill_cell 使用16 7'金额(INR)'。
""""""""""""""""""""""""""""""""""""""""" """""""""""""""""""""""""""""""""""""""""""""""""""""" """""""""""""""""""""""""""""""""
line_cnt = 17。
sr_no = 1。


调用W_EXCEL
的方法'Cells'= cell1
导出
#1 = 16"向下
#2 =1。"跨

循环至it_print进入wa_print。
使用line_cnt 1 sr_no执行fill_cell。
使用line_cnt 2 wa_print-koinh进行fill_cell。 "受益人名称
如果wa_print-bkref是INITIAL。
PERFORM fill_cell使用line_cnt 3 wa_print-bankn。
ELSE。
PERFORM fill_cell使用line_cnt 3使用wa_print-bkref。
ENDIF。
PERFORM fill_cell使用line_cnt 4 wa_print-bankl。
PERFORM fill_cell使用line_cnt 5 wa_print-banka。
PERFORM fill_cell使用line_cnt 6 wa_print-ort01。
PERFORM fill_cell使用line_cnt 7 wa_print-ort1。
ADD 1 TO line_cnt。
将1添加到sr_no。
total =总计+ wa_print-dmbtr。
ENDLOOP。


将1添加到line_cnt。

PERFORM fill_cell使用line_cnt 6' 总计"。
PERFORM fill_cell使用line_cnt 7总计。

将2添加到line_cnt。

PERFORM fill_cell使用line_cnt 1'Amount'。
total1 =总计。
PERFORM get_in_word使用total1更改totwrd。
压缩TOTWRD。
PERFORM fill_cell使用line_cnt 1'Total'。
拆分totwrd AT''INTO ciw
ciw2
ciw3
ciw4
ciw5 。
将ciw ciw2 CONCATENATE转换为ciw,用''。
CONCATEN ATE ciw3 ciw4转换为ciw3,由``。
使用line_cnt 2 ciw进行性能fill_cell。
PERFORM fill_cell使用line_cnt 3 ciw3。
PERFORM fill_cell使用line_cnt 4 ciw5。

*范围的结束 W_EXCEL
的Cell
呼叫方法'Cells'= cell2
导出
#1 = line_cnt" down
#2 = 7"。跨

呼叫方法 的
w_excel
'范围'=范围
导出
#1 =单元格1
#2 =单元格2。
范围
的调用方法
'BORDERS'= BORDER
导出
#1 ='1'。 " left
设置范围的属性'NumberFormat'='@'。
设置边框'LineStyle'的属性='1'。"线条样式实线,虚线...
设置边框'WEIGHT的属性 '=2。" max = 4
自由对象边界。

范围的调用方法
'BORDERS'= BORDER
EXPORTING
#1 ='2'。 " right
设置边界'LineStyle'的属性='1'。
set设置边界'WEIGHT'的属性=2。" max = 4
自由对象边界。

调用方法
range
'BORDERS'= BORDER
导出
#1 ='3'。" top
边界的设置属性'LineStyle'='1'。
边界的设置属性 'WEIGHT'=2。" max = 4
自由对象边界。

范围的调用方法
'BORDERS'= BORDER
导出
#1 ='4 '。"底部
边界'LineStyle'的设置属性='1'。
边界'WEIGHT'的设置属性=2。" max = 4
自由对象边界。
调用方法< br> w_excel
'列'=列。
列的调用方法
'自动拟合'。

belnr = WA_FINAL-BELNR。

执行get_file_l 位置更改p_file。
将p_file'\'belnr'.xls'合并到P_FILE中。

压缩P_FILE。

调用方法
w_workbook
'SaveAs'
>
导出
#1 = p_file
#6 =1。
设置w_excel'Visible'= 1的属性。

*退出Excel。
*调用方法
* w_excel
*'Quit'。

免费对象:w_excel。
免费对象:w_workbooks。
免费对象:w_workbook。
免费对象:w_cell。
>免费对象:列。
免费对象:cell1。
免费对象:range。
免费对象:BORDER。
免费对象:cell2。

清除:日期,
> ciw,
ciw2,
ciw3,
ciw4,
ciw5,
sr_no,
line_cnt,
total,
totwrd,
total1,
d1,
d2,
d3,
p_file。
ENDFORM。 " CONVERSION_EXCEL
*&------------------------------------------- -------------------------- *
*&填写FILL_CELL
*&----------- -------------------------------------------------- -------- *
*文字
* -------------------------------- -------------------------------------- *
*-> P_1文字
*-> P_7文本
*-> P_2293文本
* ------------------------------ ---------------------------------------- *
FORM fill_cell使用ij值。

数据:val1(50)类型c。

val1 = val。如果wa_print-bkref为INITIAL。
将val1''''''合并到val1中分隔符 空格。
endif。

呼叫方法
w_excel
'Cells'= w_cell
导出
#1 = i
#2 = j。
设置w_cell'值'的属性= val1。


设置w_cell'BOLD'的属性= 1。
ENDFORM。" FILL_CELL
*&--------- -------------------------------------------------- ---------- *
*&表格GET_IN_WORD
*&--------------------------- ----------------------------------- ------- *
*文字
* --------------------------------- ------------------------------------- *
*-> P_TOTAL1个文本
* <-P_TOTWRD文字
* ---------------------------------------- ------------------------------ *
FORM get_in_word使用total1
更改为扭曲。

调用功能'HR_IN_CHG_INR_WRDS'
导出
amt_in_num = total1
导入
amt_in_words = totwrd
例外情况
data_type_mismatch = 1
OTHERS =2。
ENDFORM。 " GET_IN_WORD
*&------------------------------------------- -------------------------- *
*&表格GET_FILE_LOCATION
*&----------- -------------------------------------------------- -------- *
*文字
* -------------------------------- -------------------------------------- *
* <-P_P_FILE文本
* ------------------------------------------------ ---------------------- *
FORM GET_FILE_LOCATION更改P_FILE。
数据:lv_tmpdir类型字符串。

调用方法cl_gui_frontend_services = > get_temp_directory
更改
temp_dir = lv_tmpdir
例外情况
cntl_error = 1
error_no_gui =2。

呼叫方法cl_gui_cfw => flush
例外情况
cntl_system_error = 1
cntl_error =2。

p_file = lv_tmpdir。

ENDFORM。" GET_FILE_LOCATION

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我目前在OLE中遇到问题。在编写OLE时,在excel单元中带来了错误的值,并且以指数格式带来了它。

我正在发送此值='98123456789999991999'和Excel工作表,我正在获取'981234567899999000'。

就像这样,它在excel中显示。

DATA:日期类型字符串,
ciw类型字符串,
ciw2类型字符串,
ciw3类型字符串,
ciw4类型字符串,
ciw5类型字符串,
sr_no TYPE i ,
line_cnt类型i,
总类型i,
totwrd(200)类型c,
总1类型pc207-betrg,
d1类型字符串,
d2类型字符串,
d3类型字符串,
列类型ole2_object,
cell1 TYPE ole2_object,
range TYPE ole2_object,
BORDER TYPE ole2_object,
cell2 TYPE ole2_object。

数据:p_file TYPE localfile。

*启动Excel
创建对象w_excel'Excel.Application'。
调用方法
w_excel
'Workbooks'= w_workbook。
调用方法
w_workbooks
'添加'= w_workbook。

呼叫方法
w_excel
'列'=列。
呼叫方法
COLUMN
'自动拟合'。
自由对象列。

d1 = sy-datum + 6(2)。" date
d2 = sy-datum + 4(2)。" month
d3 = sy-datum +0(4)。" year

合并'Date:'d1'/'d2'/'d3 INTO date。
执行fill_cell USIN G 1 7日期。
PERFORM fill_cell使用3 1'到',
PERFORM fill_cell使用4 1'银行经理'。

如果lv_bankid EQ'A2A'或lv_bankid EQ'A2O' 或r1 EQ'X'或aa EQ'X'。 " AXIS
PERFORM fill_cell使用5 1'AXIS Bank'。
PERFORM fill_cell使用6 1'SBRoad'。
PERFORM fill_cell使用7 1'Pune-411016'。
ELSEIF lv_bankid EQ'H2H "或lv_bankid EQ'H2O'或r2 EQ'X'或hh EQ'X'。" HDFC
使用5 1'HDFC Bank'执行PERF填充单元。
使用6 1'模型菌落'执行PERF填充单元。 > ENDIF。
PERFORM fill_cell使用11 1'亲爱的先生'。
PERFORM fill_cell使用13 1'请转移'。
PERFORM fill_cell使用13 2'以下'。
PERFORM fill_cell使用13 3 '从我们的A/C号中提取的金额'。
如果lv_bankid EQ'A2A'或lv_bankid EQ'A2O'或r1 EQ'X'或aa EQ'X'。
执行fill_cell使用13 4'-315010200006385'
ELSEIF lv_bankid EQ'H2H'或lv_bankid EQ'H2O'或r2 EQ'X'或hh EQ'X'。
执行fill_cell使用13 4'-57500000035701'。
ENDIF。
PERFORM fill_cell使用13 5'到各个供应商'。
PERFORM fill_cell使用13 6'详细信息的帐户。.
PERFORM fill_cell使用14 1'在下面给出。 '。

"""""""""""""""""""""""""""""""""""表格标题"""""" """""""""""""""""""""""""""""""""""""""""""""""""""""" """"""""""""""""""
PERFORM fill_cell使用16 1'序列号'。
PERFORM fill_cell使用16 2'收款人姓名'。
PERFORM fill_cell使用 16 3'受益。 A/C编号。
PERFORM fill_cell使用16 4'IFSC代码'。
PERFORM fill_cell使用16 5'银行名称'。
PERFORM fill_cell使用16 6'地址'。
PERFORM fill_cell 使用16 7'金额(INR)'。
""""""""""""""""""""""""""""""""""""""""" """""""""""""""""""""""""""""""""""""""""""""""""""""" """""""""""""""""""""""""""""""""
line_cnt = 17。
sr_no = 1。


调用W_EXCEL
的方法'Cells'= cell1
导出
#1 = 16"向下
#2 =1。"跨

循环至it_print进入wa_print。
使用line_cnt 1 sr_no执行fill_cell。
使用line_cnt 2 wa_print-koinh进行fill_cell。 "受益人名称
如果wa_print-bkref是INITIAL。
PERFORM fill_cell使用line_cnt 3 wa_print-bankn。
ELSE。
PERFORM fill_cell使用line_cnt 3使用wa_print-bkref。
ENDIF。
PERFORM fill_cell使用line_cnt 4 wa_print-bankl。
PERFORM fill_cell使用line_cnt 5 wa_print-banka。
PERFORM fill_cell使用line_cnt 6 wa_print-ort01。
PERFORM fill_cell使用line_cnt 7 wa_print-ort1。
ADD 1 TO line_cnt。
将1添加到sr_no。
total =总计+ wa_print-dmbtr。
ENDLOOP。


将1添加到line_cnt。

PERFORM fill_cell使用line_cnt 6' 总计"。
PERFORM fill_cell使用line_cnt 7总计。

将2添加到line_cnt。

PERFORM fill_cell使用line_cnt 1'Amount'。
total1 =总计。
PERFORM get_in_word使用total1更改totwrd。
压缩TOTWRD。
PERFORM fill_cell使用line_cnt 1'Total'。
拆分totwrd AT''INTO ciw
ciw2
ciw3
ciw4
ciw5 。
将ciw ciw2 CONCATENATE转换为ciw,用''。
CONCATEN ATE ciw3 ciw4转换为ciw3,由``。
使用line_cnt 2 ciw进行性能fill_cell。
PERFORM fill_cell使用line_cnt 3 ciw3。
PERFORM fill_cell使用line_cnt 4 ciw5。

*范围的结束 W_EXCEL
的Cell
呼叫方法'Cells'= cell2
导出
#1 = line_cnt" down
#2 = 7"。跨

呼叫方法 的
w_excel
'范围'=范围
导出
#1 =单元格1
#2 =单元格2。
范围
的调用方法
'BORDERS'= BORDER
导出
#1 ='1'。 " left
设置范围的属性'NumberFormat'='@'。
设置边框'LineStyle'的属性='1'。"线条样式实线,虚线...
设置边框'WEIGHT的属性 '=2。" max = 4
自由对象边界。

范围的调用方法
'BORDERS'= BORDER
EXPORTING
#1 ='2'。 " right
设置边界'LineStyle'的属性='1'。
set设置边界'WEIGHT'的属性=2。" max = 4
自由对象边界。

调用方法
range
'BORDERS'= BORDER
导出
#1 ='3'。" top
边界的设置属性'LineStyle'='1'。
边界的设置属性 'WEIGHT'=2。" max = 4
自由对象边界。

范围的调用方法
'BORDERS'= BORDER
导出
#1 ='4 '。"底部
边界'LineStyle'的设置属性='1'。
边界'WEIGHT'的设置属性=2。" max = 4
自由对象边界。
调用方法< br> w_excel
'列'=列。
列的调用方法
'自动拟合'。

belnr = WA_FINAL-BELNR。

执行get_file_l 位置更改p_file。
将p_file'\'belnr'.xls'合并到P_FILE中。

压缩P_FILE。

调用方法
w_workbook
'SaveAs'
>
导出
#1 = p_file
#6 =1。
设置w_excel'Visible'= 1的属性。

*退出Excel。
*调用方法
* w_excel
*'Quit'。

免费对象:w_excel。
免费对象:w_workbooks。
免费对象:w_workbook。
免费对象:w_cell。
>免费对象:列。
免费对象:cell1。
免费对象:range。
免费对象:BORDER。
免费对象:cell2。

清除:日期,
> ciw,
ciw2,
ciw3,
ciw4,
ciw5,
sr_no,
line_cnt,
total,
totwrd,
total1,
d1,
d2,
d3,
p_file。
ENDFORM。 " CONVERSION_EXCEL
*&------------------------------------------- -------------------------- *
*&填写FILL_CELL
*&----------- -------------------------------------------------- -------- *
*文字
* -------------------------------- -------------------------------------- *
*-> P_1文字
*-> P_7文本
*-> P_2293文本
* ------------------------------ ---------------------------------------- *
FORM fill_cell使用ij值。

数据:val1(50)类型c。

val1 = val。如果wa_print-bkref为INITIAL。
将val1''''''合并到val1中分隔符 空格。
endif。

呼叫方法
w_excel
'Cells'= w_cell
导出
#1 = i
#2 = j。
设置w_cell'值'的属性= val1。


设置w_cell'BOLD'的属性= 1。
ENDFORM。" FILL_CELL
*&--------- -------------------------------------------------- ---------- *
*&表格GET_IN_WORD
*&--------------------------- ----------------------------------- ------- *
*文字
* --------------------------------- ------------------------------------- *
*-> P_TOTAL1个文本
* <-P_TOTWRD文字
* ---------------------------------------- ------------------------------ *
FORM get_in_word使用total1
更改为扭曲。

调用功能'HR_IN_CHG_INR_WRDS'
导出
amt_in_num = total1
导入
amt_in_words = totwrd
例外情况
data_type_mismatch = 1
OTHERS =2。
ENDFORM。 " GET_IN_WORD
*&------------------------------------------- -------------------------- *
*&表格GET_FILE_LOCATION
*&----------- -------------------------------------------------- -------- *
*文字
* -------------------------------- -------------------------------------- *
* <-P_P_FILE文本
* ------------------------------------------------ ---------------------- *
FORM GET_FILE_LOCATION更改P_FILE。
数据:lv_tmpdir类型字符串。

调用方法cl_gui_frontend_services = > get_temp_directory
更改
temp_dir = lv_tmpdir
例外情况
cntl_error = 1
error_no_gui =2。

呼叫方法cl_gui_cfw => flush
例外情况
cntl_system_error = 1
cntl_error =2。

p_file = lv_tmpdir。

ENDFORM。" GET_FILE_LOCATION

付费偷看设置
发送
3条回答
土豆飞人
1楼-- · 2020-08-26 04:35

在Excel中,如果您在单元格中手动输入数字98123456789999991999,它会根据设计自动将其四舍五入为981234567899999000。 这不是OLE问题。

可能您希望将其作为文本。 在这种情况下,请先将单元格的格式设置为"文本"而不​​是"标准",然后输入值。 它将被视为文本,因此不会被四舍五入。

当学会了学习
2楼-- · 2020-08-26 05:02

顺便说一句,由于工具abap2xlsx 。 与OLE相比,此工具几乎仅具有优势。

hengyuye
3楼-- · 2020-08-26 04:39

在"在Excel中,如果您在单元格中手动输入数字98123456789999991999,它会自动将其四舍五入为981234567899999000" 设计。这不是OLE问题。"

这是Excel应用程序中的设置。 您可以在" Excel选项"的"公式"标签下删除"格式为文本或加撇号的数字"选项,也可以在数字前面添加(连接)

一周热门 更多>