[C#] NPOI Excel合併儲存格

2014-05-22

在.net 系統開發下,要處理Excel 通常會用 NPOI ,之前也有寫過文章

可參考: http://no2don.blogspot.com/2013/02/c-nopi-excel-xls.html

今天遇到的問題是,我要如何合併儲存格呢?

結果像是這樣
圖片 004

合併儲存格最重要的Code :


var workbook = new HSSFWorkbook();
var sheetReportResult = workbook.CreateSheet("報表結果");
 //產生第一個要用CreateRow 
sheetReportResult.CreateRow(0).CreateCell(0).SetCellValue("客戶資料");
 
//建立跨越五列(共六列 1~6)  ,跨越三欄(共四欄 A~D)
sheetReportResult.AddMergedRegion(new CellRangeAddress(0, 5, 0, 3));

重點在最後一行進行合併

合併後,塞資料方法一如往常,只是請注意,已經跨越的攔或列都必須要計算進去

完整Code :


protected void Button1_Click(object sender, EventArgs e)
{
          var workbook = new HSSFWorkbook();
          var sheetReportResult = workbook.CreateSheet("報表結果");
 
          //產生第一個要用CreateRow 
          sheetReportResult.CreateRow(0).CreateCell(0).SetCellValue("客戶資料");
 
          //建立跨越五列(共六列 1~6)  ,跨越三欄(共四欄 A~D)
          sheetReportResult.AddMergedRegion(new CellRangeAddress(0, 5, 0, 3));
 
 
 
 
          //因為前6格(0~5)都被用掉了要從6開始
          sheetReportResult.CreateRow(6).CreateCell(0).SetCellValue("姓名");
          sheetReportResult.GetRow(6).CreateCell(1).SetCellValue("電話");
          sheetReportResult.GetRow(6).CreateCell(2).SetCellValue("備註");
 
          //第一Row 已經被Title用掉了 所以從1開始
          for (var i = 7; i <= 20; i++)
          {
              sheetReportResult.CreateRow(i).CreateCell(0).SetCellValue("用戶" + i);
              sheetReportResult.GetRow(i).CreateCell(1).SetCellValue("091234567" + i);
              sheetReportResult.GetRow(i).CreateCell(2).SetCellValue("我是備註" + i);
          }
 
          sheetReportResult.SetColumnWidth(0, 20 * 256);
          sheetReportResult.SetColumnWidth(1, 40 * 256);
          sheetReportResult.SetColumnWidth(2, 40 * 256);
 
          //儲存到sample.xls
          var file = new FileStream(AppDomain.CurrentDomain.BaseDirectory + "sample.xls", FileMode.Create);
 
          workbook.Write(file);
          file.Close();
}

範例下載:



當麻許的超技八 2014 | Donma Hsu Design.