2

Excelファイルからデータを読み取るための以下のコードがあります。私が遭遇している問題は、範囲データを読み取ろうとすると、この行で「null参照でランタイムバインディングを実行できません」という例外が発生することです

if (Int32.TryParse(xlRange.Cells[1, 4].Value2.ToString(), out value)) 

私が知りたいのは、範囲内の情報に適切にアクセスする方法です。前もって感謝します

void ReadFromExcelToGrid2(String fileNameString)
        {
            try
            {
                Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
                Microsoft.Office.Interop.Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(fileNameString);
                //get list of worksheets associated with the current workbook
                Microsoft.Office.Interop.Excel.Sheets worksheets = xlWorkbook.Worksheets;
                //list the work books in a dropdownlist 
                IDictionary<int, String> sheets = new Dictionary<int, String>();
                foreach (Microsoft.Office.Interop.Excel.Worksheet displayWorksheet in xlWorkbook.Worksheets)
                {
                    sheets.Add(displayWorksheet.Index, displayWorksheet.Name);
                }
                cmbWorksheets.DataSource = new BindingSource(sheets, null);;
                cmbWorksheets.DisplayMember = "Value";
                cmbWorksheets.ValueMember = "Key";

                Microsoft.Office.Interop.Excel.Worksheet xlWorksheet = xlWorkbook.Sheets[4]; // assume it is the first sheet
                Microsoft.Office.Interop.Excel.Range xlRange = xlWorksheet.UsedRange; // get the entire used range
                int value = 0;
                if (Int32.TryParse(xlRange.Cells[1, 4].Value2.ToString(), out value)) // get the F cell from the first row
                {
                    int numberOfColumnsToRead = value * 4;
                    for (int col = 7; col < (numberOfColumnsToRead + 7); col++)
                    {
                        Console.WriteLine(xlRange.Cells[1, col].Value2.ToString()); // do whatever with value
                    }
                }
            }
            catch (Exception ex)
            {

                throw ex;
            }
            }
4

2 に答える 2

7
if (xlRange.Cells[row, 1].Text == "")
{
    xlRange.Cells[row, 1].value = "Blank";
}

上記のコードは、この問題を解決します。ただしBlank、セルにはありません。しかし、それはあなたがさらに進むことを可能にします。基本的にC#/Excelは苦手nullです。

于 2012-09-04T17:05:03.107 に答える
1

「 .ToString()」ではなく「 Convert.ToString() 」を使用するとどうなりますか? "xlRange.Cells[1, 4].Value2" が null の場合、.ToString() 関数はありません。正しく考えていれば、例外をスローする必要があります。Convert.ToString() と .ToString()の違いは、Convert.ToString() が null 値を返すのに対し、.ToString() は失敗することです。

そのコードを実行する前にブレーク ポイントを設定して、xlRange に実際に情報が含まれていることを確認できますか?

于 2012-07-21T17:38:43.557 に答える