DOI
SMW0 에 올려놓은 문서 양식이랑 같이 활용..
INCLUDE: officeintegrationinclude.
DATA: doc_table LIKE w3mime OCCURS 0.
DATA: doc_size TYPE i.
DATA: doc_type(80) VALUE soi_doctype_excel_sheet."엑셀
DATA: doc_format(80) TYPE c.
DATA: link_server TYPE REF TO i_oi_link_server.
DATA: factory TYPE REF TO i_oi_document_factory.
DATA: document TYPE REF TO i_oi_document_proxy.
DATA: retcode TYPE t_oi_ret_string.
IF factory IS INITIAL.
" free
FREE: factory , link_server, document.
CALL METHOD c_oi_factory_creator=>get_document_factory
IMPORTING
factory = factory
retcode = retcode.
IF retcode NE c_oi_errors=>ret_ok.
EXIT.
ENDIF.
CALL METHOD factory->start_factory
EXPORTING
r3_application_name = lv_title
IMPORTING
retcode = retcode.
CALL METHOD c_oi_errors=>show_message
EXPORTING
type = 'E'.
CALL METHOD factory->get_link_server
IMPORTING
link_server = link_server
retcode = retcode.
CALL METHOD c_oi_errors=>show_message
EXPORTING
type = 'E'.
CALL METHOD link_server->start_link_server
EXPORTING
link_server_mode = 3
IMPORTING
retcode = retcode.
CALL METHOD c_oi_errors=>show_message
EXPORTING
type = 'E'.
* CALL METHOD link_server->add_table_item2
* EXPORTING
* item_name = 'EXCEL_TAB'
* IMPORTING
* retcode = retcode
* CHANGING
* data_table = excel_tab[].
CALL METHOD link_server->add_string_item
EXPORTING
item_name = 'TITLE'
* item_title = ''
item_value = lv_title
* no_flush = ' '
* IMPORTING
* error =
* retcode =
.
ENDIF. "factory IS INITIAL..
*
CLEAR: doc_table[].
CALL FUNCTION 'SAP_OI_LOAD_MIME_DATA'
EXPORTING
object_id = 'ZZZ0001' " SMW0 정의된 문서
IMPORTING
data_size = doc_size
document_format = doc_format
document_type = doc_type
TABLES
data_table = doc_table
EXCEPTIONS
object_not_found = 1
internal_error = 2
OTHERS = 3.
IF sy-subrc NE 0.
RAISE fail_document_load.
MESSAGE ID sy-msgid TYPE 'E' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
IF doc_size NE 0.
CALL METHOD link_server->add_table_item2
EXPORTING
item_name = 'EXCEL_TAB'
IMPORTING
retcode = retcode
CHANGING
data_table = excel_tab[].
* FACTORY 와 DOCUMENT 연결
CALL METHOD factory->get_document_proxy
EXPORTING
document_type = doc_type
IMPORTING
document_proxy = document
retcode = retcode.
CALL METHOD c_oi_errors=>show_message
EXPORTING
type = 'E'.
* Document를 Protected Mode로 Open하고 매크로를 실행함.
CALL METHOD document->open_document_from_table
EXPORTING
document_table = doc_table[]
document_size = doc_size
IMPORTING
retcode = retcode.
CALL METHOD c_oi_errors=>show_message
EXPORTING
type = 'E'.
ELSE.
RAISE fail_document_open.
MESSAGE s000 WITH '선택한 문서가 없습니다'.
EXIT.
ENDIF.
CALL METHOD document->execute_macro
EXPORTING
macro_string = 'Sheet1.WRITE_DATA'
IMPORTING
error = lv_error
retcode = retcode
* CHANGING
* error_string =
* retvalue =
.
* CALL METHOD document->CLOSE_DOCUMENT.
Option Explicit
Dim i
Dim j
Dim row
Dim column
Dim R3tab As Object
Dim r3title As Object
Dim ws1 As Worksheet
--------------------------------
Sub WRITE_DATA()
Set ws1 = ThisWorkbook.Sheets(1)
Set R3tab = ThisWorkbook.Container.linkserver.items("EXCEL_TAB").Table
Call title
For i = 1 To R3tab.Rows.Count
Select Case CVar(R3tab.Value(i, 1))
Case...
End Select
For j = 1 To 22
ws1.Cells(j + 6, column) = CVar(R3tab.Value(i, j + 1))
Next
Next
End Sub
-----------------------------
Sub title()
Set r3title = ThisWorkbook.Container.linkserver.items("TITLE")
ActiveSheet.Shapes.Range(Array("Rectangle 1")).Select
Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = r3title.Data
End Sub