gpt4 book ai didi

c# - .xlsx 的 OleDbConnection.GetOleDbSchemaTable 无法识别隐藏的工作表

转载 作者:太空宇宙 更新时间:2023-11-03 17:05:11 31 4
gpt4 key购买 nike

我正在使用 OleDbConnection 从 .xlsx 工作簿中检索数据。当我检索工作表列表时,它无法确定是否有任何工作表被隐藏。过去是这样的,它的名称以下划线结尾,例如“Sheet1$_”。你现在知道如何判断它是否隐藏了吗?

                using (var connection =
new OleDbConnection(string.Concat("Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read;Data Source=",
fileName,
";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\"")))
using (var command = new OleDbCommand("", connection))
{
connection.Open();
var listedSheets = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,
new object[] {null, null, null, "Table"});

if (listedSheets != null)
{
var sheetNames = new List<string>(listedSheets.Rows.Count);

foreach (DataRow row in listedSheets.Rows)
{
sheetNames.Add(row[2].ToString());
}

return sheetNames;
}

return new List<string>();
}

最佳答案

我认为 GetOleDbSchemaTable 不是这里的最佳选择

因为无论数据源是 Excel、Access 还是其他,它都会返回 DataTable 对象。因此,它不知道任何 Excel 工作表属性

相反,您可以使用 Excel com 组件来完全控制您的 Excel 文件

步骤

  1. 将 Microsoft Excel COM 引用添加到您的项目
  2. 将以下行添加到您的应用程序中

    使用 Excel = Microsoft.Office.Interop.Excel;

  3. 读取加载表单的Visible属性

示例代码

private static Excel.Workbook MyBook = null;
private static Excel.Application MyApp = null;
private static Excel.Worksheet MySheet = null;
static void ReadExcel()
{
MyApp = new Excel.Application();
MyApp.Visible = false;
MyBook = MyApp.Workbooks.Open("C:\\test.xlsx");
MySheet = (Excel.Worksheet)MyBook.Sheets[1];

if (MySheet.Visible == Excel.XlSheetVisibility.xlSheetHidden)
{
//handle hidden sheet here
}
}

注意事项:

选择正确的 COM 引用可能取决于您的 Visual Studio 版本 Check this SO question

此外,This article is a good reference

关于c# - .xlsx 的 OleDbConnection.GetOleDbSchemaTable 无法识别隐藏的工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39080970/

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