Forum.
Referințe: 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();
Codul meu:
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());
}
}
}
Întrebarea mea este: la ce se folosește secțiunea „Data Reader methods”?
Inițial am crezut că este pentru transformarea datelor înainte de a fi citite în DataSet. Din parcurgerea codului văd că rezultatul DataSet este deja setat la pasul 3/4 și, prin urmare, nu a avut loc nicio transformare sau prelucrare a datelor. Având în vedere acest lucru, nu sunt sigur care este scopul codului excelReader.Read().
- Se pare că au vrut să spună 3, 4 sau 5, în loc de 3, 4 și 5. Același lucru este valabil și pentru pașii 1 și 2, nu le puteți folosi pe amândouă pentru același fișier. – > Por Pieter Witvoet.
- @PieterWitvoet Mulțumesc, asta are mai mult sens. Nu era clar în documentație. – > Por HappyCoding.
Acest lucru poate fi folosit dacă nu doriți să utilizați DataSet
ci citiți în schimb rânduri/coloane individuale.
Read
setează cursorul cititorului pe rândul următor. Dacă nu mai există nici un rând în rezultate se întoarce false
.
Astfel, în timp ce Read
returnează true
, puteți citi coloane individuale din rândul curent:
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...
}
Va trebui să cunoașteți ordinea coloanelor din setul de rezultate.
Aruncați o privire la documentație a IDataReader
și a interfeței sale Get*
metode pentru mai multe informații.