Excelからデータを読み込むコマンドラインプログラムを書いてみた。
こういうExcelファイルを読み込んで、
時間 | 数値 |
2009/2/28 | 1 |
2009/3/1 | 2 |
2009/3/2 | 3 |
2009/3/3 | 4 |
>> DumpExcel.exe sample.xls Sheet1 2 5 時間 数値 2009/2/28 1 2009/3/1 2 2009/3/2 3 2009/3/3 4
カラム数、行数を引数で指定するのが非常にイケてない。
ちゃんとしたクラス化も含めて全面改装予定。
事前に参照の追加を行ってください。
参照設定→参照の追加→COM→Microsoft Excel 11.0 Object Library(Excel2003の場合)
using System; using System.Collections.Generic; using System.Text; using Excel = Microsoft.Office.Interop.Excel; namespace ExcelCli { class Program { static void Main(string[] args) { if (args.Length != 4) { usage(); Environment.Exit(1); } string excelName = args[0]; string sheetName = args[1]; int nCol = int.Parse(args[2]); int nRow = int.Parse(args[3]); Excel.Application oXls; Excel.Workbook oWBook; Excel.Worksheet oSheet; oXls = new Excel.Application(); //oXls.Visible = true; oWBook = (Excel.Workbook)(oXls.Workbooks.Open( excelName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing )); oSheet = (Excel.Worksheet)oWBook.Sheets[getSheetIndex(sheetName, oWBook.Sheets)]; Excel.Range rng = oSheet.get_Range("A1", Type.Missing).get_Resize(nRow, nCol); for (int i = 0; i < nRow; i++) { string[] row = new string[nCol]; for (int j = 0; j < nCol; j++) { rng = (Excel.Range)oSheet.Cells[i + 1, j + 1]; row[j] = rng.Text.ToString(); } Console.WriteLine(string.Join("\t", row)); } oWBook.Close(Type.Missing, Type.Missing, Type.Missing); oXls.Quit(); } private static int getSheetIndex(string sheetName, Excel.Sheets shs) { int i = 1; foreach (Excel.Worksheet sh in shs) { if (sheetName == sh.Name) return i; i++; } return 0; } static void usage() { Console.WriteLine("Usage: DumpExcel.exe filename sheetname nCol nRow"); } } }