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

how to merge multiple excel files into one

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

一般来说,当我测试问题中的代码时,它会遇到数据类型问题。 Excel 是关于数据类型的 "picky" - 通常需要显式转换类型。以下 foreach 对我有用:注意 (Excel.Worksheet) 转换。对于那些我 运行 使用 Copy(或 Name)方法没有问题(属性)。

我也 运行 进入 "oddities" 分配 sheet 名称。题中代码使用的逻辑不清楚,所以假设新的sheets应该在默认的三个空sheets之后添加,我修改了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; 
}