使用C#Excel Interop在Excel中计算用户定义的函数

时间:2011-12-07 21:28:04

标签: c# excel interop add-in

我正在尝试直接从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);

2 个答案:

答案 0 :(得分:0)

更新: 我找到了一个用于注册UDF的方法的链接。

参考:http://msdn.microsoft.com/en-us/library/ms173189(v=vs.80).aspx

在Excel中,您需要转到选项 - >加载项=> Excel加载项(Go ..)=> automation =选择库并点击OK。一旦执行此操作,每次打开Excel时都会自动加载。

答案 1 :(得分:0)

以下是加载excel AddIns的算法,以便在打开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对象

希望这可以帮助有类似问题的人。结束对简单问题的简单修复。只需记住在打开工作簿之前加载加载项。否则,打开依赖于AddIn的UDF的excel工作簿将失败。