我一直在网上寻找答案。有几十个“解决方案”,但似乎没有什么工作正常。我正在构建的应用程序(使用C#)从mdb querydef中提取数据,并创建一个包含两个工作表的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);
答案 0 :(得分:2)
根据我阅读的MSDN文档,Worksheet.Copy()只能在工作簿中使用。您的C#语法看起来是正确的。
有几种方法可以解决这个问题:
WorkBook.SaveCopyAs()
)并删除不需要的内容。Range.Select; Range.Copy; Range.Paste;
)进行复制。希望这有帮助。
答案 1 :(得分:1)
感谢您的帮助。在尝试了一些其他的东西后,我发现我唯一可以工作的是复制整个工作簿并删除不适用的工作表。我觉得这很麻烦,所以如果有人找到更好的方法,我会全力以赴。这是我最终使用的代码:
_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);