Bonjour à tous,
Je viens vers vous car j'ai besoin de quelques conseils.
j'essaie d'intégrer le contenu d'un document Word (doc ou docx) dans SAP (dans une table interne par exemple)
Je suis partie de la solution suivante
1)J'ai crée un fichier Word avec 3 zones de saisies (NOM, PRENOM et l'AGE), une fois le document remplis,
2)J'ai crée un programme pour lire le fichier word ce dernier me donne un fichier xml que je n'arrive pas à exploiter vu sa structure
Programme
La variable lv_main_data me retourne un fichier XML
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96 *&---------------------------------------------------------------------* *& Report Z_READ_WORD_DOCUMENT *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT z_read_word_document. *Data DATA: lo_document TYPE REF TO cl_docx_document, lv_content TYPE xstring, lv_file TYPE string VALUE 'C:\Users\ZIYU\Desktop\test_abap_docx2\Formulaire.docx'. PERFORM get_doc_binary USING lv_file CHANGING lv_content. lo_document = cl_docx_document=>load_document( lv_content ). CHECK lo_document IS NOT INITIAL. DATA(lo_core_part) = lo_document->get_corepropertiespart( ). DATA(lv_core_data) = lo_core_part->get_data( ). DATA(lo_main_part) = lo_document->get_maindocumentpart( ). * Contenu du fichier word au formation XML DATA(lv_main_data) = lo_main_part->get_data( ). IF lv_main_data IS NOT INITIAL. ENDIF. *&---------------------------------------------------------------------* *& Form GET_DOC_BINARY *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_P_FILE text * <--P_LV_CONTENT text *----------------------------------------------------------------------* FORM get_doc_binary USING iv_path TYPE string CHANGING cv_binary TYPE xstring. CONSTANTS lc_linelen TYPE i VALUE 255. DATA: wa_data(lc_linelen) TYPE x, lt_data LIKE TABLE OF wa_data, converter TYPE REF TO cl_abap_conv_in_ce, lv_length TYPE i. CALL METHOD cl_gui_frontend_services=>gui_upload EXPORTING filename = iv_path filetype = 'BIN' IMPORTING filelength = lv_length CHANGING data_tab = lt_data EXCEPTIONS file_open_error = 1 file_read_error = 2 no_batch = 3 gui_refuse_filetransfer = 4 invalid_type = 5 no_authority = 6 unknown_error = 7 bad_data_format = 8 header_not_allowed = 9 separator_not_allowed = 10 header_too_long = 11 unknown_dp_error = 12 access_denied = 13 dp_out_of_memory = 14 disk_full = 15 dp_timeout = 16 not_supported_by_gui = 17 error_no_gui = 18 OTHERS = 19. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. CALL FUNCTION 'SCMS_BINARY_TO_XSTRING' EXPORTING input_length = lv_length IMPORTING buffer = cv_binary TABLES binary_tab = lt_data EXCEPTIONS failed = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDFORM. " GET_DOC_BINARY
Contenu du document word au format XML
Je vois pas comment je peux faire pour exploiter le contenu du fichier XML, j'ai essayé d'utiliser des modules malheureusement j'arrive pas à obtenir une table avec les résultats formatés sur cette base.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71 <w:document xmlns:ve="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml"> <w:body> <w:p w:rsidR="00B6007C" w:rsidRDefault="00B448F1"> <w:r> <w:t>Formulaire</w:t> </w:r> </w:p> <w:sdt> <w:sdtPr> <w:alias w:val="NOM"/> <w:tag w:val="NOM"/> <w:id w:val="6093696"/> <w:placeholder> <w:docPart w:val="DefaultPlaceholder_22675703"/> </w:placeholder> <w:text/> </w:sdtPr> <w:sdtContent> <w:p w:rsidR="00B448F1" w:rsidRDefault="005814E5"> <w:r> <w:t>LEBRON</w:t> </w:r> </w:p> </w:sdtContent> </w:sdt> <w:sdt> <w:sdtPr> <w:alias w:val="PRENOM"/> <w:tag w:val="PRENOM"/> <w:id w:val="6093698"/> <w:placeholder> <w:docPart w:val="E1494BCF53D34F72A0618116162FC466"/> </w:placeholder> <w:text/> </w:sdtPr> <w:sdtContent> <w:p w:rsidR="00B448F1" w:rsidRDefault="005814E5" w:rsidP="00B448F1"> <w:r> <w:t>JAMES</w:t> </w:r> </w:p> </w:sdtContent> </w:sdt> <w:sdt> <w:sdtPr> <w:alias w:val="AGE"/> <w:tag w:val="AGE"/> <w:id w:val="6093700"/> <w:placeholder> <w:docPart w:val="55684E635B2E489CBA4C15A7421D8B8D"/> </w:placeholder> <w:text/> </w:sdtPr> <w:sdtContent> <w:p w:rsidR="00B448F1" w:rsidRDefault="005814E5" w:rsidP="00B448F1"> <w:r> <w:t>30</w:t> </w:r> </w:p> </w:sdtContent> </w:sdt> <w:p w:rsidR="00B448F1" w:rsidRDefault="00B448F1"/> <w:sectPr w:rsidR="00B448F1" w:rsidSect="00B6007C"> <w:pgSz w:w="11906" w:h="16838"/> <w:pgMar w:top="1417" w:right="1417" w:bottom="1417" w:left="1417" w:header="708" w:footer="708" w:gutter="0"/> <w:cols w:space="708"/> <w:docGrid w:linePitch="360"/> </w:sectPr> </w:body> </w:document>
NOM ->LEBRON
PRENOM->JAMES
AGE->30
Si vous avez une idée n'hésitez pas.
Je vous remercie d'avance.
Partager