如何使用C#[复制]来读取Excel文件中的数据(How to read data from exc

2019-08-19 07:22发布

这个问题已经在这里有一个答案:

  • 从C#阅读Excel文件 32回答

我的应用程序需要从一个excel文件中读取数据。 我使用.NET和C#进行开发。 我无法在系统中安装MS Office。 正因为如此的我的应用程序无法读取Excel文件,并同时加载了Excel中的DLL引发错误。

我如何才能获得在没有安装微软Office系统excel文件在我的应用程序?

Answer 1:

还有就是使用选项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数据库引擎组件和目标计算机上安装它。

该供应商被称为Microsoft.ACE.OLEDB.12.0; 。 注意一个事实,即有两个版本,这种成分的一个32位和一个64位。 选择一个合适你的应用程序的位数和Office版本安装(如果有的话)是什么。 有很多怪癖的有该驱动程序正常工作为您的应用。 例如,见这个问题 。

当然,你并不需要在目标计算机上安装的Office。

虽然这种方法有一定的可取之处,我想你应该特别注意在你的问题中留言信号链路从C#阅读Excel文件 。 有关于数据类型的正确解释和超过255个字符时的数据的长度,存在于单个的excel细胞,较长的一些问题



Answer 2:

CSharpJExcel阅读的Excel 97-2003文件(XLS): http://sourceforge.net/projects/jexcelapi/

和ExcelPackage读取的Excel 2007/2010文件(的Office Open XML格式,XLSX): http://excelpackage.codeplex.com/

和ExcelDataReader,似乎必须处理两种格式的能力: https://github.com/ExcelDataReader/ExcelDataReader

祝好运!



Answer 3:

我没有获得一台机器来测试这一点,但它应该工作。 首先,你可能需要安装任何的2007 Office系统驱动程序:数据连接组件或Microsoft Access数据库引擎2010可再发行 。 然后尝试下面的代码,注意您需要更改下面的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安装),所以我不能说是否会工作在您的环境或没有,但我不明白为什么它不应该工作。



Answer 4:

保存Excel文件,CSV,并阅读与使用CSV读者库,如C#生成的文件FileHelpers 。



Answer 5:

转换的Excel文件.csv文件( 逗号分隔值文件),现在你可以很容易地能够阅读它。



文章来源: How to read data from excel file using c# [duplicate]