如何将多个Excel文件合并为一个

时间:2018-12-21 09:16:58

标签: c# excel office-interop excel-interop

我尝试在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。

1 个答案:

答案 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; 
}