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

Posted

技术标签:

【中文标题】.xlsx 的 OleDbConnection.GetOleDbSchemaTable 无法识别隐藏的工作表【英文标题】:OleDbConnection.GetOleDbSchemaTable for .xlsx doesn't identify hidden worksheets 【发布时间】:2016-08-22 13:31:44 【问题描述】:

我正在使用 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>();
            

【问题讨论】:

我很困惑,您是否获得了隐藏的工作表,但您希望您的代码将它们标记为隐藏,或者您根本没有获得它们? 所有工作表都返回,但没有显示隐藏哪些工作表。 【参考方案1】:

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

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

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

步骤

    将 Microsoft Excel COM 引用添加到您的项目中

    将下面一行添加到您的应用程序中

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

    读取已加载工作表的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

【讨论】:

ً当您投反对票时,您必须在评论中证明以改善答案 @VSP,你怎么回答这个问题?

以上是关于.xlsx 的 OleDbConnection.GetOleDbSchemaTable 无法识别隐藏的工作表的主要内容,如果未能解决你的问题,请参考以下文章

安卓手机如何打开.xlsx;文件

R读取xlsx文件

电脑打不开xlsx文件怎么办

excel的后缀格式xls和xlsx区别?

xlsx文件怎么打开 Excel如何打开xlsx文件

vue2前端导出带背景色表格 xlsx xlsx-style