推荐两个很好用的开源程序分别处理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("提示:创建成功!");
}
}
注: 其他操作请参照教程吧。另外看到有帖子说NOPI对Excel2007的处理只要从HSSFWorkbook改为Workbook就可以了,简单测试了NOPI2.1.1对Excel2007的处理,是可以读写,不过打开后格式会有错误,大概哪里没有处理好吧......不过弄来弄去就弄麻烦了......所以就那样先搁着吧
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再引用即可。