C# 使用C Excel互操作计算Excel中的用户定义函数
我正在尝试直接从C创建外接程序,以便在打开工作簿并执行工作簿时,计算外部加载项中定义的自定义项的用户定义函数,并在工作表中正确计算。目前,我正在循环每个添加和简单设置: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
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时的行为相同。啊,我明白你的意思了。我会到处乱搞,看看能不能帮上忙。对不起,我没有完全理解。