如何在c#中读取.xls、.xlsx和.xlsm文件

本文关键字:xlsx xlsm 文件 xls 读取 | 更新日期: 2023-09-27 18:03:22

我使用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();
    }

那么我如何从这类文件中读取数据呢?(是成功地打开它,但我不知道如何使用文件,并从中获取数据)

如何在c#中读取.xls、.xlsx和.xlsm文件

您需要使用库来读取XLS文件,

参考从c#中读取Excel文件,https://github.com/ExcelDataReader/ExcelDataReader

更新1:从Github,如何使用它,安装包作为nuget包。

建议使用Nuget

安装包ExcelDataReader

当前的二进制文件仍然在codeplex站点上,但是这些将会以后不会更新。如果有足够的请求单独的二进制主机,而不是nuget,然后我们会想出一些其他的解决方案。

UPDATE 2:从Excel Data Reader读取的代码

    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();

接下来,您可以使用以下代码遍历DataSet

foreach (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]只是为了指定第一个数据表或第一个excel表格中的数据。您也可以遍历各种数据表

最新版本的ExcelDataReader (v3.6)支持读取。xlsm文件。它可以使用Visual Studio中的NuGet包管理器直接安装。我已经在VS2019社区版中测试了它,它有效。Excel不需要安装,它不使用Iterop或Oledb。但是,在运行应用程序的目标机器上需要。net框架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"。