Excel工作簿导入错误

时间:2014-08-07 09:10:44

标签: c# excel file-io

我正在为一些练习开发一个Jeopardy应用程序,而我无法理解为什么会出现此错误。我把它缩小到我认为的问题,但是现在,这是我的代码......

        if (questionPath != "")
        {
            Excel.Application myapp = new Excel.Application();

            Excel.Workbook wb = myapp.Workbooks.Open(questionPath);

            Excel.Worksheet sheet = (Excel.Worksheet)wb.Worksheets.get_Item(1);

            var cell = (Excel.Range)sheet.Cells[1, 1];

            MessageBox.Show(cell.Value);
        }

基本上,设置一个新的Excel,拉入工作簿,获取第一张工作表,然后查看我告诉它查看的任何单元格并显示该值(就像我说的那样,只是测试/玩游戏)。 / p>

但是,如果单元格A1中的值是一个整数,我得到一个“未处理的RuntimeBinderException”错误。它说

"An unhandled exception of type 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' occurred in System.Core.dll

Additional information: The best overloaded method match for 'System.Windows.Forms.MessageBox.Show(string)' has some invalid arguments"

但是如果值是STRING,那么它可以正常工作。我尝试过使用Cell.ToString(),这显然只是将单元格作为COM。我已经尝试过使用不存在的Cell.Value.ToString ....看看intellisense它说实际上正在读取值(我用'11'作为值)。

另外,我注意到如果我在下面运行我的代码,然后尝试打开Excel进行编辑,它会告诉我Excel被锁定以供我自己编辑。我猜我需要关闭连接字符串,但我无法弄清楚在哪里这样做。

我会关闭myapp,wb还是表格?我尝试了各种 _ .Close()和其他我认为似乎很明显的东西,但是nada。关于这一点的任何提示?

谢谢大家!

2 个答案:

答案 0 :(得分:1)

所以我发现它正在这样做的原因......它正在拉入一个整数。咄。我想你不能使用Cell.Value.ToString();在MessageBox.Show事件中,所以这就是我最终需要做的事情,并且它工作得很好。

    if (questionPath != "")
    {
        Excel.Application myapp = new Excel.Application();
        Excel.Workbook wb = myapp.Workbooks.Open(questionPath);
        Excel.Worksheet sheet = (Excel.Worksheet)wb.Worksheets.get_Item(1);
        var cell = (Excel.Range)sheet.Cells[1, 1];
        var temp = cell.Value.ToString();
        MessageBox.Show(temp);
    }

感谢您的帮助!我似乎没有得到任何问题,Excel被锁定为只读,但我也没有改变任何事情......假设这是用户错误

答案 1 :(得分:1)

6年后,对于其他阅读本书的人……

如果有ToSting()数据的可能性,我建议不要使用null

Convert.ToString()处理null,而ToString()处理null。

在上述情况下,这是

var temp = cell.Value.ToString();

这样会更安全:

var temp = Convert.ToString(cell.Value);

那样,它可以处理任何null数据,而不像ToString()