我正在加载 Excel 文件,如网络上许多地方所示。
OpenFileDialog chooseFile = new OpenFileDialog();
chooseFile.Filter = "Excel files (*.xls,*.xlsl)|*.xls;*.xlsx";
if (chooseFile.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
selectedFileName = chooseFile.FileName;
textBox1.Text = selectedFileName;
Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
Workbook wb = excel.Workbooks.Open(selectedFileName);
Sheets excelSheets = wb.Worksheets;
string currentSheet = "Sheet 1";
excelWorksheet = (Worksheet)excelSheets.get_Item(currentSheet);
Range usedRange = excelWorksheet.UsedRange;
Range lastCell = usedRange.SpecialCells(XlCellType.xlCellTypeLastCell, Type.Missing);
lastRow = lastCell.Row;
lastColumn = lastCell.Column;
//release com object you won't need.
Marshal.ReleaseComObject(excel);
Marshal.ReleaseComObject(wb);
}
当我尝试使用此函数从单元格中获取单个值时,麻烦就来了:
private string getCellValue(Worksheet Sheet, int Row, int Column)
{
var cellValue = (string)(Sheet.Cells[Row, Column] as Range).Value;
return cellValue;
}
这段代码适用于许多单元格,但突然卡在一个单元格上,引发此异常:
无法将类型“double”转换为“string”
这很奇怪,因为它与所有其他单元格完美配合,并将所有内容转换为字符串。似乎甚至不会给空白单元带来任何麻烦。我还将 Excel 文件中的每个单元格指定为“文本”,但实际上对这种行为一无所知。
也尝试了这种方式的显式转换。
private string getCellValue(Worksheet Sheet, int Row, int Column)
{
string cellValue = Sheet.Cells[Row, Column].Value.ToString();
return cellValue;
}
现在引发的异常是:
无法对空引用执行运行时绑定