C# 如何将多个excel文件合并为一个
我试着在谷歌上搜索这个,但可以得到我问题的答案。 我正在尝试使用下面的代码将多个excel文件合并为一个。 但它在sheet.Copy命令中给出了如下错误(innerexception中没有其他信息)C# 如何将多个excel文件合并为一个,c#,excel,office-interop,excel-interop,C#,Excel,Office Interop,Excel Interop,我试着在谷歌上搜索这个,但可以得到我问题的答案。 我正在尝试使用下面的代码将多个excel文件合并为一个。 但它在sheet.Copy命令中给出了如下错误(innerexception中没有其他信息) Unable to get the Copy property of the Worksheet class 代码 private void MergeXlsxFiles(string destXlsxFileName, params string[] sourceXlsxFileNames)
Unable to get the Copy property of the Worksheet class
代码
private void MergeXlsxFiles(string destXlsxFileName, params string[] sourceXlsxFileNames)
{
Application excelApp = null;
Workbook destWorkBook = null;
var temppathForTarget = Path.Combine(Directory.GetCurrentDirectory() , Guid.NewGuid() + ".xls");
if (File.Exists(temppathForTarget))
File.Delete(temppathForTarget);
try
{
excelApp = new Application
{
DisplayAlerts = false,
SheetsInNewWorkbook = 3
};
destWorkBook = excelApp.Workbooks.Add();
destWorkBook.SaveAs(temppathForTarget);
foreach (var sourceXlsxFile in sourceXlsxFileNames)
{
var file = Path.Combine(Directory.GetCurrentDirectory(), sourceXlsxFile);
var sourceWorkBook = excelApp.Workbooks.Open(file);
foreach (Worksheet ws in sourceWorkBook.Worksheets)
{
var wSheet = destWorkBook.Worksheets[destWorkBook.Worksheets.Count];
ws.Copy(wSheet);
destWorkBook.Worksheets[destWorkBook.Worksheets.Count].Name =
ws.Name;
}
sourceWorkBook.Close(XlSaveAction.xlDoNotSaveChanges);
}
destWorkBook.Sheets[1].Delete();
destWorkBook.SaveAs(destXlsxFileName);
}
catch (Exception ex)
{
}
finally
{
if (destWorkBook != null)
destWorkBook.Close(XlSaveAction.xlSaveChanges);
if (excelApp != null)
excelApp.Quit();
}
}
有人知道这个代码有什么问题吗
我指的是GAC版本为15.0.0.0的Microsoft.Office.Interop.Excel dll,我的机器上安装了MSOffice 2013。一般来说,当我测试问题中的代码时,它会遇到数据键入问题。Excel对数据类型“挑剔”——通常需要显式转换类型。以下
foreach
适用于我:请注意(Excel.Worksheet)
强制转换。对于这些,我在Copy
(或Name
)方法(属性)上没有遇到任何问题
我还遇到了分配工作表名称的“怪事”。问题代码中使用的逻辑不清楚,因此假设新的工作表应该添加在默认的三张空白工作表之后,我修改了ws.Copy
,将它们放在末尾
foreach (Excel.Worksheet ws in sourceWorkBook.Worksheets)
{
var wSheet = (Excel.Worksheet) destWorkBook.Worksheets[destWorkBook.Worksheets.Count];
ws.Copy(missing, wSheet);
Excel.Worksheet wNewSheet = (Excel.Worksheet)destWorkBook.Worksheets[destWorkBook.Worksheets.Count];
wNewSheet.Name = "New" + ws.Name;
}
可能是由于sourceWorkBook.Sheets中的
和/或destWorkBook.Sheets
<代码>工作表
与工作表
不同。它们可以是,但也可以是其他类型的工作表,例如图表工作表。在sourceWorkbook.Worksheets中尝试和destWorkBook.Worksheets`?我尝试使用工作表,但仍然出现相同的错误。我用这些变化更新了我的问题…这对我来说很有效。谢谢。。。还有一件事。。。。当我的excel文件扩展名为.xlsx而不是.xlsw时,我的旧代码也可以工作。当使用“interop”时-代码与excel应用程序交互-文件格式/扩展名不重要。Excel可以以相同的方式打开所有文件类型。与“互操作”相关的是Excel版本,它决定了可用的功能。如果代码直接使用开放式XML文件格式(例如,开放式XML SDK),则文件格式会有所不同。