论坛。
参考:https://github.com/ExcelDataReader/ExcelDataReader
C# code :
FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read);
//1. Reading from a binary Excel file ('97-2003 format; *.xls)
IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream);
//2. Reading from a OpenXml Excel file (2007 format; *.xlsx)
IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
//3. DataSet - The result of each spreadsheet will be created in the result.Tables
DataSet result = excelReader.AsDataSet();
//4. DataSet - Create column names from first row
excelReader.IsFirstRowAsColumnNames = true;
DataSet result = excelReader.AsDataSet();
//5. Data Reader methods
while (excelReader.Read())
{
//excelReader.GetInt32(0);
}
//6. Free resources (IExcelDataReader is IDisposable)
excelReader.Close();
我的代码:
private void dataGridView1_DragDrop(object sender, DragEventArgs e)
{
Debug.WriteLine("OnDragDrop");
if (validData)
{
try
{
FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read);
//1. Reading from a binary Excel file ('97-2003 format; *.xls)
IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream);
//2. DataSet - The result of each spreadsheet will be created in the result.Tables
excelReader.IsFirstRowAsColumnNames = true;
DataSet result = excelReader.AsDataSet();
//3. Data Reader methods
while (excelReader.Read())
{
//excelReader.GetInt32(0);
}
dataGridView1.DataSource = result.Tables[0];
//6. Free resources (IExcelDataReader is IDisposable)
excelReader.Close();
createEmployees(result);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
}
我的问题是,“数据读取器方法”部分的用途是什么?
我最初的想法是,它是在将数据读入DataSet之前进行转换。从单步执行代码开始,我看到DataSet结果已在步骤3/4中设置,因此没有发生数据转换或批量处理。鉴于此,我不确定excelReader.Read()代码起什么作用。
如果您不想使用DataSet
,而是改为读取各个行/列,则可以使用此选项。
Read
将阅读器的光标设置到下一行。如果结果中没有更多行,则返回false
。
因此Read
返回true
时,您可以读取当前行的各个列:
while(excelReader.Read())
{
int i = excelReader.GetInt32(0); // 0 is the column index in your result set
string text = excelReader.IsDbNull(1) ? string.Empty : excelReader.GetString(1);
// etc...
}
您将需要知道结果集中的列顺序。
请参阅documentation of IDataReader
接口及其IDataReader
方法以获取更多信息。