2011-06-01 49 views
0

我需要使用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没有效果!错误。

+0

UDF是包含在工作簿中还是加载项中?我似乎记得,当通过自动化打开Excel时,加载项不会被加载。 – 2011-06-01 17:24:12

+0

UDF位于工作簿中的模块中。 – KTLind 2011-06-03 14:41:24

+0

您是否尝试过使Excel实例可见?这是否解决了这个问题?或者尝试使用app.CalculateFullRebuild()。只是做了一个快速测试,我没有看到你的问题在这里。 – 2011-06-03 16:50:41

回答

0

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

我认为这是你在找什么:

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

Value2部件保持细胞/范围的下划线内容。如果您正在查找显示给用户的可见字符串,请使用Text属性。

相关问题