【问题标题】:Excel Returns Null After Line 144 using C# Microsoft Interop ExcelExcel 使用 C# Microsoft Interop Excel 在第 144 行后返回 Null
【发布时间】:2016-09-27 14:25:31
【问题描述】:

在 C# 中,我打开了一个 Excel 电子表格,并且正在对其进行迭代。每当我到达第 144 行时,电子表格值对其后面的每一行都返回 null。查看电子表格,第 144 - 250 行显然不为空。我尝试将其保存为不同的版本,但没有奏效。我试过复制并粘贴到一个全新的工作表中。没有任何效果。这是我的代码:

        // initiate Excel
        Excel.Application xlApp;
        Excel.Workbook xlWorkBook;
        Excel.Worksheet xlWorkSheet;
        object misValue = System.Reflection.Missing.Value;

        xlApp = new Excel.Application();
        xlWorkBook = xlApp.Workbooks.Open(lblFileName.Text, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
        xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

        //Get the used Range
        Excel.Range usedRange = xlWorkSheet.UsedRange;

        //Iterate the rows in the used range
        string customerNumber;
        string amount;
        int i = 0;
        decimal dAmount = 0;

        bool runProcess = true;
        bool hasHeader = false;
        string cellValue;
        foreach (Excel.Range row in usedRange.Rows)
        {
            i++; 
            // Column 1 is customer number
            // THE FOLLOWING LINE RETURNS NULL STARTING AT ROW 144
            cellValue = row.Cells[i, 1].Value2 == null ? "" : row.Cells[i, 1].Value2.ToString();
            if (!(cellValue.Length >= 5 && cellValue.Length <= 20))
            {
                    MessageBox.Show(cellValue + " Must be between 5 and 20 Characters - File Will Not Be Processed Row#" + i.ToString());
                    runProcess = false;
            }

        }
        // run process
        // release EXCEL

我确实尝试了 row.Cells[i, 1].Value2, row.Cells[i, 1].Value 和 row.Cells[i, 1].Text 并得到了相同的结果。我包括“使用 Excel = Microsoft.Office.Interop.Excel;”

Excel 中的示例数据

 4492605768531895  15.95
 4492605768536544  19.95
 4492605768565459  11.95
 4492605739542347  14.95
 4492605768635795  25.95

【问题讨论】:

  • 您的样本数据是来自错误行还是只是电子表格中的通用数据?
  • 它来自错误的行。我已将好行中的数据复制到错误行中,但错误仍然存​​在。
  • 您的电子表格中的所有值是否都以44 开头,或者当它们以44 开头时您遇到了错误?只是想缩小范围:-)
  • 要跟进@Mis 的回答,您的所有值是否都超过了 15 位的精度?
  • 忘记这个问题,错过了你的评论。

标签: c# excel excel-interop


【解决方案1】:

我认为这与 Range 对象的大小有关。我尝试将 foreach 替换为此并且它有效(对我来说,null 发生在第 102 行)

int maxRows = usedRange.Rows.Count;
for (int i=1;i<=maxRows;i++)
{
    // Column 1 is customer number
   // THE FOLLOWING LINE RETURNS NULL STARTING AT ROW 144
   cellValue = xlWorkSheet.Cells[i, 1].Value2 == null ? "" : xlWorkSheet.Cells[i, 1].Value2.ToString();

    if (!(cellValue.Length >= 5 && cellValue.Length <= 20))
    {
        MessageBox.Show(cellValue + " Must be between 5 and 20 Characters - File Will Not Be Processed Row#" + i.ToString());
        runProcess = false;
    }

}

【讨论】:

  • 非常感谢。我会试一试,让你知道结果如何。
猜你喜欢
  • 2021-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 2021-10-10
  • 2013-08-12
相关资源
最近更新 更多