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を設定してもこちらが優先されてしまうようです。
0 件のコメント:
コメントを投稿