0

论坛。

参考: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() 代码的用途是什么。

4

1 回答 1

3

如果您不想使用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...
}

您将需要知道结果集中的列顺序。

查看接口及其方法的文档以获取更多信息。IDataReaderGet*

于 2016-01-22T16:14:34.133 回答