C# 如何在c中读取.xls和.xlsx以及.xlsm文件#
我使用openfiledialog并对其进行过滤以获得:.xls和.xlsx以及.xlsm文件。 但我不知道下一步该怎么办,我用firstName和lastName构建了一个worker类,我想从excel文件中获取数据并将其放入变量中 这是我的openfiledialog代码:C# 如何在c中读取.xls和.xlsx以及.xlsm文件#,c#,excel,C#,Excel,我使用openfiledialog并对其进行过滤以获得:.xls和.xlsx以及.xlsm文件。 但我不知道下一步该怎么办,我用firstName和lastName构建了一个worker类,我想从excel文件中获取数据并将其放入变量中 这是我的openfiledialog代码: private void ExcelLoad_Click(object sender, EventArgs e) { int size = -1; 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();
}
private void excel加载\u单击(对象发送方,事件参数e)
{
整数大小=-1;
openFileDialog1.Title=“浏览Excel文件”;
openFileDialog1.Filter=“Excel文件|*.xls;*.xlsx;*.xlsm”;
DialogResult=openFileDialog1.ShowDialog();//显示对话框。
if(result==DialogResult.OK)//测试结果。
{
string file=openFileDialog1.FileName;
尝试
{
string text=File.ReadAllText(文件);
大小=文本。长度;
}
捕获(IOException)
{
}
}
Console.WriteLine(大小);//您需要使用库来读取XLS文件
提及
&
更新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();
在第3步之后,您将获得数据集中的Excel数据
DataSet result = excelReader.AsDataSet();
接下来,您可以使用以下代码迭代数据集
foreach (DataColumn col in result.Table[0].Columns)
{
foreach (DataRow row in result.Table[0].Rows)
{
Console.WriteLine(row[col.ColumnName].ToString());
}
}
备注:我使用表[0]
只是为了指定第一个数据表或第一个excel工作表中的数据。您也可以迭代各种数据表。最新版本的ExcelDataReader(v3.6)支持读取.xlsm文件。可以在Visual Studio中使用NuGet软件包管理器直接安装它。
我已经在VS2019社区版中对其进行了测试,它可以正常工作。不需要安装Excel,它不使用Iterop或Oledb。但是,运行该应用程序的目标计算机上需要.NET framework v4.7或更高版本
更多信息。。。
源代码
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”软件包。你需要在询问之前进行研究。谷歌“用C#打开excel文件”可能重复我下载的git文件,但我如何在我的项目中使用它?用“如何安装软件包”更新了答案谢谢!我有一个公式,我写了“excelReader.GetValue(0)”(在之前做了所有的工作人员之后),它可以工作,但我不能只转到culloms的其他行。我应该再次更新答案。请检查!此代码不适用于.xlsm文件,有什么建议吗?