【问题标题】:Oledb connection and query read only one column from excel spreadsheet [duplicate]Oledb连接和查询仅从excel电子表格中读取一列[重复]
【发布时间】:2013-01-18 17:25:07
【问题描述】:

可能重复:
How can i select specific columns from excel sheet in c#?

string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|2.xls;Extended Properties='Excel 8.0;HDR=no;'";

string query = "SELECT * FROM [Sheet1$]";

DataSet excelDataSet = new DataSet();
OleDbDataAdapter da = new OleDbDataAdapter(query, strConn);

da.Fill(excelDataSet);

GridView1.DataSource = excelDataSet;
GridView1.DataBind();
GridView1.HeaderRow.Cells[0].Text = "CheckNumber";

我有这段代码来读取从网站加载并显示在gridview 中的 Excel 电子表格。我只想简单地阅读电子表格上的 A 列。我想我应该能够改变这个string query = "SELECT * FROM [Sheet1$]";,但我所有的努力都是徒劳的。有人可以指出我正确的方向,还是有更好的方法来做到这一点。

【问题讨论】:

标签: c# .net ado.net oledb


【解决方案1】:

看起来这样做的方法很简单 字符串 sql = "从 [sheet1$] 中选择 F1、F2、F3、F4、F5; 谢谢大家的cmets。

【讨论】:

    【解决方案2】:

    我相信您的问题在于电子表格不是数据库。电子表格没有义务是矩形或具有相同类型的单元格。所以说你想要一个列假设该列存在于所有行并且属于同一类型。因此,在针对它发出 SQL 之前,您需要将其转换为相同类型的向量。

    【讨论】:

      【解决方案3】:

      这是我用来读取 Excel 电子表格并将其作为 DataTable 返回的内容,如果您专注于以下部分,我可以通过循环遍历 dtSchema DataTable 对象来查询电子表格中的所有工作簿以查找不同工作表的名称:

      public static DataTable GetExcelData(string connectionString)
      {
          string sql = string.Empty;
          using (OleDbConnection cn = new OleDbConnection(connectionString))
          {
              using (OleDbDataAdapter adapter = new OleDbDataAdapter())
              {
                  DataTable dt = new DataTable();
                  using (OleDbCommand command = cn.CreateCommand())
                  {
                      cn.Open();
                      DataTable dtSchema = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
      
                          foreach (DataRow dr in dtSchema.Rows)
                          {
                              //Will Loop through the name of each Worksheet
                              Console.WriteLine(dr["Table_Name"]);
                          }
      
      
                      string firstSheetName = dtSchema.Rows[0].Field<string>("TABLE_NAME");
      
                      sql = "SELECT * FROM [" + firstSheetName + "]";
                      command.CommandText = sql;
                      adapter.SelectCommand = command;
                      adapter.Fill(dt);
      
                      if (dt.Rows.Count == 0)
                      {
                          OleDbDataReader reader = command.ExecuteReader();
                          dt.Load(reader);
                      }
                      cn.Close();
                      return dt;
                  }
              }
          }
      }
      

      【讨论】:

      • 似乎我应该能够从中学到一些东西,但我无法真正了解正在发生的事情,它真的回答了我问的问题,即如何从 excel 中获取一列电子表格。感谢您的回复。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多