c#IWorkbook导入excel信息
IWorkbook定义
IWorkbook的大意是指Excel文件,用NPOI操作excel,第一步都是先获取或声明一个对应wookbook的对象。NPOI读取指定路径下的excel
xls文件对应的类是:HSSFWorkBook
xlsx文件对应的类是:XSSFWorkBook 这两个类都继承接口:IWorkBook。
在进行操作excel文件时,需要声明出以下四种方可进行操作:
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using NPOI.SS.Util;
IWorkbook的具体使用
IWorkbook workbook;//
string fileExt = Path.GetExtension(excelPath).ToLower();//
if (fileExt == ".xlsx")
{
workbook = new XSSFWorkbook();//代表Xlsx文件
}
else if (fileExt == ".xls")
{
workbook = new HSSFWorkbook();//代表xls文件
}
else {
workbook = null;
}
if(workbook == null)
{
return;
}
ISheet sheet = workbook.CreateSheet("Sheet1");//写入sheet页,至少有一页
int iColSum = vSrcLineList.Count() - 1;//垂直直线列表个数
int iRowSum = hSrcLineList.Count() - 1;//水平直线列表个数
for(int i = 0;i<iRowSum;i++)
{
IRow row = sheet.CreateRow(i);//代表含义
for(int j = 0;j<iColSum;j++)
{
ICell cell = row.CreateCell(j);
cell.SetCellValue("");
}
}
//模板带入完善
foreach (KeyValuePair<int, CombinTable> OneCombin in fact_CombinDic)//循环文本字典集
{
if (OneCombin.Value.iStartRow >= iRowSum || OneCombin.Value.iStartCol >= iColSum)
{
continue;//iStartRow代表开始的行号 如果开始的行号大于定义的水平直线数,或者开始列号大于垂直直线数则返回
}
ICell cell = sheet.GetRow(OneCombin.Value.iStartRow).GetCell(OneCombin.Value.iStartCol);//创建单元格,此时行列为OneCombin.Value.iStartRow和OneCombin.Value.iStartCol)
if (textDstDic.ContainsKey(OneCombin.Key))//判断key值是否存在,如果存在则
{
cell.SetCellValue(textDstDic[OneCombin.Key].m_Text.Trim()); //导出的时候,在前面加上一个单引号就行了,这就是文本格式的了。
}
CellRangeAddress region = new CellRangeAddress(OneCombin.Value.iStartRow, OneCombin.Value.iEndRow, OneCombin.Value.iStartCol, OneCombin.Value.iEndCol);
sheet.AddMergedRegion(region);
}
//转为字节数组
MemoryStream stream = new MemoryStream();
workbook.Write(stream);
var buf = stream.ToArray();
//保存为Excel文件
using (FileStream fs = new FileStream(excelPath, FileMode.Create, FileAccess.Write))
{
fs.Write(buf, 0, buf.Length);
fs.Flush();
}
其中(1) ICell代表设置单元格
ICell cell=sheet.GetRow(OneCombin.Value.iStartRow).GetCell(OneCombin.Value.iStartCol);
(2)CellRangeAddress代表单元格合并
CellRangeAddress(int firstrow ,int lastrow,int firstcol,int lastcol)
四个参数代表起始行号,终止行号,起始列号,终止列号
(3) sheet.AddMergedRegion(region);代表将region单元格添加进去
(4)sheet.createRow(i)—创建Excel中一行
(5)sheet.getRow(i)的区别 --读取Excel中一行