0

我是一个新的 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();
        }
4

0 回答 0