我使用openfiledialog并过滤它以获取:.xls和.xlsx以及.xlsm文件。 但我不知道接下来要做什么,我用firstName和lastName构建了一类worker,我想从excel文件中获取数据并将其放入varible中。
这是我的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();
}
所以如何从这种文件中读取数据。(已经成功打开它但我不知道如何使用该文件并从中获取数据)。
答案 0 :(得分:4)
您需要使用库来读取XLS文件,
参考Reading Excel files from C# &安培; https://github.com/ExcelDataReader/ExcelDataReader
更新1: 从Github,如何使用它,将包安装为nuget包。
建议使用Nuget
Install-Package 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();
在第3步之后,您将获得DataSet中的Excel数据
DataSet result = excelReader.AsDataSet();
接下来,您可以使用以下代码
迭代DataSetforeach (DataColumn col in result.Table[0].Columns)
{
foreach (DataRow row in result.Table[0].Rows)
{
Console.WriteLine(row[col.ColumnName].ToString());
}
}
P.S:我曾使用Table[0]
来指定第一个DataTable或来自第一个Excel工作表的数据。您也可以迭代各种数据表。
答案 1 :(得分:0)
最新版本的ExcelDataReader(v3.6)支持读取.xlsm文件。可以使用Visual Studio中的NuGet包管理器直接安装它。 我已经在VS2019 Community Edition中对其进行了测试,并且可以正常工作。 Excel不需要安装,它不使用Iterop或Oledb。但是,运行应用程序的目标计算机上需要.NET Framework v4.7或更高版本。
更多信息... https://www.youtube.com/watch?v=_h_4-HxrMMc
源代码
using ExcelDataReader;
...
class ExcelReader {
public static DataTable ExcelToDataTable(String fileName) {
using(var stream = File.Open(fileName, FileMode.Open, FileAccess.Read)) {
using (var reader = ExcelReaderFactory.CreateReader(stream)) {
var result = reader.AsDataSet(new ExcelDataSetConfiguration() {
ConfigureDataTable = (data) => new ExcelDataTableConfiguration() {
UseHeaderRow = true
}
});
DataTableCollection table = result.Tables;
DataTable resultTable = table["Blad1"];
return resultTable;
}
}
}
}
注意: 不要忘记也安装“ ExcelDataReader.Dataset”软件包。
答案 2 :(得分:-1)
不幸的是,ExcelDataReader并未将.xlsm列为受支持的格式(请参见https://github.com/ExcelDataReader/ExcelDataReader)。但是您可以使用Spire.XLS(https://www.e-iceblue.com/Introduce/excel-for-net-introduce.html)之类的库。