首页 » 其他语言 » C# » C#将多个excle复制合并到一个excle当中,非NPOI库

C#将多个excle复制合并到一个excle当中,非NPOI库

 

新功能,要做Excle合并,首先想到的就是使用NPOI库来解决问题,查了查NPOI的文档API,发现NPOI HSSFWorkbook有个ISheet.copyTo(),代码运行起来,也成功的将excle都合并到了一块,附上代码片段

var fs = new FileStream("c:\\test1.xls", FileMode.Open, FileAccess.Read);
HSSFWorkbook workbook = new HSSFWorkbook(fs);
var sheet = workbook.GetSheetAt(0) as HSSFSheet;
ar fs2 = new FileStream("c:\\test2.xls", FileMode.Open, FileAccess.Read);
var workbook2 = new HSSFWorkbook();
sheet.CopyTo(workbook2, "a", true, true);
workbook2.Write(fs2);
fs2.Close();

使用Excle 2007的文件合并时,出问题了。

XSSFWorkbook的ISheet内部没有CopyTo()这个属性,也就是xlsx文件的excle不能使用这种方法来做合并处理。

没办法了,第三方库解决不了问题,只好用微软的方法,如果电脑没装Office的时候,微软的库就用不了了,不是很方便。(也有可能是微软耍流氓?要使用该库非得装上他家Office?),贴上代码。

Excel.Application app = new Excel.Application();
Excel._Workbook result = app.Workbooks.Add();
Excel._Workbook wb1 = app.Workbooks.Open(Path.GetFullPath("c:\\test1.xls"));
Excel._Workbook wb2 = app.Workbooks.Open(Path.GetFullPath("c:\\test2.xls"));
foreach (Excel._Worksheet each in wb1.Sheets)
{
   each.Copy(result.Worksheets[1]);
}
foreach (Excel._Worksheet each in wb2.Sheets)
{
   each.Copy(result.Worksheets[1]);
}
   wb1.Close();
   wb2.Close();
   result.SaveAs("E:\\test2.xls");
   app.Quit();

上面代码就是把C盘中的两个Excle文件,然后保存以test2命名保存。

保存的时候Excle文档,会弹出文件已存在,是否需要覆盖,这个时候肯定不想去手动点一下按钮嘛。

解决方法:保存之前,把Excle提示窗口禁用掉,保存之后,再恢复Excle提示窗口

app.DisplayAlerts = false;
....
....
....
result.SaveAs("E:\\test2.xls");
app.DisplayAlerts = true;

上面就是关于C#将多个excle复制合并到一个excle当中的代码实现了,能用NPOI库是最好的方法,毕竟有些人的电脑是没有Office办公工具的,还好我的用户群体电脑上是有这些办公工具的。假如有关于NPOI合并的方法或者有写得不对的地方,希望能提个意见。

原文链接:C#将多个excle复制合并到一个excle当中,非NPOI库,转载请注明来源!

0