原文:http://www.vuvps.com/?p=170
在写C#脚本的时候,有一个这样的需求:
根据一张Excle表中的邮箱字段,来生成多张表,大概样子就是下图这样(图丑了点)
NPOI版本使用的2.3版本
使用方式:
|
1
2
|
DataTable dt = new DataTable(); //准备好要插入的数据源。
ExportExcelByTemple(dt,strFileName,templetPath,20,3);
|
下面就是C#NPOI向已有的Excle模版插入数据的封装方法,调用很简单。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293/// <summary>/// 用模板导出Excel/// </summary>/// <param name="table"></param>/// <param name="strFileName">导出路径</param>/// <param name="templetPath">模板路径</param>/// <param name="startRow">从第几行开始写数据,从1开始</param>publicstaticvoidExportExcelByTemple(System.Data.DataTable dtSource,stringstrFileName,stringtempletPath,introwHeight,intstartRow){try{HSSFWorkbook workbook = getWorkBook(templetPath);HSSFSheet sheet = getSheet(workbook);writeData(workbook, sheet, dtSource, strFileName, rowHeight, startRow);saveData(workbook, strFileName);}catch(Exception ex){//LogInfo.Log(ex);throwex;}}/// <summary>/// 解析Excel模板,返回WorkBook/// </summary>/// <param name="templetPath"></param>/// <returns></returns>privatestaticHSSFWorkbook getWorkBook(stringtempletPath){FileStream file =newFileStream(templetPath,FileMode.Open, FileAccess.Read);HSSFWorkbook workbook =newHSSFWorkbook(file);returnworkbook;}/// <summary>/// 返回Sheet/// </summary>/// <param name="workbook"></param>/// <returns></returns>privatestaticHSSFSheet getSheet(HSSFWorkbook workbook){returnworkbook.GetSheetAt(0);}/// <summary>////// </summary>/// <param name="workbook"></param>/// <param name="sheet"></param>/// <param name="dtSource"></param>/// <param name="strFileName"></param>/// <param name="rowHeight"></param>/// <param name="startRow"></param>/// <param name="size"></param>privatestaticvoidwriteData(HSSFWorkbook workbook, HSSFSheet sheet,System.Data.DataTable dtSource,stringstrFileName,introwHeight,intstartRow){// //填充表头HSSFRow dataRow =newHSSFRow();//填充内容for(inti = 0; i < dtSource.Rows.Count; i++){dataRow = sheet.CreateRow(i + startRow - 1);dataRow.Height = (short)(rowHeight * 20);for(intj = 0; j < dtSource.Columns.Count; j++){stringdrValue = dtSource.Rows[i][j].ToString();dataRow.CreateCell(j).SetCellValue(drValue);}}}/// <summary>/// 保存数据/// </summary>/// <param name="workbook"></param>/// <param name="strFileName"></param>privatestaticvoidsaveData(HSSFWorkbook workbook,stringstrFileName){//保存using(MemoryStream ms =newMemoryStream()){using(FileStream fs =newFileStream(strFileName,FileMode.Create, FileAccess.Write)){workbook.Write(fs);}}}