通过c#中的OleDbDataAdapter导入Excel,更改列名

本文关键字:Excel 中的 OleDbDataAdapter 导入 通过 | 更新日期: 2023-09-27 18:08:31

你好,我尝试在c#中导入Excel文档到我的DataGridView中。到目前为止,它的工作,但有一个列的数据在它需要"排序"。

如果这很简单,我会在OleDbDataAdapter查询中执行"WHERE test> 0"。

但. .列的名称随着每个文档的变化而变化,我需要经常使用它。到目前为止,我得到了这个:

    private void button1_Click(object sender, EventArgs e)
    {
        String strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +
        "Data Source=C:''Users''Test''Desktop''Test.xls;" +
        "Extended Properties=Excel 8.0;";
        DataSet ds = new DataSet();
        OleDbDataAdapter da = new OleDbDataAdapter
        ("SELECT * FROM [Test$]", strConn);
        da.Fill(ds);
        dataGridView1.DataSource = ds.Tables[0].DefaultView;
    }

在选择中,我需要放置一个行巫婆状态,列的前3个字母是相同的,但后面的数字不是。如:

QTA 12345,QTA 13213,QTA 92818。

类似:

    OleDbDataAdapter da = new OleDbDataAdapter
        ("SELECT * FROM [Test$] WHERE [testColumn] > 0", strConn);

但是同样的前3个字母和最后的数字是随机的。

有人能帮我一下吗?

通过c#中的OleDbDataAdapter导入Excel,更改列名

我试过一些代码,它对我来说工作得很好。试试吧:

OleDbConnection oleDbConnection = new OleDbConnection(
  "Provider=Microsoft.Jet.OLEDB.4.0;" +
  "Data Source=D:''Users''name''Desktop''test.xls;" +
  "Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'");
oleDbConnection.Open();
//Get columns
DataTable dtColumns = oleDbConnection.GetSchema("Columns", new string[] { null, null, "Tabelle1$", null });
List<string> columns = new List<string>();
foreach (DataRow dr in dtColumns.Rows)
  columns.Add(dr[3].ToString());
string colName = columns.Find(item => item.Substring(0,3) == "QTA");
DataSet ds = new DataSet();
OleDbDataAdapter da = new OleDbDataAdapter
  ("SELECT * FROM [Tabelle1$] WHERE [" + colName + "] > 0", oleDbConnection);
da.Fill(ds);
dataGrid1.ItemsSource = ds.Tables[0].DefaultView;
oleDbConnection.Close();

注意根据需要更改连接字符串。

你可以使用LINQ:

来修改代码
string colName = (from DataRow dr in dtColumns.Rows where dr[3].ToString().Substring(0, 3) == "QTA" select dr[3].ToString()).ElementAt(0);