使用 C# 在同一工作表中读取具有可变行长度的多个 excel 表
Reading Multiples excel tables having variable rows lenght in the same Worksheet using c#
所以我有一个 excel 文件,其中包含一个包含 4 table 的工作表
My excel worsheet
我希望能够将所有这些 tables 分开 dataTable 知道行的长度可以改变(可以添加或删除行)
我试过使用 oleDb,它与工作表中的第一个 table 配合得很好,但是当我尝试获取第二个时(通过指定起始行),它给了我第二个 table 与所有其他 tables 在一个数据 table 中:/
这是我的代码:
public static System.Data.DataTable getTableSelection(string file, string sheet, string starting = "", string finish = "")
{
string ConStr;
string HDR;
HDR = "YES";
ConStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
+ file + ";Extended Properties=\"Excel 12.0;HDR=" + HDR + ";IMEX=0\"";
OleDbConnection cnn = new OleDbConnection(ConStr);
string query = "select * from ["
+ sheet + "$" + (starting != "" ? starting + ":" + finish : "") + "]";
Console.WriteLine(query);
OleDbCommand oconn = new OleDbCommand(query, cnn);
OleDbDataAdapter adp = new OleDbDataAdapter(oconn);
System.Data.DataTable dt = new System.Data.DataTable();
adp.Fill(dt);
cnn.Close();
return dt;
}
对不起我的英语不好,希望你能理解!!
喜欢 Whosebug
所以我找到了一个解决方案,包括加入我所有的 table 以获得我需要的所有字段,然后使用 oleDb 查询将其转换为数据 table ;我的查询如下所示:select * from (([Sheet1$A:D9] INNER JOIN [Sheet1$A14:D21] ON [Sheet1$A:D9].primaryKey=[Sheet1$A14:D21].primaryKey) INNER JOIN [Sheet2$A26:M33] ON [Sheet2$A26:M33].primaryKey=[Sheet1$A14:D21].primaryKey)
但是,如果不指定结束位置,我仍然无法获得 table:/
所以我有一个 excel 文件,其中包含一个包含 4 table 的工作表 My excel worsheet
我希望能够将所有这些 tables 分开 dataTable 知道行的长度可以改变(可以添加或删除行)
我试过使用 oleDb,它与工作表中的第一个 table 配合得很好,但是当我尝试获取第二个时(通过指定起始行),它给了我第二个 table 与所有其他 tables 在一个数据 table 中:/ 这是我的代码:
public static System.Data.DataTable getTableSelection(string file, string sheet, string starting = "", string finish = "")
{
string ConStr;
string HDR;
HDR = "YES";
ConStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
+ file + ";Extended Properties=\"Excel 12.0;HDR=" + HDR + ";IMEX=0\"";
OleDbConnection cnn = new OleDbConnection(ConStr);
string query = "select * from ["
+ sheet + "$" + (starting != "" ? starting + ":" + finish : "") + "]";
Console.WriteLine(query);
OleDbCommand oconn = new OleDbCommand(query, cnn);
OleDbDataAdapter adp = new OleDbDataAdapter(oconn);
System.Data.DataTable dt = new System.Data.DataTable();
adp.Fill(dt);
cnn.Close();
return dt;
}
对不起我的英语不好,希望你能理解!! 喜欢 Whosebug
所以我找到了一个解决方案,包括加入我所有的 table 以获得我需要的所有字段,然后使用 oleDb 查询将其转换为数据 table ;我的查询如下所示:select * from (([Sheet1$A:D9] INNER JOIN [Sheet1$A14:D21] ON [Sheet1$A:D9].primaryKey=[Sheet1$A14:D21].primaryKey) INNER JOIN [Sheet2$A26:M33] ON [Sheet2$A26:M33].primaryKey=[Sheet1$A14:D21].primaryKey)
但是,如果不指定结束位置,我仍然无法获得 table:/