如何将Excel工作表从一个工作簿复制到另一个工作簿

本文关键字:工作簿 一个 复制 另一个 Excel 工作 | 更新日期: 2023-09-27 17:50:38

我一直在网上搜索这个问题的答案。有几十种"解决方案",但似乎没有一种是正确的。我正在构建的应用程序(使用c#)从mdb查询def中提取数据,并创建一个带有两个工作表的Excel工作簿。这部分工作得很好。现在对于应该是简单的部分:我有一个工作簿与多个工作表(每个工作表将计算不同的数据)我需要的代码打开"模板"工作簿,复制正确的工作表,并将副本在新创建的工作簿与其他两个工作表。下面是我觉得"应该"可以工作的代码示例:

            _Application xlApp;
        Workbook xlTemplateWB;
        Workbook xlTempWB;
        object missing = System.Reflection.Missing.Value;
        xlApp = new ApplicationClass();
        xlApp.Visible = true;
        //Open Bench Sheet Template
        xlTemplateWB = xlApp.Workbooks.Open(Elmnt.getDBPath() + TEMPLATENAME, 0, true, 5, "", "",
            false, XlPlatform.xlWindows, "", true, false, 0, true, false, false);
        //Open temporary workbook
        xlTempWB = xlApp.Workbooks.Open(XLTempDir + XLTempName, 0, false, 5, true, "", true, 
            XlPlatform.xlWindows, "'t", false, false, 0, true, 1, 0);
        //Copy "BOD" Worksheet
        xlTempWB.Worksheets.Copy(xlTemplateWB.Worksheets["BOD"]);
        xlTempWB.Save();
        //Close Workbooks
        xlTempWB.Close(true, missing, missing);
        xlTemplateWB.Close(true, missing, missing);
        xlApp.Quit();
        //Release Objects
        releaseObject(xlTempWB);
        releaseObject(xlTemplateWB);
        releaseObject(xlApp);

如何将Excel工作表从一个工作簿复制到另一个工作簿

根据我对MSDN文档的阅读,Worksheet.Copy()只能在工作簿中工作。你的c#语法看起来很正确。

有两种方法可以实现:

  1. 复制整个模板工作簿(使用WorkBook.SaveCopyAs())并删除不需要的部分。
  2. 选择你想移动的范围,并使用剪贴板(Range.Select; Range.Copy; Range.Paste;)复制它。

谢谢你的帮助。在尝试了更多的东西之后,我发现我唯一能做的就是复制整个工作簿并删除不适用的工作表。我觉得这很麻烦,所以如果有人找到更好的方法,我洗耳恭听。下面是我最终使用的代码:

            _Application xlApp;
        Workbook xlTemplateWB;
        Workbook xlTempWB;
        object missing = System.Reflection.Missing.Value;
        xlApp = new ApplicationClass();
        xlApp.Visible = true;
        //Open Bench Sheet Template
        xlTemplateWB = xlApp.Workbooks.Open(Elmnt.getDBPath() + TEMPLATENAME, 0, true, 5, "", "",
            false, XlPlatform.xlWindows, "", true, false, 0, true, false, false);
        //Save As a temporary workbook
        xlTemplateWB.SaveAs(XLTempDir + XLTempName);
        xlTemplateWB.Close(true, missing, missing);
        releaseObject(xlTemplateWB);
        //Open temporary workbook
        xlTempWB = xlApp.Workbooks.Open(XLTempDir + XLTempName, 0, false, 5, true, "", true,
            XlPlatform.xlWindows, "'t", false, false, 0, true, 1, 0);
        //Remove non-applicable worksheets
        for (int i = xlTempWB.Sheets.Count; i > 0; i--)
        {
            if (((Worksheet)xlTempWB.Sheets[i]).Name != bchSheet)
            {
                xlApp.DisplayAlerts = false;
                ((Worksheet)xlTempWB.Sheets[i]).Delete();
                xlApp.DisplayAlerts = true;
            }
        }
        xlTempWB.Save();
        //Close Workbooks
        xlTempWB.Close(true, missing, missing);
        xlApp.Quit();
        //Release Objects
        releaseObject(xlTempWB);
        releaseObject(xlApp);