【问题标题】:Using VB.net to get Excel Cell Value which is not the correct value?使用 VB.net 获取不正确的 Excel 单元格值?
【发布时间】:2013-09-18 11:09:20
【问题描述】:

在过去的几个小时里我一直被困在这个问题上,所以我真的可以得到一些帮助。我正在尝试从 Excel 电子表格中获取数字(整数和小数)值,并使用它在我的表单上使用图表控件创建图形,甚至在文本框中显示该值。

单元格 A11 的值为“2003”,K11 为“12.00”,但返回值为 0 和 12。我使用公式计算其余的 y 值。奇怪的是,文本工作正常。单元格 A3 的“初始”返回为“初始”,只是数字不起作用。

    xlApp = New Excel.Application
    xlWorkBook = xlApp.Workbooks.Open("C:\File.xls")    
    xlWorkBook = xlApp.Workbooks.Add("C:\File.xls")
    xlSheet = xlWorkBook.Worksheets(1)

    Dim x1 As String
    Dim y1 As String
    x1 = xlSheet.Range("A11").Value.ToString     
    y1 = xlSheet.Range("K11").Value.ToString
    MsgBox(x1)

提前致谢

【问题讨论】:

  • 这些单元格的“数字格式”是什么?您是否正在从您的应用程序中更改此属性?
  • 单元格的数字格式为x通用,y为数字
  • 这当然很奇怪。特殊格式可能存在问题,但“通用”往往效果很好(也许是为了完全确保您应该将数字格式硬编码为文本:.NumberFormat = "@")。不知道可能是什么问题,我需要测试具体情况。
  • 我意识到自己的错误...我选择了错误的 Excel 表!啊!
  • 这听起来更合乎逻辑:) 没什么大不了的,每个人都会犯错。这肯定会帮助你以后不再犯这个错误。

标签: vb.net visual-studio-2010 excel debugging vba


【解决方案1】:

尝试使用.Text 而不是.Value。它将检索显示的值而不是单元格值:

x1 = xlSheet.Range("A11").Text
y1 = xlSheet.Range("K11").Text

这甚至会忽略格式,例如,单元格中的值 7.7777 具有显示 2 个小数位的格式将显示 7.78,这就是 .Text 将检索的内容。

【讨论】:

  • 感谢SysDragon的回复。使用 .text 对其进行了改进,但当它应该为 2300 时,它仍然为 x1 返回 0。虽然 y1 返回 12.00。
  • “这将忽略格式”是不正确的。它可能会显示不同的行为,但不会忽略所有格式。例如:如果您在具有日期格式的单元格中键入一个数字 (123),您将获得带有两个选项(.Text 和 .Value)的日期(不是数字)。
  • @varocarbas 我就是这么说的。你会得到所有东西的显示值,.Text
  • ?!也许我没有正确解释这一点:如果您在具有日期格式(mm/dd/yyyy)的单元格中输入 222 而您不考虑格式,您应该得到 222。我所说的是在那种情况下.Value 和 .Text 会得到相同的结果,即对应的日期:1/1/1999(随机日期),而不是实际输入的值 (222)。因此,您的陈述“这甚至会忽略格式”是错误的。无论如何,这个答案显然没有解决这里的问题:.Value 应该在 OP 描述的条件下完美地输出所有内容。
  • @varocarbas 也许“忽略”这个词不合适。显然我的意思是说(甚至还有一个例子!)你得到了显示的值,因此完全可能是解决问题的正确方法,因为他得到了一个不同的显示值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-26
  • 2017-02-22
  • 1970-01-01
  • 2022-11-22
  • 1970-01-01
相关资源
最近更新 更多