我使用以下代码从工作簿中的所有工作表中提取数据:
foreach (var sheetName in GetExcelSheetNames(connectionString))
{
if (sheetName.Contains("_"))
{
}
else
{
using (OleDbConnection con = new OleDbConnection(connectionString))
{
var dataTable = new DataTable();
string query = string.Format("SELECT * ,{0} as sheetName FROM [{0}]", sheetName);
con.Open();
OleDbDataAdapter adapter = new OleDbDataAdapter(query, con);
try
{
adapter.Fill(dataTable);
ds.Tables.Add(dataTable);
}
catch { }
}
}
我不能只计算DataTable
中数据的存储方式:工作表名称是否已添加为列?我该如何提取它?
foreach (DataTable dt in ds.Tables)
{
using (SqlConnection con = new SqlConnection(consString))
{
con.Open();
for (int i = 0; i < dt.Rows.Count; i++)
{
for (int j = 0; j < dt.Columns.Count; j ++)
{
//what should I write here ?
}
}
}
答案 0 :(得分:0)
假设dt是您的数据表变量,
做dt.Rows[row index][column index]
像
dt [2] [4] - &gt;将引用第2行,第4个单元格
我不确定,但也许工作表名称可能存储在dt.TableName
答案 1 :(得分:0)
要使用oledb获取工作表名称,您需要使用看起来像这样的代码(thanks to this SO post and answer):
DataTable dtSheets = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
List<string> sheets= new List<string>();
foreach (DataRow dr in dtSheets.Rows)
{
if (dr["TABLE_NAME"].ToString().Contains("$"))//checks whether row contains '_xlnm#_FilterDatabase' or sheet name(i.e. sheet name always ends with $ sign)
{
sheets.Add(dr["TABLE_NAME"].ToString());
}
}
以下是从数据表中访问值的方法:
var someValue = dt.Rows[i][j]
您需要在当前数据表(dt)的行index(i)的行index(j)处获取该项。
相反,您也可以使用列的名称。
var someValue = dt.Rows[i]["columnName"]