推荐两个很好用的开源程序分别处理Excel97-2003和Excel2007两种两种格式。
1、NOPI:Excel97-2003处理利器,可以在不安装office的情况下处理excel,索引从0开始。
下载:http://npoi.codeplex.com/releases/view/38113
教程:http://tonyqus.sinaapp.com/tutorial
PS:上面提供的下载链接是1.2.5版本的,NOPI从2.0版本开始支持Excel2007,而最新的版本是2.1.1.....
下载并添加引用NPOI.dll
1.1 从模板生成Excel文件
using (var fs = File.OpenRead("Templates/KPI.xls")) { HSSFWorkbook iworkbook = new HSSFWorkbook(fs); ISheet sheetLTE = iworkbook.GetSheet("LTE"); sheetLTE.CreateRow(0).CreateCell(0).SetCellValue(1); //sheetLTE.GetRow(0).GetCell(0).SetCellValue(1);//已存在的单元格 }1.2 保存
/// <summary> 保存 /// </summary> public void Save(string path) { if (string.IsNullOrEmpty(path)) return; using (var fs = File.Create(path)) { iworkbook.Write(fs); Console.WriteLine("提示:创建成功!"); } }
2、ExcelPackage,索引从1开始。
下载:http://excelpackage.codeplex.com/
这也是个很好用的开源程序,而且对Excel2007的处理非常简单。
下载并添加引用ExcelPackage.dll
2.1 从模板生成Excel文件
FileInfo template = new FileInfo("Templates/KPI.xlsx"); FileInfo newFile = new FileInfo(@"C:/Test.xlsx"); excelPackage = new ExcelPackage(newFile, template); sheetLTE = excelPackage.Workbook.Worksheets["LTE"]; sheetLTE.Cell(nextRowIndex_LTE, 1).Value = "1"; excelPackage.Save();注:有多张Sheet表时,如果不是每张表都有修改,那么在执行 excelPackage.Save();的时候会报错“未将对象设置到引用的实例”, 解决办法点在这里,“ If the worksheet has not been accessed, calling the public accessor WorksheetXml instead of the private class variable initiallizes it correctly.”,下载源文件修改完成后重新生成DLL再引用即可。