C#やVBでExcelを出力するために、POIの.NET版が無いか探してみたら、NPOIというものを見つけたので試してみます!!
まず、CodePlexのNPOIのサイトからバイナリリリースをダウンロードします。ダウンロードしたら、コンソールアプリケーションをNPOIEduという名前で作って、ダウンロードしたDLLを参照に追加します。
とりあえず、超適当なデータを作り上げるコードを書いてみました。
using System; using System.IO; using System.Linq; using NPOI.HSSF.UserModel; using NPOI.HSSF.Util; namespace NPOIEdu { class Program { static void Main(string[] args) { // Excelのブックを作成 var book = new HSSFWorkbook(); // シートを作成 var sheet = book.CreateSheet("何とかレポート"); // ヘッダーにあたる行を作成 CreateHeaderRow(book, sheet); // とりあえず10行くらいデータ作成 foreach (var index in Enumerable.Range(1, 10)) { CreateRow(book, sheet, index); } // 2列目と3列目は、そのままだと幅が足りないので広げる(256で1文字ぶんの幅らしい) sheet.SetColumnWidth(1, 256 * 12); sheet.SetColumnWidth(2, 256 * 15); // output.xlsに保存 using (var fs = new FileStream("otuput.xls", FileMode.OpenOrCreate, FileAccess.Write)) { book.Write(fs); } } // ヘッダー行を作成する private static void CreateHeaderRow(HSSFWorkbook book, HSSFSheet sheet) { var row = sheet.CreateRow(0); // 0列目はIDの列 var idCell = row.CreateCell(0); idCell.SetCellValue("ID"); // 1列目は名前の列 var nameCell = row.CreateCell(1); nameCell.SetCellValue("名前"); // 3列目は誕生日の列 var birthdayCell = row.CreateCell(2); birthdayCell.SetCellValue("誕生日"); // 4方に罫線 var style = book.CreateCellStyle(); style.BorderTop = HSSFBorderFormatting.BORDER_THIN; style.BorderLeft = HSSFBorderFormatting.BORDER_THIN; style.BorderBottom = HSSFBorderFormatting.BORDER_THIN; style.BorderRight = HSSFBorderFormatting.BORDER_THIN; // 薄いグリーンの背景色で塗りつぶす style.FillForegroundColor = HSSFColor.LIGHT_GREEN.index; style.FillPattern = HSSFCellStyle.SOLID_FOREGROUND; // テキストはセンタリング style.Alignment = HSSFCellStyle.ALIGN_CENTER; // 太字 var font = book.CreateFont(); font.Boldweight = HSSFFont.BOLDWEIGHT_BOLD; style.SetFont(font); // 全てのヘッダー用のセルに、上で作ったスタイルを適用する foreach (var cell in new[] { idCell, nameCell, birthdayCell }) { cell.CellStyle = style; } } private static Random r = new Random(); // index行目のデータを作る private static void CreateRow(HSSFWorkbook book, HSSFSheet sheet, int index) { // 行を作って var row = sheet.CreateRow(index); // id列を作る var idCell = row.CreateCell(0); idCell.SetCellValue(index); // 名前も適当に入れて var nameCell = row.CreateCell(1); nameCell.SetCellValue("田中 太郎" + index); // 誕生日も適当に var birthdayCell = row.CreateCell(2); birthdayCell.SetCellValue(DateTime.Now.AddYears(r.Next(10))); // 全ての列に4方に罫線のあるスタイルを作って適用する // あえて別々のスタイルを設定してるのは、誕生日セルにフォーマットを入れるため foreach (var cell in new[] { idCell, nameCell, birthdayCell }) { var style = book.CreateCellStyle(); style.BorderTop = HSSFBorderFormatting.BORDER_THIN; style.BorderRight = HSSFBorderFormatting.BORDER_THIN; style.BorderLeft = HSSFBorderFormatting.BORDER_THIN; style.BorderBottom = HSSFBorderFormatting.BORDER_THIN; cell.CellStyle = style; } // 日付用yyyy年mm月dd日のフォーマットで誕生日は表示するようにする var format = book.CreateDataFormat(); birthdayCell.CellStyle.DataFormat = format.GetFormat("yyyy年mm月dd日"); } } }
JavaのPOIとほとんど同じ使い方でいけます。たまに、set〜とかget〜という名前のメソッドのものが、NPOIだとプロパティになっていたりするので、そこだけ気をつけてればOKだと思います。上記のコードで、こんなExcelファイルが作られます。
このコードを実行したマシンはExcel入ってないので、Excel入ってないマシンでもExcelファイルを作れます。
今回参考にさせていただいたサイトは、以下のサイトです。(JavaのPOIと同じ要領で使えるので参考情報もJavaのが主になると思います)
- JavaDrive.jp
- このサイトのPOIについて書かれてるページ