【问题标题】:Can't read Excel cell value in Visual C#无法在 Visual C# 中读取 Excel 单元格值
【发布时间】:2018-05-02 08:15:38
【问题描述】:

我阅读了How to read single Excel cell value 并亲自尝试过。但是当我到达

string s = (myExcelWorkSheet.Cells[3, "E"] as Excel.Range).Value2.ToString();

一切都结束了,表格显示出来了。

//Everything worked fine here.
string s = (myExcelWorkSheet.Cells[3, "E"] as Excel.Range).Value2.ToString();
//Everything after this was all skipped!

为什么会这样,我该如何解决?

【问题讨论】:

  • string s = myExcelWorkSheet.Cells[3, "E"].Value2?
  • 我确实尝试将 Value2 作为 var 首先并将其转换为字符串。但是一旦程序命中它(在转换为字符串之前),整个事情就停止了,并且显示了表单!!!
  • Value2 作为var?我错过了一些东西。你可以试试string s = myExcelWorkSheet.Cells[3, "E"].Value2吗?

标签: c# excel interop cell


【解决方案1】:

读取excel单元格的问题是如果里面什么都没有,单元格对象就是Null。因此,它既没有.Value2,也没有.Value

要找到避免检查Null 的方法,您可以使用Convert.ToString(),它将Null 评估为空字符串,因此不会返回错误:

for (int i = 1; i < 5; i++)
{
    string a = Convert.ToString(wk.Cells[i, 1].Value2);
    Console.WriteLine(a);
}

【讨论】:

  • 如果您在空单元格上使用Convert.ToString() 运行代码,您将获得null。在打印“a”之前,您仍然需要检查null
  • @CodeCatia - 你试过了吗,因为我很确定我在 3 年前就试过了,而且效果和我描述的一样。
  • 不知道说什么,我又检查了一遍,你是对的,它就像你描述的那样工作。还尝试了string a = wk.Cells[1, 1].Value2;,它在空单元格上打印空字符串...
  • @CodeCatia - np,在 StackOverflow 中公开承认你错了是一种成就,可能是这里不太常见的一种:)
【解决方案2】:

当单元格有值时,需要ToString()

当单元格没有有值时,你不需要需要ToString()!

否则整个程序将跳过,之后的所有内容都从不执行!!!

所以我想这只是系统是否试图将 null 值转换为字符串的问题!!!

【讨论】:

  • 是的,这是真的。为了使其非冗余,从而避免检查IsNull,请参阅我更新的答案。
猜你喜欢
  • 1970-01-01
  • 2015-04-08
  • 2020-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-12
  • 1970-01-01
相关资源
最近更新 更多