根据指定的模板来导出Excel内容.
第一步
先要引用NPOI ,右键项目名称管理nuget程序包,从这里加就行,不用从网上下载,当初搞了半天一直报错,这个东西很好用
第二步
我是先把需要统计的存到List里了.bool ReportExcelForTemplate(List<StudentEntity> selist, string filepath, string template)
其中filepath是想到导出的路径template是模板的路径
标题 具体方法,其中很多没用的代码,技术水平有限基本上都是拷贝的
try
{
Stream fs = new FileStream(template, FileMode.Open, FileAccess.Read);
NPOI.XSSF.UserModel.XSSFWorkbook book = new NPOI.XSSF.UserModel.XSSFWorkbook(fs);
//默认只取第一个sheet
NPOI.SS.UserModel.ISheet sheet = book.GetSheetAt(0);
//最后一行
int LastRowNum = sheet.LastRowNum;
//最后一行 行对象
IRow LastRow = sheet.GetRow(LastRowNum);
//行对象
NPOI.SS.UserModel.IRow row = null;
ICellStyle cellsytle = book.CreateCellStyle();
//导出数据的总行数
NPOI.SS.UserModel.ICell cell1 = null;
for (int i = 0; i < selist.Count; i++)
{
row = sheet.CreateRow(i + LastRowNum);
if (i == 0)
{
cell1 = row.CreateCell(0);
}
cell1 = (XSSFCell)sheet.GetRow(1).GetCell(1);
cell1.SetCellValue(SysStruct.SysPar.JCZName);
列对象
//NPOI.SS.UserModel.ICell cell = row.CreateCell(j);
列数据类型
//cell.SetCellType(NPOI.SS.UserModel.CellType.STRING);
列对应样式
//cell.CellStyle = GetHeadStyle(book, false);
//导出数据 行对应的列数
for (int j = 0; j < LastRow.Cells.Count; j++)
{
//列对象
NPOI.SS.UserModel.ICell cell = row.CreateCell(j);
//报表上的名字第一行用#报表自己输入的内容#
string strCellValue = LastRow.Cells[j].StringCellValue.Replace("#", "");
string strSetCellValue = "" + i + 1;//初始化为序号
if (strCellValue != "{i}")
{
//若当前列不是序号列对应填充
if (strCellValue == "报表自己输入的内容1")
{
strSetCellValue = selist[i].内容1;
}
else if (strCellValue == "报表自己输入的内容2")
{
strSetCellValue = selist[i].内容2;
}
else if (strCellValue == "报表自己输入的内容3")
{
strSetCellValue = selist[i].内容3;
}
else if (strCellValue == "报表自己输入的内容4")
{
strSetCellValue = selist[i].内容4;
}
}
//列对应值
cell.SetCellValue(strSetCellValue);
}
}
//写入到指定位置
System.IO.MemoryStream ms = new System.IO.MemoryStream();
book.Write(ms);
book = null;
//新建一个,将刚才的报告单复制进来
using (FileStream fs1 = new FileStream(filepath, FileMode.Create, FileAccess.Write))
{
byte[] data = ms.ToArray();
fs1.Write(data, 0, data.Length);
fs1.Flush();
}
ms.Close();
ms.Dispose();
return true;
}
catch (Exception ex)
{
MessageBox.Show("错误信息:" + ex.Message);
return false;
}
return true;
小白一枚,大佬勿喷.