Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用C Excel互操作计算Excel中的用户定义函数_C#_Excel_Interop_Add In - Fatal编程技术网

C# 使用C Excel互操作计算Excel中的用户定义函数

C# 使用C Excel互操作计算Excel中的用户定义函数,c#,excel,interop,add-in,C#,Excel,Interop,Add In,我正在尝试直接从C创建外接程序,以便在打开工作簿并执行工作簿时,计算外部加载项中定义的自定义项的用户定义函数,并在工作表中正确计算。目前,我正在循环每个添加和简单设置: AddIn.Installed = true 这是行不通的。C根本不加载加载项,我希望避免使用VBA。我想打开一个工作簿一个加载了特定外接程序的excel工作簿,进行完整计算,并更新工作表的所有值,包括带有自定义项的单元格 谢谢你的帮助 一些代码: Excel.Workbook wkbk = ExcelApp.ActiveWo

我正在尝试直接从C创建外接程序,以便在打开工作簿并执行工作簿时,计算外部加载项中定义的自定义项的用户定义函数,并在工作表中正确计算。目前,我正在循环每个添加和简单设置:

AddIn.Installed = true
这是行不通的。C根本不加载加载项,我希望避免使用VBA。我想打开一个工作簿一个加载了特定外接程序的excel工作簿,进行完整计算,并更新工作表的所有值,包括带有自定义项的单元格

谢谢你的帮助

一些代码:

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);
更新: 我找到了一个与我用来注册UDF的方法的链接

参考:

在Excel中,您需要转到选项->加载项=>Excel加载项go..=>automation=选择库并点击OK。一旦这样做一次,每次打开excel时都会自动加载它。

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

参考:


在Excel中,您需要转到选项->加载项=>Excel加载项go..=>automation=选择库并点击OK。一旦您这样做一次,每次打开excel时,它都会自动加载。

以下是加载excel加载项的算法,以便在打开excel工作簿时,计算将包括加载项中定义的自定义项:

1初始化Excel应用程序

ExcelApp = new Excel.Application();
2加载加载项*

**关键是在打开Excel工作簿之前加载加载项

3打开Excel工作簿,它将触发计算

4将计算模式设置为手动,以便互操作中的任何更改都不会触发长时间的重新计算

ExcelApp.Calculation = Microsoft.Office.Interop.Excel.XlCalculation.xlCalculationManual;  
5执行任何操作,并执行计算

ExcelApp.CalculateFull();
6适当处理Excel对象


希望这对有类似问题的人有所帮助。。最终成为一个简单问题的简单解决方案。请记住在打开工作簿之前加载加载项。否则,打开自定义项依赖于加载项的excel工作簿将失败。

以下是加载excel加载项的算法,以便在打开excel工作簿时,计算将包括加载项中定义的自定义项:

1初始化Excel应用程序

ExcelApp = new Excel.Application();
2加载加载项*

**关键是在打开Excel工作簿之前加载加载项

3打开Excel工作簿,它将触发计算

4将计算模式设置为手动,以便互操作中的任何更改都不会触发长时间的重新计算

ExcelApp.Calculation = Microsoft.Office.Interop.Excel.XlCalculation.xlCalculationManual;  
5执行任何操作,并执行计算

ExcelApp.CalculateFull();
6适当处理Excel对象


希望这对有类似问题的人有所帮助。。最终成为一个简单问题的简单解决方案。请记住在打开工作簿之前加载加载项。否则,打开UDF依赖于加载项的excel工作簿将失败。

我需要在调用工作簿时进行计算。从C interop计算。当我手动打开它时,它已正确加载和计算。我希望自己打开excel时的行为与通过C interop打开excel时的行为相同。啊,我明白你的意思了。我会到处乱搞,看看能不能帮上忙。很抱歉,我没有完全理解。我需要在调用工作簿时进行计算。从C interop计算。当我手动打开它时,它已正确加载和计算。我希望自己打开excel时的行为与通过C interop打开excel时的行为相同。啊,我明白你的意思了。我会到处乱搞,看看能不能帮上忙。对不起,我没有完全理解。