Excel用户定义函数调用锁电子表格(Excel User Defined Function Loc

2019-10-21 22:55发布

我使用NetOffice编辑Excel电子表格。 如果我从Excel用户自定义函数调用的代码它不会让我编辑的电子表格调用。

Excel.Application excelApplication = Excel.Application.GetActiveInstance();
Excel.Worksheet workSheet = (Excel.Worksheet) excelApplication.ActiveSheet;
Excel.Range cell = workSheet.Cells[2, 2];

object value = cell.Value; //works
cell.Value = 3; //Throws Exception

有一种解决方法,使我做到这一点?

唯一的例外是

“System.Runtime.InteropServices.COMException(0X80004005):详见内部异常(S)---> System.Reflection.TargetInvocationException:。异常已被调用的目标抛出---> System.Runtime。 InteropServices.COMException:从HRESULT异常:0x800A03EC ---内部异常堆栈跟踪的末尾在System.RuntimeType.InvokeDispMethod(字符串名称,的BindingFlags invokeAttr,对象目标,对象[]指定参数时,布尔[] byrefModifiers,培养的Int32,串[] namedParameters)在System.RuntimeType.InvokeMember(字符串名称,的BindingFlags的BindingFlags,粘结剂粘结剂,对象目标,在System.Type.InvokeMember对象[] providedArgs,ParameterModifier []改性剂,CultureInfo的文化,串[] namedParams)(串名,的BindingFlags invokeAttr,粘结剂粘结剂,对象目标,对象[]在NetOffice.Invoker.PropertySet(cOMObject comObject,字符串名称指定参数时,CultureInfo的培养物),在NetOffice.Invoker.PropertySet(cOMObject comObject,字符串名对象[]值), [对象] VA 略)在NetOffice.ExcelApi.Range.set_Value(对象值)ExcelExamplesCS45.Example01.RunExample()在\ PSF \家\文档\ Visual Studio的2013 \项目\ Excel的REPL \ Excel的REPL \ Example01.cs:29行在ClojureExcel.MainClass.Test()在\ PSF \家\文档\ Visual Studio的2013 \项目\ Excel的REPL \ Excel的REPL \ MainClass.cs:行310"

Answer 1:

    Exception from HRESULT: 0x800A03EC

我就描述了这样的问题,一般的故障查找对策,也有这个错误已经有很多答案。 也许是太多了。

一个HRESULT是错误代码,可以帮助你查明错误的根本原因。 它被分成3个部分,该错误,“设施”码,错误代码的严重性。 你有你的机器上的WinError.h中SDK文件可以告诉你到底是什么在码位与信息哪一部分对应。 “设备”是一个令人讨厌词,意思是“错误源”。

该设施代码的0x0A = 10。这意味着“应用定义的错误”。 或者换句话说,错误代码是高度特异性的,以产生错误的应用程序。 错误代码是0x03EC = 1004。所以,你可以把这个成一句话:“Excel中的错误1004”。

这是东西,你可以谷歌,你会得到356000次命中。 花一些时间通读排名靠前,看看它是怎么一回事。 忽略吸血鬼网站点击率,许诺只要你通过运行注册表清洁开始修复您的机器上的任何错误的那种。 土地的外行是,这个错误是常见的,它也是在宏和VBA代码生成。 通常用一个稍微好一点的错误消息,Excel内部就可以得到错误的超出了1004错误代码的简要说明。 但是你必须离不开它,当您使用自动化功能,这使得它当然更难。

还有一个数据点,你可以从看堆栈跟踪得到的,你可以看到NetOffice做什么。 它使用后期绑定(InvokeDispMethod),所以你不能100%肯定有什么具体的互操作方法失败。 一个通告特征f NetOffice,它实际上使故障排除更加困难。 但是,一个非常显着的互操作点是“Range.set_Value”。 这是东西,你可以反向工程的高度特异性的Excel的自动化特性,Excel对象模型有一系列接口,它有一个Value属性。 据分配失败该属性。 完全匹配与你正在尝试做的,设置单元格的值。

所以,你可以提高你的谷歌查询,以“创先争优错误1004 Range.Value”。 这使得命中了很多更具体的,前4次命中都是做题,所有的吸血鬼网站点击率进行过滤。 总结为错误顶部的解释:

  • 因为它是受保护的,你不能写入到电子表格
  • 你写的值与单元格的格式不兼容,如无效日期
  • 你要更新的范围内是无效的,像一个行或列数<= 0
  • 代码由于功能在单元格中输入运行,它正试图更新另一个小区。

您可以消除第一子弹很容易地,只要确保电子表格未保护和/或使用撤消()。 同为第2点,刚刚回写你读。 该3ND子弹不可能是它,你可以读取小区就好了。 第四子弹是完全匹配与你的问题的标题,“用户定义的函数”。 换句话说,问题是

   Excel.Range cell = workSheet.Cells[2, 2];

这个问题,这是不包含用户定义函数的单元格。 所以分配是非法的。 我不能提出一个解决办法不知道有什么特别之处[2,2]。 尝试将其更改为实际包含UDF的单元格。

什么是UDF是应该做的是返回一个值,就成为显示单元格的值。 这KB文章记录了UDF的限制。 这太问题有谈论实现在.NET代码UDF的答案,它提到Excel的DNA。



Answer 2:

有一个很简单的解决方法:只需在一个单独的线程编辑工作表。 为什么我没有想到的它开始!! ???



文章来源: Excel User Defined Function Locks Invoking Spreadsheet