C# Oledb连接和查询从excel电子表格中只读一列
可能重复:C# Oledb连接和查询从excel电子表格中只读一列,c#,.net,ado.net,oledb,C#,.net,Ado.net,Oledb,可能重复: 我用这段代码读取从网站加载的Excel电子表格,并显示在gridview中。我只想读一下电子表格上的A列。我想我应该能够改变这个string query=“SELECT*FROM[Sheet1$]”
我用这段代码读取从网站加载的Excel电子表格,并显示在
gridview
中。我只想读一下电子表格上的A列。我想我应该能够改变这个string query=“SELECT*FROM[Sheet1$]”但是我所有的努力都是徒劳的。有人能给我指出正确的方向吗,或者有没有更好的方法来做这件事。看起来做这件事的方法很简单
string sql=“从[sheet1$]中选择F1、F2、F3、F4、F5;
谢谢大家的评论。我相信你的问题在于电子表格不是数据库。电子表格没有义务是矩形的或有相同类型的单元格。所以说你想要一个列是假设所有行都有该列,并且是相同类型的。所以在对其发出SQL之前,你需要转换为相同类型的向量。以下是我用来读取Excel电子表格并将其作为数据表返回的内容,如果您关注以下部分,我可以通过循环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;
}
}
}
}
公共静态数据表GetExcelData(字符串连接字符串)
{
stringsql=string.Empty;
使用(OLEDB连接cn=新OLEDB连接(连接字符串))
{
使用(OleDbDataAdapter=新OleDbDataAdapter())
{
DataTable dt=新的DataTable();
使用(OleDbCommand=cn.CreateCommand())
{
cn.Open();
DataTable dtSchema=cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,新对象[]{null,null,null,“TABLE”});
foreach(dtSchema.Rows中的数据行dr)
{
//将循环遍历每个工作表的名称
控制台写入线(dr[“Table_Name”]);
}
string firstSheetName=dtSchema.Rows[0]。字段(“表名称”);
sql=“从[”+firstSheetName+“]”中选择*;
command.CommandText=sql;
adapter.SelectCommand=command;
适配器填充(dt);
如果(dt.Rows.Count==0)
{
OleDbDataReader=command.ExecuteReader();
dt.负载(读卡器);
}
cn.Close();
返回dt;
}
}
}
}
此链接可能会为您提供一些有用的信息:谢谢,我已经搜索了一段时间,但找不到它。似乎我应该能够从中学习到一些东西,但我无法真正了解正在发生的事情,它确实没有回答我问的问题,即如何从excel spreadshee中仅获取一列t、 谢谢你的回复。
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;
}
}
}
}