【问题标题】:C# and read values from an Excel fileC# 并从 Excel 文件中读取值
【发布时间】:2011-12-08 20:57:14
【问题描述】:

我有一个 Excel 文件,列有名称(数据源不受我控制。它是由客户提供给我的)。尽管列会改变,但列标题永远不会改变。

在文件中,它被称为“名字”

如何访问同一列中每个单元格中的数据?

【问题讨论】:

  • 注意:Excel 列“标题”与数据库列名称不同——它们只是带有“标题”文本的常规单元格。因此,您需要阅读第一行单元格中的文本以获取“标题”。循环遍历第一行中的单元格,查找具有所需标题文本的单元格。那么一旦你找到一个 text=column name 的单元格,你就知道它下面的列包含了数据

标签: c# .net visual-studio visual-studio-2010 excel


【解决方案1】:

将您的 Excel 文件作为数据库打开。那么你就不用担心列的位置了:

string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\MyExcelFile.xls;Extended Properties=\"Excel 8.0;HDR=YES\"";
using (var conn = new System.Data.OleDb.OleDbConnection(connString)) {
    conn.Open();
    System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand("Select * From [SheetName$]", conn);
    OleDbDataReader reader = cmd.ExecuteReader();
    int firstNameOrdinal = reader.GetOrdinal("First Name");
    int lastNameOrdinal = reader.GetOrdinal("Last Name");
    while (reader.Read()) {
        Console.WriteLine("First Name: {0}, Last Name: {1}", 
            reader.GetString(firstNameOrdinal), 
            reader.GetString(lastNameOrdinal));
    }
}

【讨论】:

  • 这对我有用,尽管我不得不将构建配置从“AnyCPU”更改为“x86”。显然 Microsoft.Jet.OLEDB.4.0 在运行 x64 时不可用。
  • 是的,很遗憾,Jet 没有 64 位接口。
【解决方案2】:

【讨论】:

    【解决方案3】:

    我以前用过excelLibrary,发现它非常好用。

    【讨论】:

      【解决方案4】:

      我过去曾成功使用FileHelpers Library 读取Excel 文件。

      【讨论】:

        【解决方案5】:

        您可以执行类似的操作,使用 ODBC 连接到文件并下载工作表的内容。

         private bool DownloadExcelData(string fileName, ref DataTable informationDT)
                    {
                        // bool success
                        bool success = true;
        
                        // open the file via odbc
                        string connection = ConfigurationManager.ConnectionStrings["xls"].ConnectionString;
                        connection = String.Format(connection, FilePath + fileName);
                        OleDbConnection conn = new OleDbConnection(connection);
                        conn.Open();
        
                        try
                        {
                            // retrieve the records from the first page
                            OleDbCommand cmd = new OleDbCommand("SELECT * FROM [Information$]", conn);
                            OleDbDataAdapter adpt = new OleDbDataAdapter(cmd);
                            adpt.Fill(informationDT);
                        }
                        catch { success = false; }
        
                        // close the connection
                        conn.Close();
                        return success;
                    }
        

        以下是 xls 和 xlsx 文件的一些示例 ODBC 连接:

        <add name="xls" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=Yes;'" />
            <add name="xlsx" connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=Excel 12.0" />
        

        【讨论】:

          猜你喜欢
          • 2010-09-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多