【问题标题】:#value! error in cells containing user defined functions#价值!包含用户定义函数的单元格中的错误
【发布时间】:2011-06-30 19:47:08
【问题描述】:

我需要以只读方式使用 C# 打开 Excel 工作簿。那里没有问题。但是,如果该工作簿是在启用自动过滤器的情况下保存的,我需要使用 c# 将其关闭,以便我可以将工作表值读入我的班级。问题是,如果一个单元格中有用户定义的函数,该单元格将显示#VALUE!关闭自动过滤器而不是正确值时出现错误。如果我仅使用 Excel 手动关闭自动过滤器,这不是问题。所以我知道用户定义的函数本身没有问题。

这是我正在做的事情:

   Excel.Application app = new Excel.Application();
   Excel.Workbook CIRworkbook;
   var missing = Missing.Value;

   bool openAsReadOnly = true;
   CIRworkbook = (Excel.Workbook)(app.Workbooks.Open(xlsFile, missing, openAsReadOnly, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing));

   app.get_Range("A:IV", missing).Worksheet.AutoFilterMode = false;
   app.CalculateFull();

app.CalculateFull() 行对删除 #VALUE 没有影响!错误。

【问题讨论】:

  • UDF 是否包含在工作簿或加载项中?我似乎记得通过自动化打开 Excel 时加载项没有加载。
  • UDF 在工作簿的一个模块中。
  • 您是否尝试过使 Excel 实例可见?这能解决问题吗?或者尝试 app.CalculateFullRebuild() 代替。刚刚做了一个快速测试,我没有在这里看到你的问题。

标签: c# excel


【解决方案1】:

尝试使用以下语法来获取工作表中包含值的所有单元格,而不管自动过滤器的开/关或使用的实际过滤器。

我想这就是你要找的东西:

Worksheet currSheet = excelApp.ActiveWorkbook.ActiveSheet;
object[,] objData = (object[,])currSheet.UsedRange.Value2;

Value2 成员保存单元格/范围的下划线内容。如果您正在寻找向用户显示的可见字符串,请使用Text 属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2014-03-29
    • 1970-01-01
    相关资源
    最近更新 更多