2016-01-22 18 views
0

論壇。ExcelDataReader - 什麼是數據讀取器方法部分用於?

引用: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()代碼的用途。

+1

看起來像他們的意思是3,4 *或* 5,而不是3,4 *和* 5。同樣的步驟1和2,你不能同時使用兩個文件。 –

+0

@PieterWitvoet謝謝你,更有意義。文件中不清楚。 – HappyCoding

回答

2

如果您不想使用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接口及其Get*方法以獲取更多信息。

相關問題