使用C#Excel Interop在Excel中计算用户定义的函数
我试图直接从C#的外接程序,以便当我打开一个工作簿,并做一个Workbook.Calculate()UDF的(用户定义函数)在外部插件定义正确计算在工作表中。 目前,我正在循环每个添加和简单的设置:
AddIn.Installed = true
这不起作用。 C#根本不加载插件,我想避免使用VBA。 我想打开一个工作簿,加载一个特定的加载的Excel工作簿,做一个完整的计算,并应该有工作表的所有值更新,包括与UDF的单元格。
谢谢你的帮助….
一些代码:
Excel.Workbook wkbk = ExcelApp.ActiveWorkbook; Excel.XlFixedFormatType paramExportFormat = Excel.XlFixedFormatType.xlTypePDF; Excel.XlFixedFormatQuality paramExportQuality = Excel.XlFixedFormatQuality.xlQualityStandard; bool paramOpenAfterPublish = false; bool paramIncludeDocProps = true; bool paramIgnorePrintAreas = true; object paramFromPage = Type.Missing; object paramToPage = Type.Missing; ExcelApp.Visible = true; //foreach (Excel.AddIn aiTemp in ExcelApp.AddIns) //{ // if (aiTemp.Name.Contains("")) // { // aiTemp.Installed = false; // aiTemp.Installed = true; // } //} while (ExcelApp.CalculationState == Microsoft.Office.Interop.Excel.XlCalculationState.xlCalculating) { Thread.Sleep(50); } ExcelApp.CalculateFull(); var wksht = wkbk.ActiveSheet; Excel.Range rng = ((Excel.Worksheet)wksht).get_Range("B1", "B1"); rng.Calculate(); //EnsureCalcFinished(); ExcelApp.Visible = false; wkbk.ExportAsFixedFormat(Microsoft.Office.Interop.Excel.XlFixedFormatType.xlTypePDF, PathToDocument.Replace(".xlsx", ".pdf"), paramExportQuality, true, false, Type.Missing, Type.Missing, true,Type.Missing);
更新:我find了用于注册UDF的方法的链接。
参考: http : //msdn.microsoft.com/en-us/library/ms173189( v= vs.80).aspx
在Excel中,您需要转到选项 – >加载项=> Excel加载项(Go ..)=> automation =select库并点击OK。 一旦你做了一次,它会自动加载每次打开Excel。
这里是加载excel AddIns的algorithm,这样当你打开excel工作簿时,计算将包括在加载项中定义的UDF:
1)启动Excel应用程序
ExcelApp = new Excel.Application();
2)加载AddIns *
foreach (Excel.AddIn ai in ExcelApp.AddIns) { ai.Installed = false; ai.Installed = true; ExcelApp.Wait(50); }
**关键是在打开Excel工作簿之前加载加载项。
3)打开Excel工作簿,这将触发计算
4)将计算模式设置为手动,以便Interop中的任何更改不会触发冗长的重新计算
ExcelApp.Calculation = Microsoft.Office.Interop.Excel.XlCalculation.xlCalculationManual;
5)执行任何操作,并执行计算
ExcelApp.CalculateFull();
6)适当地处理Excel对象
希望这可以帮助有类似问题的人..结束了简单的修复一个简单的问题。 只要记住在打开工作簿之前加载加载项。 否则,用UDF依赖AddIn打开Excel工作簿将失败。