【问题标题】:Excel range usage question (cell error checking)Excel范围使用问题(单元格错误检查)
【发布时间】:2011-01-23 21:53:15
【问题描述】:

每个单元格都有以下错误: “此单元格中的数字格式为文本或前面带有撇号” 要复制错误: 我必须将来自 Web 服务的结果存储为字符串数组: 示例:(3 x 3 数组)

402,568.03 美元 26.2% 30,052

107,719.59 美元 7.0% 55,176

81,370.35 美元 5.3% 54,365

让 values 是保存样本的字符串数组 (string[,] values) 设 r 为目标范围 (Excel.Range r) 如果我做: r.Value2 = 值;

我想知道如何摆脱它。任何 .net 代码都会很棒(C# 或 VB.NET)

注意: 1) 在每个单元格中循环不是一个选项,因为数组可能非常大 (100, 54) 或 (1024, 104)。我做了,没有这个错误,但是性能很差。

2) 禁用错误不是一个选项,因为我无法控制客户端设置。

3) 我注意到我使用 conver to number 上下文菜单修复了该问题,但可以通过编程方式为受影响的范围执行此操作。

【问题讨论】:

    标签: c# vb.net excel automation


    【解决方案1】:

    您可以通过编程方式忽略每个单元格的错误。这可以通过以下 vba 代码来完成:

    <tableObject>.Range("Q1:Q1000").Errors.Item(<errorNo>).Ignore = true
    

    其中&lt;tableObject&gt; 是您的数据所在的表,&lt;errorNo&gt; 是以下错误类别之一:

    1 xlEvaluateToError
    2 xlTextDate
    3 xlNumberAsText
    4 xlInconsistentFormula
    5 xlOmittedCells
    6 xlUnlockedFormulaCells
    7 xlEmptyCellReferences
    

    当然你可以循环禁用所有 7 种错误类型

    编辑:

    首先使用上面的代码和循环向您的 excel 文件添加一个子例程,然后从 vsto 调用这个子例程:

    ThisWorkbook.Application.Run("Sheet1.SayHelloVBA")
    

    这行得通吗?

    【讨论】:

    • 谢谢,但您的解决方案不适用于多单元,不幸的是我需要一个多单元解决方案,因为我的应用是 vsto 应用,任何 COM 调用都很昂贵。
    • 按照建议调用一个执行循环的子程序怎么样?
    • 在每个单元格中循环不需要这个结构,因为它工作正常,我正在寻找一个范围解决方案而不是单元解决方案
    猜你喜欢
    • 1970-01-01
    • 2016-02-29
    • 2010-10-27
    • 2015-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-14
    • 1970-01-01
    相关资源
    最近更新 更多