Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从Excel文件读取-值为空的单元格_C#_Excel_Excel Interop - Fatal编程技术网

C# 从Excel文件读取-值为空的单元格

C# 从Excel文件读取-值为空的单元格,c#,excel,excel-interop,C#,Excel,Excel Interop,我已经编写了一些代码,可以读取excel文件中的每一行(两个特定列),稍后我将使用这些代码为每一行执行一个update SQL查询,其中包含一个值 我已经在一个列表框中显示了这些值,与excel文件中的股票代码相比,我得到的空值要多得多 我曾尝试更改excel文件的格式,但这并没有产生任何影响。在某些行中,该位置肯定有库存代码,但当程序进行单元格比较时,程序会在实际有值时将其标识为空 有人知道我的代码有什么问题吗 private void btnStockCodes_Click(object s

我已经编写了一些代码,可以读取excel文件中的每一行(两个特定列),稍后我将使用这些代码为每一行执行一个update SQL查询,其中包含一个值

我已经在一个列表框中显示了这些值,与excel文件中的股票代码相比,我得到的空值要多得多

我曾尝试更改excel文件的格式,但这并没有产生任何影响。在某些行中,该位置肯定有库存代码,但当程序进行单元格比较时,程序会在实际有值时将其标识为空

有人知道我的代码有什么问题吗

private void btnStockCodes_Click(object sender, RoutedEventArgs e)
{
    string file = @"\\amn-fs-01\users$\Shanel\Desktop\Stock Codes.xlsx";
    Microsoft.Office.Interop.Excel.Application ExcelApp = new Microsoft.Office.Interop.Excel.Application();
    Workbook ExcelWorkbook = ExcelApp.Workbooks.Open(file);
    Worksheet ews = ExcelApp.ActiveWorkbook.Sheets[1];
    Microsoft.Office.Interop.Excel.Range usedRange = ews.UsedRange;

    int TotalCounter = 0;
    string StockCode = "";
    string ReserveID = "";
    int nullcounter = 0;
    int foundcounter = 0;

    foreach (Microsoft.Office.Interop.Excel.Range row in usedRange.Rows)
    {
        StockCode = "";
        ReserveID = "";
        TotalCounter = TotalCounter + 1;

        if (row.Cells[TotalCounter,7].Value == null)
        {
            Listbox1.Items.Add(TotalCounter + " null");
            nullcounter = nullcounter + 1;
        }
        else
        {
            StockCode = row.Cells[TotalCounter,7].Value.ToString();
            ReserveID = row.Cells[TotalCounter, 3].Value.ToString();
            Listbox1.Items.Add(TotalCounter + " " + StockCode + " " + ReserveID);
            foundcounter = foundcounter + 1;
        }
    }

    txtTotal1.Text = foundcounter.ToString() + " Found";
    txtTotal2.Text = nullcounter.ToString() + " Null Values";
    txtTotal3.Text = TotalCounter.ToString() + " Total Records";
}

我不相信sheet.UsedRange总是正确工作的,有时它包含的单元格比它应该包含的多,或者少。我的建议是,当您有任何值时,读取工作表中的所有行。一旦没有更多的值,就停止读取它。
如果行太多,您可以同时将所有值读入数组,就像并使用数组一样。

我不相信该工作表。UsedRange总是正确工作,有时它包含的单元格比它应该包含的多或少。我的建议是,当您有任何值时,读取工作表中的所有行。一旦没有更多的值,就停止读取它。
如果行太多,可以同时将所有值读入数组,就像并使用数组一样。

感谢您的贡献,我已经解决了错误

它出现在行.Cells[TotalCounter,7].Value.ToString()中

它应该是row.Cells[7].Value.ToString()


我不需要指定Foreach循环中处理的行索引。我将研究以工作表的形式编写代码的其他方法。UsedRange可能不会像Alex建议的那样在所有情况下都有效

感谢您的贡献,我已经解决了错误

它出现在行.Cells[TotalCounter,7].Value.ToString()中

它应该是row.Cells[7].Value.ToString()


我不需要指定Foreach循环中处理的行索引。我将研究以工作表的形式编写代码的其他方法。UsedRange可能不会像Alex建议的那样在所有情况下都有效

请上传一个示例文件供我们测试代码。请随意将其缩减为显示问题的几行数据。感谢您的建议!我已经添加了一个dropbox链接到描述中的excel文件示例。请上传一个示例文件,供我们测试代码。请随意将其缩减为显示问题的几行数据。感谢您的建议!我在描述中添加了一个到excel文件示例的dropbox链接。您保存了我的一天!你救了我一天!