» 開発→アンマネージコードからの.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の置き換えに注意を引く方法についてアイデアを持っているなら、書いてください。 嬉しいだけです。
例とソースはここからダウンロードできます 。