使用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工作簿将失败。