如何使用c#从excel文件中读取数据

本文关键字:读取 数据 文件 excel 何使用 | 更新日期: 2023-09-27 18:07:12

我的应用程序需要从excel文件读取数据。我使用。net和c#进行开发。我无法在系统中安装MS office。因此,我的应用程序无法读取excel文件,并在加载excel的dll时抛出错误。

如何在未安装ms office的系统中访问应用程序中的excel文件?

如何使用c#从excel文件中读取数据

可以选择使用OleDB,并像使用数据库中的数据表一样使用Excel表…

举个例子.....

string con =
  @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:'temp'test.xls;" + 
  @"Extended Properties='Excel 8.0;HDR=Yes;'";    
using(OleDbConnection connection = new OleDbConnection(con))
{
    connection.Open();
    OleDbCommand command = new OleDbCommand("select * from [Sheet1$]", connection); 
    using(OleDbDataReader dr = command.ExecuteReader())
    {
         while(dr.Read())
         {
             var row1Col0 = dr[0];
             Console.WriteLine(row1Col0);
         }
    }
}

本例使用Microsoft.Jet.OleDb.4.0提供程序打开并读取Excel文件。但是,如果文件类型为xlsx(来自Excel 2007及更新版本),则需要下载Microsoft Access Database Engine组件并将其安装到目标计算机上。

提供程序称为Microsoft.ACE.OLEDB.12.0;。请注意这个组件有两个版本,一个是32位的,一个是64位的。根据应用程序的大小和安装的Office版本(如果有的话)选择合适的版本。要使该驱动程序正确地为您的应用程序工作,有很多奇怪之处。请看这个问题的例子。

当然你不需要在目标机器上安装Office。

虽然这种方法有一些优点,但我认为你应该特别注意你的问题中从c#读取excel文件的评论所表示的链接。当单个excel单元格中存在的数据长度超过255个字符

时,数据类型的正确解释存在一些问题。

CSharpJExcel用于读取Excel 97-2003文件(XLS), ExcelPackage用于读取Excel 2007/2010文件(Office Open XML格式,XLSX), ExcelDataReader似乎有能力处理这两种格式

祝你好运!

将Excel文件保存为CSV,并使用FileHelpers等CSV阅读器库使用c#读取结果文件。

我没有可用的机器来测试这个,但它应该可以工作。首先,您可能需要安装2007 Office系统驱动程序:数据连接组件或Microsoft Access数据库引擎2010 Redistributable。然后尝试以下代码,注意您需要在下面的Select语句中更改工作表的名称,以匹配excel文件中的sheetname:

using System.Data;
using System.Data.OleDb;
namespace Data_Migration_Process_Creator
{
    class Class1
    {
        private DataTable GetDataTable(string sql, string connectionString)
        {
            DataTable dt = null;
            using (OleDbConnection conn = new OleDbConnection(connectionString))
            {
                conn.Open();
                using (OleDbCommand cmd = new OleDbCommand(sql, conn))
                {
                    using (OleDbDataReader rdr = cmd.ExecuteReader())
                    {
                        dt.Load(rdr);
                        return dt;
                    }
                }
            }
        }
        private void GetExcel()
        {
            string fullPathToExcel = "<Path to Excel file>"; //ie C:'Temp'YourExcel.xls
            string connString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0;HDR=yes'", fullPathToExcel);
            DataTable dt = GetDataTable("SELECT * from [SheetName$]", connString);
            foreach (DataRow dr in dt.Rows)
            {
                //Do what you need to do with your data here
            }
        }
    }
}

注意:我没有一个环境来测试这个(安装了Office的一个),所以我不能说它是否会在你的环境中工作,但我不明白为什么它不应该工作。

将excel文件转换为.csv文件(逗号分隔值文件),现在您可以轻松地阅读它