使用 OleDB 从 Excel sheet(扩展名为 .xlsm 的文件)中检索第一列的值
Retrieving values of the first column from Excel sheet (file with .xlsm extension) with OleDB
我正在尝试从名为 "SP$" 的 Excel sheet 中检索第一列的值。
我有路径:
string path = @"C:\Users\atsurkanu\Desktop" + @"\TemplateClientExtraction_IDEAFIMIT_Conero_QUARTER_20170127.xlsm";
string connectionString = string.Format(@"provider=Microsoft.ACE.OLEDB.12.0;data source={0};Extended Properties=Excel 12.0;", path);
string sheetName = "SP$";
和一些像这样的代码:
using (OleDbConnection con = new OleDbConnection(connectionString))
{
try
{
var dataTable = new DataTable();
con.Open();
var tableschema = con.GetSchema("Tables");
var firstsheet = tableschema.Rows[0]["SP$"].ToString();
string name_query = "SELECT A4 FROM [" + firstsheet + "]";
OleDbDataAdapter da = new OleDbDataAdapter(name_query, con);
da.Fill(dataTable);
con.Close();
但是没用。请告诉我,我如何从 Excel sheet.
检索第一列
更新:
我不确定它是如何工作的,但它有帮助:
var dataTable = new DataTable();
con.Open();
var tableschema = con.GetSchema("Tables");
// To get the first sheet name you use the first row and the column named TABLE_NAME
var firstsheet = tableschema.Rows[0]["TABLE_NAME"].ToString();
string name_query = "SELECT F1 FROM [" + "SP$" + "] WHERE F1 <> ''";
OleDbDataAdapter da = new OleDbDataAdapter(name_query, con);
da.Fill(dataTable);
foreach (DataRow dataRow in dataTable.Rows)
{
foreach (var item in dataRow.ItemArray)
{
listWithElementsFromSPfirstColumn.Add((string)item);
}
}
您不能使用 "A4",希望 OleDb 理解 Excel 的 row/columns 约定。对于 OleDb,sheet 只是一个 DataTable,您需要全部加载它或提供 WHERE 条件来过滤要检索的行。
不清楚你的sheet是否有HEADERs。您需要将键 HDR=NO 或 HDR=YES 添加到您的连接字符串中。如果缺少 header,则 OleDb 会自动使用 F1、F2、F3 等分配列名。
所以你可以用这样的东西查询你的 sheet 或将 F1 更改为 A 列的 header。
using (OleDbConnection con = new OleDbConnection(connectionString))
{
try
{
var dataTable = new DataTable();
con.Open();
var tableschema = con.GetSchema("Tables");
// To get the first sheet name you use the first row and the column named TABLE_NAME
var firstsheet = tableschema.Rows[0]["TABLE_NAME"].ToString();
string name_query = "SELECT F1 FROM [" + firstsheet + "] WHERE F1 <> ''";
OleDbDataAdapter da = new OleDbDataAdapter(name_query, con);
da.Fill(dataTable);
}
catch .....
}
现在由您读取数据表并使用 F1 列(Excel 的 A 列)的内容
我正在尝试从名为 "SP$" 的 Excel sheet 中检索第一列的值。
我有路径:
string path = @"C:\Users\atsurkanu\Desktop" + @"\TemplateClientExtraction_IDEAFIMIT_Conero_QUARTER_20170127.xlsm";
string connectionString = string.Format(@"provider=Microsoft.ACE.OLEDB.12.0;data source={0};Extended Properties=Excel 12.0;", path);
string sheetName = "SP$";
和一些像这样的代码:
using (OleDbConnection con = new OleDbConnection(connectionString))
{
try
{
var dataTable = new DataTable();
con.Open();
var tableschema = con.GetSchema("Tables");
var firstsheet = tableschema.Rows[0]["SP$"].ToString();
string name_query = "SELECT A4 FROM [" + firstsheet + "]";
OleDbDataAdapter da = new OleDbDataAdapter(name_query, con);
da.Fill(dataTable);
con.Close();
但是没用。请告诉我,我如何从 Excel sheet.
检索第一列更新: 我不确定它是如何工作的,但它有帮助:
var dataTable = new DataTable();
con.Open();
var tableschema = con.GetSchema("Tables");
// To get the first sheet name you use the first row and the column named TABLE_NAME
var firstsheet = tableschema.Rows[0]["TABLE_NAME"].ToString();
string name_query = "SELECT F1 FROM [" + "SP$" + "] WHERE F1 <> ''";
OleDbDataAdapter da = new OleDbDataAdapter(name_query, con);
da.Fill(dataTable);
foreach (DataRow dataRow in dataTable.Rows)
{
foreach (var item in dataRow.ItemArray)
{
listWithElementsFromSPfirstColumn.Add((string)item);
}
}
您不能使用 "A4",希望 OleDb 理解 Excel 的 row/columns 约定。对于 OleDb,sheet 只是一个 DataTable,您需要全部加载它或提供 WHERE 条件来过滤要检索的行。
不清楚你的sheet是否有HEADERs。您需要将键 HDR=NO 或 HDR=YES 添加到您的连接字符串中。如果缺少 header,则 OleDb 会自动使用 F1、F2、F3 等分配列名。 所以你可以用这样的东西查询你的 sheet 或将 F1 更改为 A 列的 header。
using (OleDbConnection con = new OleDbConnection(connectionString))
{
try
{
var dataTable = new DataTable();
con.Open();
var tableschema = con.GetSchema("Tables");
// To get the first sheet name you use the first row and the column named TABLE_NAME
var firstsheet = tableschema.Rows[0]["TABLE_NAME"].ToString();
string name_query = "SELECT F1 FROM [" + firstsheet + "] WHERE F1 <> ''";
OleDbDataAdapter da = new OleDbDataAdapter(name_query, con);
da.Fill(dataTable);
}
catch .....
}
现在由您读取数据表并使用 F1 列(Excel 的 A 列)的内容