我是一个新的 2 周大的 C#“程序员”,所以请原谅我的错误(但指出它们:))并且我对将 Excel 文档的第一张表导入数据网格视图的简单方法有疑问。这是我的代码 faar :
public void OpenFile(string filePath)
{
try
{
//Clear data grid view and refresh.
gridData.Rows.Clear();
gridData.Refresh();
//Components declaration/initialization.
Microsoft.Office.Interop.Excel.Application excelApp;
Microsoft.Office.Interop.Excel.Workbook workbook;
Microsoft.Office.Interop.Excel.Worksheet worksheet;
Microsoft.Office.Interop.Excel.Range range;
excelApp = new Microsoft.Office.Interop.Excel.ApplicationClass();
DataGridViewRow draftRow = new DataGridViewRow();
DataGridViewTextBoxCell draftCell;
//Opening Excel file.
workbook = excelApp.Workbooks.Open(filePath, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Sheets.get_Item(1);
//Geting range of excel file.
range = worksheet.UsedRange;
//Sheet extraction into 2-dimensional array.
object[,] valueArray = (object[,])range.get_Value(XlRangeValueDataType.xlRangeValueDefault);
//Loading values into data grid view from array without header.
for(int row = 2; row < range.Rows.Count; row++)
{
for(int column = 1; column < range.Columns.Count; column++)
{
draftCell = new DataGridViewTextBoxCell();
draftCell.Value = valueArray[row,column].ToString();
draftRow.Cells.Add(draftCell);
}
//HERE IS THE PROBLEM :(
gridData.Rows.Add(draftRow);
draftRow = new DataGridViewRow();
}
//Closing excel app.
workbook.Close(true, null, null);
excelApp.Quit();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
throw;
}
}
我的问题发生在我尝试将 DraftRow 添加到 gridData (我的 DataGridView 对象)时。我得到一个空异常“System.NullReferenceException:对象引用未设置为对象的实例。” ,但我不明白可能出了什么问题以及如何解决它。此时存在一个 DataGridView 对象。
我在事件 onClick 中有类似的代码,它不会产生任何问题。
对于此事的任何帮助,我将不胜感激。
编辑:由于我心不在焉,我完全忘记了在我的两个 for 循环中增加单元格和行的范围,最后保存了没有最后一个单元格的行,在这种情况下为空。总而言之,它应该是这样的:
//Loading values into data grid view from array without header.
for(int row = 2; row <= range.Rows.Count; row++)
{
for(int column = 1; column <= range.Columns.Count; column++)
{
draftCell = new DataGridViewTextBoxCell();
draftCell.Value = valueArray[row,column].ToString();
draftRow.Cells.Add(draftCell);
}
gridData.Rows.Add(draftRow);
draftRow = new DataGridViewRow();
}