C#:从Excel工作表中选择多个数据到数据网格视图



我正在尝试将选定的行从 excel 工作表导入到数据网格视图。在我的搜索中,我了解到OLEDB方法可以导入数据。我可以导入的单元格范围,但是如果我有一个巨大的 excel 工作表并且只想导入有限的列,例如 c6:c10 和 d6:d10。我怎样才能实现它?我的代码如下:

public void demoread (string FileName, string SheetName, string StartCell, string EndCell)
{
    System.Text.StringBuilder sb = new System.Text.StringBuilder();
    System.Data.DataTable dt = new System.Data.DataTable();
    OleDbConnection cn = new OleDbConnection { ConnectionString = ConnectionString(FileName, "No") };
    try
    {
        List<string> jop = new List<string>();
        cn.Open();
         string SelectStatement = string.Format(@"SELECT * FROM [{0}${1}:{2}]", SheetName, StartCell, EndCell);
        //OleDbDataAdapter mydataadapter = new OleDbDataAdapter("Select * from [" + "Salary Sheet" + "$B4:H10 +$c7:c10]", cn);
        //mydataadapter.Fill(dt);
        //dataGridView1.DataSource = dt;
        //string[] data = dt.;
        OleDbCommand cmd = new OleDbCommand { CommandText = SelectStatement,Connection = cn };
        OleDbDataReader dr = cmd.ExecuteReader();
          if (dr.HasRows)
          {
              while (dr.Read())
              {
                for (int i = 0; i < 100; i++)
                {
                    MessageBox.Show(dr.GetString(0));
                    jop[i] = dr.GetString(0).ToString();
                    // MessageBox.Show(dr.GetString(0));
                    // dataGridView1.DataSource = dr;
                }
              }
          }
          else
          {
              //Console.WriteLine("No rows!!!");
          }
    }
    catch(Exception er)
    {
        MessageBox.Show(er.ToString());
    }
}       

在评论中,我也尝试使用oledbdataadapter命令。我什至尝试将结果存储在特定的列表中,以便以后将其作为DatagridView中的一个数据表进行俱乐部.请帮助我,甚至我的方法是正确的。

如果我正确理解您的问题,以下内容将为您提供所需的内容:

string excelConnectString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\...\Book2.xlsx;Extended Properties="Excel 12.0 Xml;HDR=NO";";
OleDbConnection objConn = new OleDbConnection(excelConnectString);
OleDbCommand objCmd1 = new OleDbCommand("Select * From [Sheet1$C6:C10]", objConn);
OleDbCommand objCmd2 = new OleDbCommand("Select * From [Sheet1$D6:D10]", objConn);
OleDbDataAdapter objDatAdap = new OleDbDataAdapter();
objDatAdap.SelectCommand = objCmd1;
DataTable dt = new DataTable();
objDatAdap.Fill(dt);
objDatAdap.SelectCommand = objCmd2;
DataTable dt2 = new DataTable();
objDatAdap.Fill(dt2);
dt.Merge(dt2);

方法是否正确实际上取决于您的应用和要求。如果它只是读取数据,那么使用OleDb就可以了。但是,如果您想了解所使用的样式以及更多内容,那么OleDb不足,您可能应该研究一下OpenXML。

您可以像对任何数据库一样对 excel 文件执行操作,因此您可以像执行这样的查询选择前 5 个 * 从..

我不确定是否读取特定范围内的行,但是如果您想读取初始行,您可以执行以下操作

 string SelectStatement = string.Format(@"SELECT TOP {0} * FROM [{1}${2}:{3}]", numOfTopRowsToRead, SheetName, StartCell, EndCell);

相关内容

  • 没有找到相关文章

最新更新