Excel.Interop:其中一个参数引用另一个参数时出现访问冲突异常 sheet
Excel.Interop: AccessViolation exception when one of the parameters referes to another sheet
我尝试使用 Excel.Interop 和 ExcelDNA 创建 Recordset。
我使用列表函数来获取函数向导对话框。所以我做什么:
1) 我写入该函数的 ActiveCell.FormulaR1C1 值 ("=MyFunction()")
2) 然后尝试运行函数向导
...
cell.FormulaR1C1 = formulaStr;
if (!(bool)cell.FunctionWizard()) {
...
功能对话框启动并工作正常(我可以设置所有参数)但是当我按下确定时,如果至少一个参数引用另一个参数,则会发生 AccessViolation 错误 sheet。(如果所有内容都位于一个sheet,这个方法很好用)。
按下 ok 按钮后函数求值,FunctionWizard() 方法发生异常。
有人有类似的东西吗?
------------更新------------
我制作了简单的 DNA 插件,只有 1 个按钮..但错误仍然重现:
1)功能:
[ExcelFunction("My Test Function")]
public static string MyTestFunction(string param1, string param2) {
return "It works!";
}
2) 功能区按钮代码:
public void OnButtonPressed(IRibbonControl control) {
Application exAp = (Application)ExcelDnaUtil.Application;
Range ac = exAp.ActiveCell;
ac.FormulaR1C1 = "=MyTestFunction()";
if ((bool)ac.FunctionWizard()) {
// Do something
}
}
因此,当我从另一个 sheet 设置参数并在功能向导中按确定时,会发生 AccessViolation。
找到解决办法。
我用过:
Microsoft.Office.Interop.Excel.Dialog dialog = app.Dialogs.get_Item(Microsoft.Office.Interop.Excel.XlBuiltInDialog.xlDialogFunctionWizard);
if (!(bool)dialog.Show()) {
而不是:
if (!(bool)cell.FunctionWizard()) {
现在一切正常。
我尝试使用 Excel.Interop 和 ExcelDNA 创建 Recordset。 我使用列表函数来获取函数向导对话框。所以我做什么: 1) 我写入该函数的 ActiveCell.FormulaR1C1 值 ("=MyFunction()") 2) 然后尝试运行函数向导
...
cell.FormulaR1C1 = formulaStr;
if (!(bool)cell.FunctionWizard()) {
...
功能对话框启动并工作正常(我可以设置所有参数)但是当我按下确定时,如果至少一个参数引用另一个参数,则会发生 AccessViolation 错误 sheet。(如果所有内容都位于一个sheet,这个方法很好用)。 按下 ok 按钮后函数求值,FunctionWizard() 方法发生异常。 有人有类似的东西吗?
------------更新------------
我制作了简单的 DNA 插件,只有 1 个按钮..但错误仍然重现: 1)功能:
[ExcelFunction("My Test Function")]
public static string MyTestFunction(string param1, string param2) {
return "It works!";
}
2) 功能区按钮代码:
public void OnButtonPressed(IRibbonControl control) {
Application exAp = (Application)ExcelDnaUtil.Application;
Range ac = exAp.ActiveCell;
ac.FormulaR1C1 = "=MyTestFunction()";
if ((bool)ac.FunctionWizard()) {
// Do something
}
}
因此,当我从另一个 sheet 设置参数并在功能向导中按确定时,会发生 AccessViolation。
找到解决办法。 我用过:
Microsoft.Office.Interop.Excel.Dialog dialog = app.Dialogs.get_Item(Microsoft.Office.Interop.Excel.XlBuiltInDialog.xlDialogFunctionWizard);
if (!(bool)dialog.Show()) {
而不是:
if (!(bool)cell.FunctionWizard()) {
现在一切正常。