我正在工作一个现有的项目,它是基础做Excel类从一个工作表A复制到另一个B.在Ws A单元格中有一些公式和Addin函数。作为结果,复制代码仅用于将值复制到ws B.下面是简化的代码块:在代码中启用Excel宏?
using Excel = Microsoft.Office.Interop.Excel;
....
object missing = System.Type.Missing;
Excel.Application app = new Excel.Application();
// Creating Excel application with source workbook in memory
Excel.Workbook workbook = app.Workbooks.Open("SourceA.xls",
Excel.XlUpdateLinks.xlUpdateLinksNever,....);
...
app.Calculate() // Forcing to recalculate value in cells.
...
//create destination workbook
Excel.Workbook destWb = app.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
Excel.WorkSheet destSheet = (Excel.Worksheet)destWb.Worksheets[1];
Excel.Range destRange = (Excel.Range)destSheet.Cells[1, 1];
//rename sheet 1
destSheet.Name = "wsB Report";
//Set Source Data Range from
Excel.WorkSheet sourceWA = (Excel.Worksheet)workbook.Worksheets["wsA"];
//Get the predefined named range "DataRange" from source wsA
Excel.Range sourceRange = sourceWA.get_Range("DataRange", missing);
//copy data
sourceRange.Copy(missing);
//paste values and number formats
destRange.PasteSpecial(Excel.XlPasteType.xlPasteValuesAndNumberFormats,
Excel.XlPasteSpecialOperation.xlPasteSpecialOperationNone, missing, missing);
//paste formats
destRange.PasteSpecial(Excel.XlPasteType.xlPasteFormats,
Excel.XlPasteSpecialOperation.xlPasteSpecialOperationNone, missing, missing);
//paste column widths
destRange.PasteSpecial(Excel.XlPasteType.xlPasteColumnWidths,
Excel.XlPasteSpecialOperation.xlPasteSpecialOperationNone, missing, missing);
....
destWb.SaveAs("destB.xls", missing, ....);
我的问题是,在destB.xls的拷贝的细胞都被标记为“#NAME?”。他们应该被复制的值。我打开源Excel文件,我可以看到源范围中的数据用值更新。但是,当我运行我的代码时,这些值似乎不可用。
我想我的代码中创建的Excel应用程序可能没有启用宏。这可能是原因值不能被复制。例如,当我打开源Excel文件时,我会看到一个提示来启用或禁用宏。如果我点击启用按钮,Excel会花费一些时间来显示数据单元格中的值。
如果这是原因,是否有任何代码启用宏的方式,使单元格中的所有公式都能够更新值?
另一个原因可能是操作系统或Windows安全更新引起的。不知道是否有任何Windows安全设置可能会影响Excel宏。如果是这种情况,我应该更改Windows安全级别还是以任何方式强制在我的项目中启用宏?
顺便说一句,我的项目运行在安装了Office Excel 2003的Windows XP和Windows 2008 Server中。该项目在2008年完成。
宏使宏? :-) – Shoban 2011-01-28 05:32:07