便利なライブラリを発見。メモメモ・・。
- Excel Data Reader - Read Excel files in .NET
文字通り、エクセルデータを読み取る為のライブラリです。
Windows環境だけでなく、CompactFrameworkとMonoにも対応しています。
IExcelDataReaderという型を利用してデータを読み取るのですが
このインターフェースが、IDataReaderインターフェースを実装しているので
データベース処理にてよく利用するDataReaderと同じように扱えます。
本家のページでも分かりやすいサンプルが載せてあるのですが
ついでなので、こちらでも同じようなサンプルを記述しておきます。
using System; using System.Data; using System.IO; using System.Linq; using DevExpress.XtraEditors; using Excel; namespace ExcelDataReaderSample { public partial class XtraForm1 : XtraForm { public XtraForm1() { InitializeComponent(); } private void XtraForm1_Load(object sender, EventArgs e) { // // Excel 2007形式のファイルを開くには以下のようにする。(OpenXml (xlsx)) // 一旦readerを作成した後は、同じように使える。 // //IExcelDataReader excelReader = Factory.CreateReader(File.Open(filePath, FileMode.Open, FileAccess.Read), ExcelFileType.OpenXml); // // Excel 97から2003までのバイナリファイルを開くには以下のようにする。(xls) // string filePath = @".\TestData.xls"; using (IExcelDataReader reader = Factory.CreateReader(File.Open(filePath, FileMode.Open, FileAccess.Read), ExcelFileType.Binary)) { // // 結果をDataSetで取得. // (シート毎にてDataTableが作成される.) // // [注意点] // 何故かエクセルに直接日本語を入力してデータを保存してから // 表示すると、文字が化ける。一旦エディタなどでデータを編集し // クリップボード経由で貼り付けるとうまく表示できる。 // (文字コード??) // DataSet result = reader.AsDataSet(); gridControl1.DataSource = result; gridControl1.DataMember = result.Tables[0].TableName; // // DataReaderのようにしてデータを読み取り. // //DataTable table = new DataTable(); //table.Columns.Add(new DataColumn()); //while (reader.Read()) { // table.Rows.Add(reader.GetInt32(0)); //} reader.Close(); } } } }
試しついでに
データベースのテーブルデータをそのままエクセルに貼り付けて
それをDataSourceとしてグリッドで表示してみたところ、綺麗に表示
できました。(貼り付ける前にエクセル側で全セルの書式を文字列に
してあります)
ただ、ソースにも書いてあるのですが、直接エクセルに日本語を入力して
それを表示すると文字化けしてました。クリップボード経由で
貼り付けてやるとうまく表示できます。恐らく文字コードだと思いますが
誰かご存知の方いらっしゃったら教えてください。m(_ _)m