我使用了 openfiledialog 并对其进行过滤以获取:.xls 和 .xlsx 和 .xlsm 文件。但我不知道接下来要做什么,我用 firstName 和 lastName 构建了一个工人类,我想从 excel 文件中获取数据并将其放入变量中。
这是我的 openfiledialog 代码:
private void ExcelLoad_Click(object sender, EventArgs e)
{
int size = -1;
openFileDialog1.Title = "Browse Excel file";
openFileDialog1.Filter = "Excel Files|*.xls;*.xlsx;*.xlsm";
DialogResult result = openFileDialog1.ShowDialog(); // Show the dialog.
if (result == DialogResult.OK) // Test result.
{
string file = openFileDialog1.FileName;
try
{
string text = File.ReadAllText(file);
size = text.Length;
}
catch (IOException)
{
}
}
Console.WriteLine(size); // <-- Shows file size in debugging mode.
Console.WriteLine(result); // <-- For debugging use.
Stream excelOpenFile= openFileDialog1.OpenFile();
}
Run Code Online (Sandbox Code Playgroud)
那么我怎样才能从这种文件中读取数据。(成功打开它,但我不知道如何使用该文件并从中获取数据)。
您需要使用库来读取 XLS 文件,
请参阅从 C# 和 https://github.com/ExcelDataReader/ExcelDataReader读取 Excel 文件
更新 1:从 Github,如何使用它,将包安装为 nuget 包。
推荐使用Nuget
安装包 ExcelDataReader
当前的二进制文件仍在 codeplex 站点上,但以后不会更新。如果除了 nuget 之外有足够的单独二进制托管请求,那么我们将提出一些其他解决方案。
更新 2:从 Excel 数据阅读器读取的代码
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();
Run Code Online (Sandbox Code Playgroud)
在第 3 步之后,您将在 DataSet 中获取 Excel 数据
DataSet result = excelReader.AsDataSet();
Run Code Online (Sandbox Code Playgroud)
接下来,您可以使用以下代码迭代 DataSet
foreach (DataColumn col in result.Table[0].Columns)
{
foreach (DataRow row in result.Table[0].Rows)
{
Console.WriteLine(row[col.ColumnName].ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
PS:我Table[0]只是用来指定第一个 DataTable 或第一个 Excel 工作表中的数据。您也可以遍历各种数据表。
| 归档时间: |
|
| 查看次数: |
20818 次 |
| 最近记录: |