我正在为一些练习开发一个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。关于这一点的任何提示?
谢谢大家!
答案 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()
。