我正在使用SQL以HERE的形式查询Excel文件,而且我知道可以通过以下方式获取工作表的内容:
var ds = new DataSet();
var conn = new OleDbConnection();
conn.Open();
var cmd = new OleDbDataAdapter("Select * FROM [Sheet1$]", conn);
cmd.Fill(ds, "ds1");
我想问问有没有办法获得所有表名?
我尝试过this answer,但没有用。
答案 0 :(得分:1)
您是否要从所有工作表中获取数据?
如果是,那么请参见以下帖子:
How to import all the Excel sheets to DataSet in C#
答案 1 :(得分:1)
我尝试了示例链接中的代码,它对我有用:
var result = reader.AsDataSet(new ExcelDataSetConfiguration()
{
UseColumnDataType = true,
ConfigureDataTable = (data) => new ExcelDataTableConfiguration()
{
UseHeaderRow = true
}
});
DataTableCollection tables = result.Tables;
for (int i = 0; i < tables.Count; i++)
{
Console.WriteLine(tables[i].TableName);
//here I can work with current table
for (int j = 0; j < tables[i].Columns.Count; j++)
{
Console.WriteLine(tables[i].Columns[j].ColumnName);
}
}
答案 2 :(得分:0)
我只是找到一种通过以下方式获取所有工作表名称的方法:
var ds = new DataSet();
var conn = _connNoHeader = new OleDbConnection(string.Format("Provider={0};Extended Properties=\"Excel 8.0;IMEX=1;HDR=No;\";Data Source={1}", provider, filePath));
conn.Open();
DataTable tables = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,
new object[] { null, null, null, "TABLE" });
Console.WriteLine("The tables are:");
foreach (DataRow row in tables.Rows)
Console.Write(" {0}", row[2]);
// here are all worksheet name
var allWorksheetNames = tables.Rows.OfType<DataRow>().Select(row => row[2].ToString().TrimEnd('$')).ToList();
此解决方案来自HERE。
其他答案也有帮助!