我正在使用.NET中的Excel Interop,我遇到了“Excel._WorkSheet.Copy(Type.Missing,Type.Missing)”的COMException。
行为非常奇怪:我正在从基于.xls的模板复制工作表并生成带有指定工作表的新工作簿(可能由用户从GUI中选择)。一旦遇到Excel._Worksheet WorkSheet.Copy(Type.Missing,Type.Missing),它就会抛出COMException。
“发生'System.Runtime.InteropServices.COMException'类型的第一次机会异常。
附加信息:来自HRESULT的异常:0x800A03EC“
在尝试不同的方法后,我将手动指定的工作表复制到另一个新创建的Excel实例,并将此工作簿作为相同代码的源。它在这里工作得很好!它通过打开一个新的excel实例创建了一个精确的副本,我完全没有例外。
我不知道为什么会出现这种情况?它是否与该工作表中的内容相关,如果是这样,同一个和确切的工作表将被复制到另一个新创建的空白工作表中,一切正常。
我必须为用户提供的指定工作表生成报告,所以我必须打开模板化工作簿,我需要复制那些指定的工作表,之后这些工作表将用指定的数据填充。
我使用以下代码:
Excel._Worksheet WorkSheet = null;
Excel.Application excel = new Excel.Application();
excel.Visible = true;
excel.DisplayAlerts = false;
_ExcelWorkbook = excel.Workbooks.Open(a_WorkbookName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,true);
WorkSheet = (Excel.Worksheet)_ExcelWorkbook.Sheets[1];
WorkSheet.Copy(Type.Missing, Type.Missing); // throws COM Exception of 0x800A03EC.
此致 乌斯曼
答案 0 :(得分:2)
我相信你需要申报一个来源,然后是一个目的地。看起来你只是声明了一个来源。
Excel.Worksheet wksh1 = ((Excel.Worksheet)Application.ActiveWorkbook.Worksheets[1]);
Excel.Worksheet wksh2 = ((Excel.Worksheet)Application.ActiveWorkbook.Worksheets[2]);
wksh1.Copy(wksh2);
修改强>
Application.ActiveWorkbook
只是可以在此代码模式中使用的工作簿对象的示例。它本质上是一个'这个' Excel的指针,因为它是焦点的工作簿,但是这个工作簿'引用当前运行VBA代码的工作簿,以便ActiveWorkbook'是语法。有关工作簿界面的更多信息,请See spec here和here。
要定位其他工作簿,您可以声明所需的特定工作簿。
Excel.Application excel = new Excel.Application();
excel.xlWorkbook = excel.Workbooks.Add(1);
Workbook newWorkbook = excel.Workbooks[1];
Workbook oldWorkbook = excel.Workbooks.Open(fileLocation);
Excel.Worksheet newWorksheet = ((Excel.Worksheet)newWorkbook.Worksheets[1]);
Excel.Worksheet oldWorksheet = ((Excel.Worksheet)oldWorkbook.Worksheets[1]);
oldWorksheet.Copy(newWorksheet);