可能重复:
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$]";
,但我所有的努力都是徒劳的。有人能指出我正确的方向,还是有更好的方法来做到这一点。
答案 0 :(得分:3)
看起来这样做的方法很简单 string sql =“SELECT F1,F2,F3,F4,F5 FROM [sheet1 $]; 感谢大家的评论。
答案 1 :(得分:0)
我认为您的问题在于电子表格不是数据库。电子表格没有义务为矩形或具有相同类型的单元格。所以说你想要一个列ASSUMES,该列存在于所有行并且属于同一类型。因此,在针对它发出SQL之前,您需要转换为相同类型的向量。
答案 2 :(得分:0)
以下是我用来阅读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;
}
}
}
}