1C、Linux、Excel、Word、OpenXML、ADO、およびNet Core

ハブラチ人への良い一日! 今日、私は偉大で力強いRuslishであなたを苦しめ続けます。 これは記事の続きです。



» 開発→アンマネージコードからの.Netクラスのクロスプラットフォーム使用。 またはLinuxのIDispatchの類似物

» 開発→ネイティブVKを介した1Cでの.Netクラスのクロスプラットフォーム使用。 またはLinuxでCOMを置き換える

» ネイティブVKを介した1Cでの.Netクラスのクロスプラットフォーム使用。 またはLinux IIでCOMを置き換える

» .Net Native VKによる1Cの非同期プログラミング



それ以来、Linq拡張機能の使用を追加しました。 この記事では、コンポーネントの実際の使用について触れます。 つまり、OpenXMLとNetStandartを使用して、クロスプラットフォームでExcelファイルとWordファイルを処理します。



実際、この開発が考えられたもののために。 ソースはここから取得されました 。 残念ながら、Nugetがないと、ライブラリをプロジェクトに接続できません。 ただし、CoreClrを介して接続できます。 OpenXMLの操作に関する参照情報は、 ここにあります

How am I ...(Open XML SDK)



それでは、Excelページを読むことから始めましょう。 タスクは、データを値テーブルに変換することです。



 Excel() //   OpenXml=(.("DocumentFormat.OpenXml.dll")); //   SpreadsheetDocument=(OpenXml.GetType("DocumentFormat.OpenXml.Packaging.SpreadsheetDocument")); SharedStringTablePart=(OpenXml.GetType("DocumentFormat.OpenXml.Packaging.SharedStringTablePart")); CellValues=(OpenXml.GetType("DocumentFormat.OpenXml.Spreadsheet.CellValues")); SharedString=(CellValues.SharedString); Cell=(OpenXml.GetType("DocumentFormat.OpenXml.Spreadsheet.Cell")); Sheet=(OpenXml.GetType("DocumentFormat.OpenXml.Spreadsheet.Sheet")); Regex=("System.Text.RegularExpressions.Regex","System.Text.RegularExpressions",); //      1   Regex =(.(Regex.(),"[A-Za-z]+")); =(.(Regex.(),"\d+")); //   Excel doc = (SpreadsheetDocument.Open(, false)); workbookPart = (doc.WorkbookPart); //    //     pt=((workbookPart.in(SharedStringTablePart.())).GetPartsOfType()); sstpart = (pt.First()); sst = (sstpart.SharedStringTable); =(sst.ChildElements); workbook = (workbookPart.Workbook); //    sheets = ((workbook.in(Sheet.())).Descendants()); sheets=(.(sheets.()));  sheets.MoveNext()  sheet= (sheets.Current); id=(sheet.Id).Value; =(sheet.Name).Value; (); worksheetPart = (workbookPart.GetPartById(id)); Worksheet=(worksheetPart.Worksheet); //          //     ,,, // = A1, =A,=1; =(Worksheet,); //      //      //     A,B,D..AA,AB.. =(); .();  
      
      





テーブルセルに関するデータを取得する方法をより詳細に検討してみましょう



  () //    match = (.Match()); return match.Value;  //            () //     match = (.Match()); return (match.Value);   ( , , )  ; //       =(.CellReference).InnerText; =.DataType; =;  <> null  =(().Value); //       .Equals(SharedString.())  // CellValue        CellValue=(.CellValue); Text=CellValue.Text; ssid = (Text); ChildElement=(.get_Item(ssid));  = ChildElement.InnerText; =; ; ; //      ,     CellValue     = .CellValue;  (<> null)  =(); =.Text; =; ; ;    =.(); .=; .=(); . =(); .=; ;   () //        //         =  ("", (10,0,.)); = ; =.; .("",()); .("",()); .("",); .("",());  ;   ( sheet, ) //     cells = ((sheet.in(Cell.())).Descendants()); cells=(.(cells.())); = (); //       cells.MoveNext()  =(cells.Current); (,,) ;  ; 
      
      





次に、セルデータを含むTKをExcelページと同様の正常性値テーブルに変換する必要があります



  (,,,,,) //           // A,B,..,AA..ABC  =("A")  ("Z")  =+();  <  = (,,+1,,,);        ;  .(,());    =     ; ;  ;   (,) //     //      ABC      //A..Z //AA..ZZ //AAA..ABC =();  =1    ==; = (,"",1,,,);      ; ; ;   () =""; =0;       =.; =();  >  =; =;  =  >  =; ; ;  ;   () = ; =(); (.,); =.; //     //     http://infostart.ru/public/371762/ //       =(,""); =1;       =.; //        <  =+1; .(); ; =+1; =.(); =.;       //        64  1  26   //         =.(.); .(.(),.); ; ;  ; 
      
      





次に、Wordファイルからのデータの読み取りに移りましょう。



  GetPlainText( ) XML =  XML; XML.(); //         =(.Elements()); =(.(.()));  .MoveNext()  = (.Current); =.LocalName;  = "t"  =.InnerText; XML.();  = "cr"  = "br"  XML.(NewLine);  = "tab"  XML.(); // Paragraph  = "p"  XML.(GetPlainText()); XML.(NewLine+NewLine);  XML.(GetPlainText()); ; ;  XML.();   Word() OpenXml=(.("DocumentFormat.OpenXml.dll")); WordprocessingDocument=(OpenXml.GetType("DocumentFormat.OpenXml.Packaging.WordprocessingDocument"));  = (WordprocessingDocument.Open(, ));  = (((.MainDocumentPart).Document).Body); if ( = null)   "" ;  GetPlainText();  //
      
      







生産性向上ツールを使用すると非常に便利です。コードを生成できます。5分でOfficeOpenXMLドキュメント生成できます。



さらに、MS SQLとその他の両方(NoSQLを含む)のさまざまなデータベースの多くのプロバイダーがあります。



MS SQLへのアクセスの例を挙げます



 SqlClient=(.("System.Data.SqlClient.dll")); SqlConnection=(SqlClient.GetType("System.Data.SqlClient.SqlConnection")); SqlCommand=(SqlClient.GetType("System.Data.SqlClient.SqlCommand")); connection =(.(SqlConnection.(),ConnectionString)); connection.Open();  = "Select .DESCR  From sc84  where DESCR Like '%'+@+'%' |order by .DESCR"; command = (.(SqlCommand.(),,connection.())); Parameters=(command.Parameters); Parameters.AddWithValue("@", ""); dr = (command.ExecuteReader());  dr.Read()  (dr.get_Item("")); ;
      
      







この場合、SqlDataReaderのDynamicObjectラッパーを作成し、次のように使用できます。

  dr.Read()  (dr.); ;
      
      









私の記事では、主に1Cに、NetStadartを使用したCOMのクロスプラットフォームの代替があることを伝えたいと思います。 しかし、残念なことに、これまでこのアプローチに興味がある人はいません。 Ruslishのみが注目を集めます。 誰かがCOMの置き換えに注意を引く方法についてアイデアを持っているなら、書いてください。 嬉しいだけです。



例とソースはここからダウンロードできます



All Articles