C#、OpenXml 2.5によるシートコピー後のOleDbによるシートへの書き込み
- 題名: C#、OpenXml 2.5によるシートコピー後のOleDbによるシートへの書き込み
- 著者: gari
- 日時: 2014/01/21 13:24:32
- ID: 32087
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: C#、OpenXml 2.5によるシートコピー後のOleDbによるシートへの書き込み
- 著者: a
- 日時: 2014/01/21 17:02:26
- ID: 32088
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: C#、OpenXml 2.5によるシートコピー後のOleDbによるシートへの書き込み
- 著者: gari
- 日時: 2014/01/22 10:56:30
- ID: 32094
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[3]: C#、OpenXml 2.5によるシートコピー後のOleDbによるシートへの書き込み
- 著者: gari
- 日時: 2014/02/04 19:00:59
- ID: 32134
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[ASP.NET]
こちらへは初めて投稿いたします。
よろしくお願いします。
現在の構築環境
Windows7 Professional 64bit
Visual Studio 2010 Professional
.Net Framework 4.0
OpenXML SDK 2.5 (http://www.microsoft.com/en-us/download/details.aspx?id=30425)
AccessDataEngine (http://www.microsoft.com/ja-jp/download/details.aspx?id=13255)
Excelの形式は2007以降(xlsx)
(ちなみに現在使っているのは、Office 2013です)
Excel(xlsx)を新規作成、その中にSheet1という名前のシートが1シートだけあり、A2のセルに、
あいうえお
と入力しただけのsample.xlsxというファイルがあります。
セルの書式などは変更していません。
C#側で、このsample.xlsxをコピー、copied.xlsxというファイルを作成し、OpenXMLを用いて、Sheet1のシートをコピーしSheet2を作成、OleDbよりシート内のセルに値を書き込みという処理を行っています。
シートのコピーは、
http://blogs.msdn.com/b/brian_jones/archive/2009/02/19/how-to-copy-a-worksheet-within-a-workbook.aspx?Redirected=true
をそっくりそのまま使用しています。
シートのコピーまでは、問題なく行われるのですが、OleDbを使用してセルの値を設定した場合、Sheet1は問題ないものの、Sheet2では、値が反映されません。
とはいえ、Sheet2のA2のセルにある
あいうえお
は空白になっているため、SQLの実行自体は問題ないようです。
実際、OpenXMLを使用せずにExcelからシートをコピーしてSheet2を作成し、OleDbで値を設定した場合は問題なく値がセットされます。
上記理由から、Excelでシートを増やしたxlsxファイルとOpenXMLのシートのコピーで生成されたxlsxファイルを作成し、それぞれのファイルの拡張子をzipに変更、解凍して、出来上がったxmlファイルを比較してみましたが、OpenXMLを最近始めた私の力ではそれをOpenXMLのコピー処理にどうやって組み込んだらよいのか、皆目見当も付きません。
Excelからシートをコピーしたxmlの形式と、OpenXMLでコピーして出来上がったxmlのファイルの構成が同じならいけるんではないかと思ったのですが…
実際にはASP.NET(C#)で同様の処理を実装しています。
シートのコピーはデータベース(SQL SERVER)より取得したカラムの結果により、動的にシートのコピーを行わなければならないため、予めシートを作成しておくといった類のことはできません。
また、OleDb側でCreate Tableをすることでは実現できません。
Sheet1には実際には罫線の指定や、値の埋め込み、タイトル行の設定等がなされているためです。
実は非常に簡単なことなのかもしれませんが行き詰ってしまい、皆様のお力をお借りできれば幸いです。
以上、よろしくお願い致します。