系统无效转换异常 Double to String。

3
以下代码打开Excel电子表格,并逐个单元格进行操作。 Console.WriteLine 的调用是为了检查它是否正确运行。
xlApp = new Excel.Application();
xlWorkBook = xlApp.Workbooks.Open(@"\Extracts\Test.xlsx", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

range = xlWorkSheet.UsedRange;
rw = range.Rows.Count;
cl = range.Columns.Count;

for (rCnt = 1; rCnt <= rw; rCnt++)
{
    for (cCnt = 1; cCnt <= cl; cCnt++)
    {
        string str = (string)(range.Cells[rCnt, cCnt] as Excel.Range).Value2;
        Console.WriteLine("Row:", str.ToString());
    }
}

我收到了以下错误信息:

System.InvalidCastException '无法将类型为'System.Double'的对象强制转换为类型'System.String'

这个错误出现在以下代码行:

string str = (string)(range.Cells[rCnt, cCnt] as Excel.Range).Value2;

我知道有一个类似错误的问题,但那个解决方法在这种情况下似乎不起作用。
感谢您的帮助。

我发表这篇评论是为了帮助其他人解决类似的问题。如果你想解析每个单元格并获取每个单元格的值,可以使用以下代码:Excel.Range rng = (Excel.Range)xlWorkSheet.Cells[rCnt, cCnt]; string cellValue = rng.Value.ToString(); - davidjwest
1个回答

8
不要将双精度值作为转换目标。只需调用ToString方法即可获得此实例值的字符串表示形式。
string str = (range.Cells[rCnt, cCnt] as Excel.Range).Value2.ToString();

编辑:

对于字符串,调用ToString是不必要的,因为它已经是一个字符串。你可以简单地这样写:

Console.WriteLine("Row:", str);

谢谢,现在它可以工作了,但是值str似乎为空,所以我显然做错了什么(对C#不熟悉),有什么办法可以将每个单元格的值输出到控制台吗?表格中有数据。 - davidjwest
1
此外,使用该解决方案时,str.ToString() 部分是无用的:只需将 str 打印到控制台即可。 - benichka
1
@davidjwest 我对Excel互操作没有太多了解。但是看起来你有一系列的值。你应该搜索“从Excel范围获取所有值”。也许这篇帖子可以帮助。 - Mong Zhu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接