gpt4 book ai didi

c# - 读取具有不同工作表名称的多个 Excel 工作表

转载 作者:行者123 更新时间:2023-11-30 20:55:03 29 4
gpt4 key购买 nike

我想知道如何在 c# 中读取多个具有不同工作表名称的 excel 工作表并使用 oledb。

我有这种读取多张纸的现有方法(但具有固定的工作表名称):

DataSet ds = new DataSet();
var excelConnectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=Excel 8.0", path);
OleDbConnection connection = new OleDbConnection();
connection.ConnectionString = excelConnectionString;

var i = 1;
while (i <= 4)
{
string query = "SELECT * FROM [Sheet" + i + "$]";
ds.Clear();
OleDbDataAdapter data = new OleDbDataAdapter(query, connection);
data.Fill(ds);

// other stuff
i = i + 1;
}

这个有效。但我现在处于工作表名称不固定的不同情况,例如:Sheet1 是 Dog,Sheet2 是 Cat Sheet3 是 Bird。

现在我关心的是如何使用现有代码在这些工作表名称上循环。

最佳答案

这是来自 VB.net 但不确定它翻译得如何,返回包含所有工作表名称的字符串列表:

OleDbConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, New Object() {Nothing, Nothing, Nothing, "TABLE"})

MSDN Link

一旦您有了工作表名称列表,您就可以执行一个简单的 For Each 循环来迭代。

编辑:

这应该适用于 C#

添加函数

static DataTable GetSchemaTable(string connectionString)
{
using (OleDbConnection connection = new
OleDbConnection(connectionString))
{
connection.Open();
DataTable schemaTable = connection.GetOleDbSchemaTable(
OleDbSchemaGuid.Tables,
new object[] { null, null, null, "TABLE" });
return schemaTable;
}
}

您的代码将更改为:

DataSet ds = new DataSet();
var excelConnectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=Excel 8.0", path);
OleDbConnection connection = new OleDbConnection();
connection.ConnectionString = excelConnectionString;

DataTable sheets = GetSchemaTable(excelConnectionString);

foreach (dataRow r in sheets.rows)
{
string query = "SELECT * FROM [" + r.Item(0).ToString + "]";
ds.Clear();
OleDbDataAdapter data = new OleDbDataAdapter(query, connection);
data.Fill(ds);

}

只需确保在每次迭代后用 ds 做一些事情。

关于c# - 读取具有不同工作表名称的多个 Excel 工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18592424/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com