2011年3月21日月曜日

CSVファイルをExcelファイルに変換するツール

CSVファイルをExcelに読み込むと0詰めした数値や日付が異なる書式になってしまうという問題があります。『外部データの取り込み』機能を使用することによりCSVやタブ区切りテキスト等をそのまま読み込むこともできますが、手順がややこしいのでCSVからXLSに変換するプログラムで作ってみました。

なお、CSVファイルの形式はソフトによって微妙に仕様が異なるものの、RFC 4180で標準的な仕様がまとめられています。


■ソースについて■

Visual Studio 2008(C#)で開発しています。
zlib/libpng Licenceで配布します。

■ソースの説明■

Excelを操作するために、COMオブジェクトへの参照設定を追加する必要があります。
Excelのバージョンによって表記が異なりますが、ここでは『Microsoft Excel 11.0 Object Library』を追加しています。


usingで以下のパッケージの使用を宣言します。InteropServicesにあるMarshalクラスはCOMオブジェクトを操作するのに使用します。
using System.Runtime.InteropServices;

using Microsoft.Office.Interop.Excel;
Excelを操作するにはApplicationクラスのインスタンスを作成します。
エラー時にもメッセージを表示しないように、DisplayAlertsにはfalseを指定しておきます。
ExcelObj = new Application();
ExcelObj.DisplayAlerts = false;
 この後、ワークブック、シート、セル、レンジの順にオブジェクトを取得します。
取得したオブジェクトは不要になったらReleaseComObjectで開放します。
開放を忘れるとExcelのプロセスが終了しません。
Workbooks workbooksObj = ExcelObj.Workbooks;
Marshal.ReleaseComObject(workbooksObj);
レンジオブジェクトのValue2プロパティを使用しセルに任意の値を設定します。
cellObj = (Range)rangeObj[row + 1, col + 1];
cellObj.Value2 = value;
最後に、SaveAsでファイルに保存します。
このとき、Excelのバージョンによってフォーマットの定数が異なるので注意が必要です。
BookObj.SaveAs(filePath, fileFormat, null, null, null, null, XlSaveAsAccessMode.xlExclusive, null, null, null, null, null);

■ダウンロード■
 
プログラム:
http://tecproglab.googlecode.com/files/csv2xls.zip
 
実行ファイル:
http://tecproglab.googlecode.com/files/csv2xls.exe.zip
 
SVN:
http://tecproglab.googlecode.com/svn/trunk/vcs/csv2xls