NPOIのバージョンは2.0.6.0、動作確認に使用したExcelは2002です。(ふるっ)
会社ではエクセル出力の要望が多く、NPOIは簡単なエクセルなら
すぐできてしまうのでとても便利です。
//エクセルブックとシートのオブジェクト作成 IWorkbook book = new HSSFWorkbook(); ISheet sheet = book.CreateSheet("testsheet"); //適当なデータを設定 for (int i = 0; i < 6; i++) { var row = sheet.CreateRow(i); for (int j = 0; j < 6; j++) { var cell = row.CreateCell(j); cell.SetCellValue(string.Format("({0},{1})", i + 1,j + 1)); } } using (var fs = new FileStream(@"d:\test.xls", FileMode.OpenOrCreate, FileAccess.Write)) book.Write(fs);
この時に印刷範囲の指定をしようとしてはまりました。
NPOIにはISheetインタフェースにSetRowBreak、SetColumnBreakというメソッドが
あるのでこれを指定するだけ、と思いましたが期待通りの動作はしてくれません。
//エクセルブックとシートのオブジェクト作成 IWorkbook book = new HSSFWorkbook(); ISheet sheet = book.CreateSheet("testsheet"); //適当なデータを設定 for (int i = 0; i < 6; i++) { var row = sheet.CreateRow(i); for (int j = 0; j < 6; j++) { var cell = row.CreateCell(j); cell.SetCellValue(string.Format("({0},{1})", i + 1,j + 1)); } } sheet.SetRowBreak(2); //追加 sheet.SetColumnBreak(2); //追加 using (var fs = new FileStream(@"d:\test.xls", FileMode.OpenOrCreate, FileAccess.Write)) book.Write(fs);※エクセルの3列目と3行目に改ページを行う設定を追加
対処方法ですが、SheetオブジェクトのFitToPageプロパティをFalseに設定すれば
思ったとおりの動作をしてくれます。
//エクセルブックとシートのオブジェクト作成 IWorkbook book = new HSSFWorkbook(); ISheet sheet = book.CreateSheet("testsheet"); //適当なデータを設定 for (int i = 0; i < 6; i++) { var row = sheet.CreateRow(i); for (int j = 0; j < 6; j++) { var cell = row.CreateCell(j); cell.SetCellValue(string.Format("({0},{1})", i + 1,j + 1)); } } sheet.SetRowBreak(2); sheet.SetColumnBreak(2); sheet.FitToPage = false; //追加 using (var fs = new FileStream(@"d:\test.xls", FileMode.OpenOrCreate, FileAccess.Write)) book.Write(fs);
FitToPageはシートを1ページに収まるように自動で調整するプロパティでデフォルトでTrueになっているため、SetRowBreak,SetColumnBreakを設定してもこちらが優先されてしまうようです。