我尝试在Google上进行搜索,但可以获取我的问题的答案。 我正在尝试使用以下代码将多个Excel文件合并为一个文件。 但这给了我sheet.Copy命令以下错误(innerexception中没有其他信息)。
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引用的Microsoft.Office.Interop.Excel dll版本为15.0.0.0,并且我的计算机上安装了MSOffice 2013。
答案 0 :(得分:1)
通常,当我测试问题中的代码时,它会遇到数据键入问题。 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;
}