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