{"id":810,"date":"2012-11-11T17:41:59","date_gmt":"2012-11-11T16:41:59","guid":{"rendered":"http:\/\/www.capri-soft.de\/blog\/?p=810"},"modified":"2016-02-26T09:45:21","modified_gmt":"2016-02-26T08:45:21","slug":"ibm-doors-dxl-excel-dateien-einlesen-mit-ole-automation","status":"publish","type":"post","link":"https:\/\/www.capri-soft.de\/blog\/?p=810","title":{"rendered":"IBM Doors DXL: Excel Dateien einlesen mit OLE Automation"},"content":{"rendered":"<h1>Problem<\/h1>\n<p>IBM Doors besitzt keine direkte Import-Option f\u00fcr Excel Files. Man geht hier den Umweg \u00fcber das konvertieren in andere Formate. Manchmal sind mehrere Tools bei einem Import beteiligt.<\/p>\n<h1>Ansatz<\/h1>\n<p>Durch das direkte Einlesen von Excel Dateien in DXL \u00fcber OLE Automation kann auf Zellenwerte zugegriffen werden.<\/p>\n<h1>L\u00f6sung<\/h1>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n\/\/ Global settings\r\n\/\/pragma encoding,&quot;UTF-8&quot;;\r\npragma runLim, 0;\r\n\r\nint findLastRow (OleAutoObj objExcelSheet)\r\n{\r\n\tOleAutoObj objUsedRange, objRows;\r\n      int iRow = 0;\r\n\toleGet(objExcelSheet,&quot;UsedRange&quot;,objUsedRange);\r\n\toleGet(objUsedRange,&quot;Rows&quot;,objRows);\r\n\toleGet(objRows,&quot;Count&quot;,iRow);\r\n \r\n      return iRow+1;\r\n}\r\n\r\nint findLastColumn (OleAutoObj objExcelSheet)\r\n{\r\n\tOleAutoObj objUsedRange, objColumns;\r\n      int iColumn = 0;\r\n\toleGet(objExcelSheet,&quot;UsedRange&quot;,objUsedRange);\r\n\toleGet(objUsedRange,&quot;Columns&quot;,objColumns);\r\n\toleGet(objColumns,&quot;Count&quot;,iColumn );\r\n \r\n      return iColumn +1;\r\n}\r\n\r\nstring getCellContent(OleAutoObj objSheet, int x, int y)\r\n{\r\n\t\/\/ Das hier brauchen wir, um Parameter an OLE-Objekte zu \u00fcbergeben\r\n             \/\/  - immer leer machen!\r\n\tOleAutoArgs objArgBlock = create;\r\n\r\n\tOleAutoObj objCell;  \/\/ Das Zellen-Objekt nach \u00dcbermittlung \r\n                                        \/\/ der Koordinaten (1,1)\r\n\tstring zellenInhalt;\t\/\/ Der Inhalt aus der Zelle als String\r\n\tclear( objArgBlock );   \/\/ Parameter leeren\r\n\tput( objArgBlock, x );  \/\/ Parameter 1\r\n\tput( objArgBlock, y );  \/\/ Parameter 2\r\n             \/\/ Das Zellenobjekt nimmt Koordinaten an\r\n\toleGet(objSheet, &quot;Cells&quot;, objArgBlock,objCell); \r\n\r\n\tif (!null objCell)\r\n\t\t\/\/ Ewig rumprobiert... Value liefert Schrott bei Zahlen (manchmal nix...) \r\n\t\t\/\/ oleGet(objCell,&quot;Value&quot;,zellenInhalt);\t{\r\n\r\n\t\t\/\/ Get the value\r\n\t\toleGet(objCell,&quot;FormulaR1C1&quot;,zellenInhalt);\r\n\t}\r\n\telse return &quot;&quot;;\r\n\r\n\treturn zellenInhalt &quot;&quot;;\r\n}\r\n \r\n \r\n \r\nvoid main(void)\r\n{\r\n\t\/\/ Wenn Excel lokal installiert ist gibt es dieses OLE Objekt im \r\n            \/\/ System.. suchs Hasso!!!\r\n\tOleAutoObj objExcel = oleCreateAutoObject( &quot;Excel.Application&quot; );\r\n\r\n\t\/\/ Das hier brauchen wir, um Parameter an OLE-Objekte zu \r\n             \/\/ \u00fcbergeben - immer leer machen!\r\n\tOleAutoArgs objArgBlock = create;\r\n\r\n\t\/\/ Was steht in Application.isVisible?\r\n\tbool isVisible;\t\/\/ Auslesen 1\r\n\toleGet(objExcel, &quot;Visible&quot;, isVisible);\t\/\/ Auslesen 2\r\n\tprint &quot;Die Anwendung ist momentan &quot; (isVisible?&quot;sichtbar&quot;:&quot;unsichtbar&quot;) &quot;\\n&quot;;\r\n\r\n\t\/\/ Mache die Anwendung sichtbar Application.isVisible=true;\r\n\tolePut(objExcel, &quot;Visible&quot;, true);\t\t\/\/ Reinschreiben\r\n\r\n\t\/\/ Ein Woorkbook ist eine Excel-Datei. Excel kann mehrere Dateien \r\n             \/\/ \u00f6ffnen daher die Collection. Die Collection selbst hat die Open \r\n             \/\/ Methode zum einlesen von XLS-Files\r\n\tOleAutoObj objWorkbooks;\r\n\toleGet(objExcel, &quot;Workbooks&quot;, objWorkbooks);\t\/\/ Hole Workbooks Collection\r\n\r\n\t\/\/ \u00d6ffne Excel application\r\n\tstring xlsWorkbook=&quot;N:\\\\doorsattachments\\\\alarms.xls&quot;;\t\/\/ \u00d6ffne Workbook\r\n\tclear( objArgBlock );\r\n\tput( objArgBlock, xlsWorkbook);\r\n\tOleAutoObj objWorkbook = null;\r\n              \/\/ Reinschreiben Datei zu \u00f6ffnen und Auslesen \r\n\toleGet(objWorkbooks, &quot;Open&quot;,objArgBlock, objWorkbook ); \r\n\t\/\/ Hole das erste Sheet\r\n\tclear( objArgBlock )\r\n\tput( objArgBlock, 1 )\r\n\toleGet( objWorkbook, &quot;Sheets&quot;, objArgBlock, objSheet);\r\n\r\n\t\/\/ Gib den Namen des ersten Sheets aus\r\n\tstring sheetName;\r\n\toleGet(objSheet, &quot;Name&quot;, sheetName);\r\n\tprint sheetName &quot;\\n&quot;;\r\n\r\n\t\/\/ Hole das Sheet mit dem Namen sheet1\r\n\tclear( objArgBlock );\r\n\tput( objArgBlock, &quot;sheet1&quot; ); \r\n\toleGet( objWorkbook, &quot;Sheets&quot;, objArgBlock, objSheet);\t\r\n\r\n\t\/\/ Gib den Index des &quot;sheet1&quot; Sheets aus\r\n\tint sheetIndex;\r\n\toleGet(objSheet, &quot;Index&quot;, sheetIndex);\r\n\tprint sheetIndex&quot;\\n&quot;;\r\n\r\n\t\/\/ Hole das Cells(1,1) Objekt um auf die Excel Zellen zuzugreifen\r\n\tprint &quot;Zelleninhalt  : &quot; getCellContent(objSheet,1,1) &quot;\\n&quot;;\r\n\tprint &quot;Zelleninhalt  : &quot; getCellContent(objSheet,2,2) &quot;\\n&quot;;\r\n\tprint &quot;Letzte Zeile  : &quot; findLastRow(objSheet) &quot;\\n&quot;;\r\n\tprint &quot;Letzte Spalte :&quot;  findLastColumn(objSheet) &quot;\\n&quot;;\r\n\r\n\t\/\/ Iteration durch das Excel Sheet \r\n\tint spaltenCount = findLastColumn(objSheet);\r\n\tint zeilenCount  = findLastRow(objSheet);\r\n\tint currentZeile, currentSpalte;\r\n\tstring zeilenString=&quot;&quot;;\r\n\r\n\tfor (currentZeile=1;currentZeile&amp;lt;zeilenCount;currentZeile++)\r\n\t{\r\n\t\t\r\n\t\tfor (currentSpalte=1;currentSpalte&amp;lt;spaltenCount;currentSpalte++)\r\n\t\t{\r\n\t\t\tzeilenString = zeilenString &quot;&quot; getCellContent(objSheet, \/\/-\r\n                                                      currentSpalte, currentZeile) &quot;\\t&quot;;\t\r\n\t\t}\r\n\t\tprint zeilenString &quot;\\n&quot;;\r\n\t\tzeilenString=&quot;&quot;;\r\n\t}\r\n\r\n\t\/\/ Speicher aufr\u00e4umen\r\n\toleCloseAutoObject( objExcel );\r\n}\r\n\r\nmain();\r\n<\/pre>\n<iframe src=\"http:\/\/www.facebook.com\/plugins\/like.php?href=https%3A%2F%2Fwww.capri-soft.de%2Fblog%2F%3Fp%3D810&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light\" scrolling=\"no\" frameborder=\"0\" allowTransparency=\"true\" style=\"border:none; overflow:hidden; width:450px;margin-top:5px;\"><\/iframe>","protected":false},"excerpt":{"rendered":"<p>Problem IBM Doors besitzt keine direkte Import-Option f\u00fcr Excel Files. Man geht hier den Umweg \u00fcber das konvertieren in andere Formate. Manchmal sind mehrere Tools bei einem Import beteiligt. Ansatz Durch das direkte Einlesen von Excel Dateien in DXL \u00fcber OLE Automation kann auf Zellenwerte zugegriffen werden. L\u00f6sung \/\/ Global settings \/\/pragma encoding,&quot;UTF-8&quot;; pragma runLim, &hellip; <a href=\"https:\/\/www.capri-soft.de\/blog\/?p=810\" class=\"more-link\"><span class=\"screen-reader-text\">IBM Doors DXL: Excel Dateien einlesen mit OLE Automation<\/span> weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[22,19],"tags":[],"class_list":["post-810","post","type-post","status-publish","format-standard","hentry","category-dxl","category-ibm-doors"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p4yGeN-d4","jetpack_likes_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/810","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=810"}],"version-history":[{"count":13,"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/810\/revisions"}],"predecessor-version":[{"id":812,"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/810\/revisions\/812"}],"wp:attachment":[{"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=810"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=810"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=810"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}