如何使用Aspose.单元格读取特定的列和行在excel?在c#



有一个网页在Excel中不定期生成报告,我想获取1个数据,它是一个每次生成报告都会改变的数字,这个数据在第一列,叫做Quantity,这个数字必须在一个单词"Ready"的同一行。这个词在状态栏

我一直在尝试一些方法,但我不能这样做,我不能使用Oledb,因为它是一个学校的笔记本电脑,我不能安装可重新分发引擎组件微软访问数据库。我尝试了ExcelDataReader库,但我不知道我是否做错了。他们还建议我使用Aspose.Cells.

在我的代码中,我得到一个错误,说行不存在于当前工作表。

我的代码出了什么问题,怎么才能做到这一点?

string filePath = @"C:UsersmeOneDrive - meDesktopDataMonitor System.xlsx"; 
FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read);
IExcelDataReader reader = ExcelReaderFactory.CreateReader(stream);
DataSet result = reader.AsDataSet();
DataTable table = result.Tables[0];
bool columnsFound = false;
foreach (DataRow row in table.Rows)
{
if (!columnsFound)
{
columnsFound = true;
continue;
}
string status = row["Status"].ToString();
if (status == "Ready")
{
string quantity = row["Quantity"].ToString();
label1.Text = quantity;
break;
}
}
reader.Close();
}
}
}

我不确定它是否相关,但实际上你真的很接近解决方案。你的问题是,当你从数据集创建数据表时,它不会给出"名称"。到默认情况下第一个excel行的列。这是如果我理解正确的话:

此数据位于列I,称为Quantity

我假设你在Excel中有第一行的标题。您只需要添加列名,然后读取相应的值。如果你不想换到Aspose的话。细胞,在这种情况下,问题应该更容易解决。以下是对代码的修改,将为您提供所需的数据:

foreach (DataRow row in table.Rows)
{
if (!columnsFound)
{
// set column names from the first row
for (int i = 0; i < table.Columns.Count; i++)
{
table.Columns[i].ColumnName = row[i].ToString();
}
columnsFound = true;
continue;
}
string status = row["Status"].ToString();
if (status == "Ready")
{
string quantity = row["Quantity"].ToString();
label1.Text = quantity;
break;
}
}

最新更新