我正在尝试将选定的行从 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);