テンプレートを使用してExcelファイルにデータをアップロードし、Excelからデータを読み取る方法に関する記事を書くことにしました。
それはすべて、職場では無料のアナログのためにMS Officeを離れるように指示されたという事実から始まりました。
Microsoft.Officeライブラリに基づくアンロードシステムが既にありました。 Interop.Excel」および特定のレポートをアップロードするための多くの既製のテンプレート。
したがって、オフィスと連携する無料のライブラリを見つける必要がありました。 そして、以前と同じシステムに従ってアンロード作業を行います。 すべてのテンプレートと構造をやり直したくなかったからです。
そこで、OpenXMLに出会いました。 そして、私はすぐにインターネットで解決策を見つけ、すべての準備ができたと思った(これにはほとんど時間が割り当てられなかったため)。 しかし、適切な解決策が見つからなかったため、同じ問題を抱える人のために、この記事を書くことにしました。
ライブラリ自体は、Micrisoft Webサイトから無料でダウンロードできます(OpenXML sdk 2.5“ OpenXMLSDKV25.msi”プロジェクトを使用しました)
こちら 。
「OpenXMLSDKV25.msi」をダウンロードしたら、インストールしてフォルダーに移動します
「C:\ Program Files \ Open XML SDK \ V2.5 \ lib」には必要なライブラリがあります。これをプロジェクトに接続します(以下で説明します)。
このプロジェクトはVisual Studio 2010(Framework 4.0)で作成されました。
以下は、テスト用に作成されたテンプレートの例です。「C:\ Templates \ template.xlsx」。

また、ダウンロードしたデータの例(最終的にアンロードした後の外観)。

キーワード:
DataField:-この時点で、DataTableからバスが表示されることを意味します。
DataField:[表示されたフィールドの名前]
ラベル:-この時点で、辞書から一度挿入する必要があるデータが表示されることを意味します
ラベル:[辞書のキー名]
そして、これはデータ「C:\ Loading \ ReadMePlease.xlsx」を読み取るファイルです。

次に、VS2010で、4つのプロジェクトがあるソリューションを作成します。
1)OpenXmlPrjは、テストを実行するコンソールプロジェクトです。
2)インターフェイスは「クラスライブラリ」のようなプロジェクトで、アップロード用のデータインターフェイスを保存します。
3)フレームワークは「クラスライブラリ」のようなプロジェクトです。Excelでのすべての作業はここで行われます。
4)Converterは、データをDataTableに変換するための「クラスライブラリ」タイプのプロジェクトです(DataTableで作業が行われるため)。

「フレームワーク」プロジェクトで、2つのフォルダーを作成し、リンクをOpenXMLおよびWindowsBaseライブラリに接続します。
「作成」-データのアップロードを操作します。
「ロード」-データのロードを操作します。
「Lib」-フォルダーにOpenXMLライブラリを追加します。
「作成」フォルダーに4つのクラスを作成します。
1)ワーカー-これがメインハンドラーになります。
クラスCreate.Workerusing System; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.IO; using System.Linq; using System.Text.RegularExpressions; using DocumentFormat.OpenXml; using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Spreadsheet; namespace Framework.Create {
2)フッター-データの後に来る行とそのセルが含まれます。
フッタークラス using System; using System.Collections.Generic; using DocumentFormat.OpenXml.Spreadsheet; namespace Framework.Create { public class Footer {
3)CellForFooter-セルの座標とその値が含まれ、フッターで使用されます。
クラスCellForFooter using System; using DocumentFormat.OpenXml.Spreadsheet; namespace Framework.Create { public class CellForFooter {
4)フィールド-DataFieldが配置されている行のインデックス、DataFieldを含むセルの座標、および値を表示するフィールドの名前が含まれます。
クラスField using System; namespace Framework.Create { public class Field {
「Load」フォルダーに2つのクラスを作成します。
1)ワーカー-これがメインハンドラーになります。
クラスLoad.Worker using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text.RegularExpressions; using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Spreadsheet; namespace Framework.Load {
2)ColumnName-ロードされたデータの列の名前になります。
クラスColumnName using System; namespace Framework.Load { public class ColumnName {
「Interfaces」プロジェクトでは、データのIDataForTestインターフェイスを作成します。
IDataForTestインターフェイス using System; namespace Interfaces { public interface IDataForTest { String A { get; } String B { get; } String C { get; } } }
「Converter」プロジェクトで、クラスを作成します
ConvertToDataTable-データをDataTableに変換します。
ConvertToDataTableクラス using System; using System.Collections; using System.Collections.Generic; using System.Data; using Interfaces; namespace Converter { public class ConvertToDataTable { public DataTable ExcelTableLines(IEnumerable<IDataForTest> lines) { var dt = CreateTable(); foreach (var line in lines) { var row = dt.NewRow(); row["AAA"] = line.A; row["BBB"] = line.B; row["CCC"] = line.C; dt.Rows.Add(row); } return dt; } public Hashtable ExcelTableHeader(Int32 count) { var head = new Dictionary<String, String> { { "Date", DateTime.Today.Date.ToShortDateString() }, { "Count", count.ToString() } }; return new Hashtable(head); } private DataTable CreateTable() { var dt = new DataTable("ExelTable"); var col = new DataColumn { DataType = typeof(String), ColumnName = "AAA" }; dt.Columns.Add(col); col = new DataColumn { DataType = typeof(String), ColumnName = "BBB" }; dt.Columns.Add(col); col = new DataColumn { DataType = typeof(String), ColumnName = "CCC" }; dt.Columns.Add(col); return dt; } } }
プロジェクト「OpenXmlPrj」
「プログラム」プログラムを実行するためのクラスがあります。
クラスプログラム using System; using System.Collections.Generic; using System.Data; namespace OpenXmlPrj { class Program { static void Main(string[] args) {
また、データのクラスは「DataForTest」です。
クラスDataForTest using System; using System.Data; using Interfaces; namespace OpenXmlPrj { public class DataForTest : IDataForTest { public String A { get; private set; } public String B { get; private set; } public String C { get; private set; } public DataForTest(String a, String b, String c) { A = a; B = b; C = c; } public DataForTest(DataRow item) { A = item["MyFieldA"].ToString(); B = item["MyFieldB"].ToString(); C = item["MyFieldC"].ToString(); } } }
また、プロジェクト「OpenXmlPrj」は、リンクを次のプロジェクトに接続する必要があります:インターフェイス、フレームワーク、コンバーター
テンプレートを作成するための条件:
1. Excelシート、「Sheet1」と呼ばれる必要があります(まあ、または名前を変更する場合は、コードでも名前を変更する必要があります)。
2. DataFieldの後の名前:DataTableの列名と厳密に一致する必要があります。
3.テンプレートは「.xlsx」形式で保存する必要があります。
データを読み込むファイルの条件:
1. Excelシート、「Sheet1」と呼ばれる必要があります(まあ、または名前を変更する場合は、コードでも名前を変更する必要があります)。
2.最初の行には、データの解析に使用する列の名前を含める必要があります。
GitHubのソースへのリンク。