如何使用 OLEDB 在 Excel 中获取仅包含 Excel 工作表名称的列表;过滤掉元数据中显示的非工作表

2023-11-23

我在使用 OLEDB 从 Excel 电子表格获取工作表名称时遇到问题。问题是,当我使用 GetOleDbSchemaTable 时,生成的 DataTable 不仅仅包含实际的工作表名称;还包含实际的工作表名称。它有额外的“表格”行,我只能假设这些行是由 Excel 内部使用的。

例如,如果我有一个名为 myWorksheet 的工作表,下面的代码可能会得到一个包含 myWorksheet$、myWorksheet$PrintTable 和 myWorksheet$_ 的列表。只有第一个 myWorksheet$ 记录适用于实际工作表。其他的都是垃圾,我不需要。当您在元数据中查看它们时,它们看起来就像常规表一样,即使是 TABLE 类型。

目前,我只是手动过滤掉名称中带有“$_”或“$Print”的任何内容,但谁知道 Excel 的其他功能可能会使这些额外的记录以不同的格式显示。

有谁知道仅获取实际工作表名称而不获取这些不是工作表的内部表的最佳方法?元数据中有什么东西可以区分它们吗?

 private ArrayList getXlsWorksheetNames(OleDb.OleDbConnection conn)
    {
        ArrayList wsList = new ArrayList();
        DataTable schemaTable;

        try
        {
            conn.Open();
            schemaTable = conn.GetOleDbSchemaTable(OleDb.OleDbSchemaGuid.Tables, null);

            foreach (DataRow row in schemaTable.Rows)
            {
                //form.appendToResultsTxt("Adding worksheet to list: " + Environment.NewLine +
                //    "Name = " + row.Field<string>("TABLE_NAME") + "," + Environment.NewLine +
                //    "Type = " + row.Field<string>("TABLE_TYPE") + "," + Environment.NewLine + Environment.NewLine);
                wsList.Add(row.Field<string>("TABLE_NAME"));
            }
            conn.Close();
        }
        catch (Exception ex)
        {
            if (this.mode == Cps2TxtUtilModes.GUI_MODE)
            {
                this.form.appendToResultsTxt(ex.ToString());
            }
            throw;
        }

        return wsList;
    }

我通读了此链接上的文章,但他们似乎没有做任何与我不同的事情,而且我没有看到任何额外的非工作表表格的过滤,因此微软似乎没有提供正确答案。

http://support.microsoft.com/kb/318452

我还查看了很多 StackOverflow,例如下面链接中的线程,这很有帮助,但没有解决这一问题。

使用 Excel OleDb 按工作表顺序获取工作表名称

在有人问之前,我还想说,我实际上无法控制电子表格中使用的功能,因此我不能只是告诉他们“不要打开过滤”或“不要使用打印表”。

任何想法都非常感激。谢谢!


这个问题很老了,但是对于那些现在找到它的人来说,可以像吉姆发现的那样跳过......

// skip those that do not end correctly
foreach (DataRow row in schemTable.Rows)
{
    string sheetName = row["TABLE_NAME"].ToString();
    if (!sheetName.EndsWith("$") && !sheetName.EndsWith("$'"))
        continue;
    Console.WriteLine(sheetName);
}

这是想要的或以以下结尾的$或那些以$'.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 OLEDB 在 Excel 中获取仅包含 Excel 工作表名称的列表;过滤掉元数据中显示的非工作表 的相关文章

  • 通过 CMIS (dotCMIS) 连接到 SP2010:异常未经授权

    我正在使用 dotCMIS 并且想要简单连接到我的 SP2010 服务器 我尝试用 C 来做到这一点 如下所示http chemistry apache org dotnet getting started with dotcmis htm
  • “构建”构建我的项目,“构建解决方案”则不构建

    我刚刚开始使用VS2010 我有一个较大的解决方案 已从 VS2008 成功迁移 我已将一个名为 Test 的控制台应用程序项目添加到解决方案中 选择构建 gt 构建解决方案不编译新项目 选择构建 gt 构建测试确实构建了项目 在失败的情况
  • 为什么两个不同的 Base64 字符串的转换会返回相等的字节数组?

    我想知道为什么从 base64 字符串转换会为不同的字符串返回相同的字节数组 const string s1 dg const string s2 dq byte a1 Convert FromBase64String s1 byte a2
  • 从Web API同步调用外部api

    我需要从我的 Web API 2 控制器调用外部 api 类似于此处的要求 使用 HttpClient 从 Web API 操作调用外部 HTTP 服务 https stackoverflow com questions 13222998
  • OleDbDataAdapter 未填充所有行

    嘿 我正在使用 DataAdapter 读取 Excel 文件并用该数据填充数据表 这是我的查询和连接字符串 private string Query SELECT FROM Sheet1 private string ConnectStr
  • 如何从 appsettings.json 文件中的对象数组读取值

    我的 appsettings json 文件 StudentBirthdays Anne 01 11 2000 Peter 29 07 2001 Jane 15 10 2001 John Not Mentioned 我有一个单独的配置类 p
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • while 循环中的 scanf

    在这段代码中 scanf只工作一次 我究竟做错了什么 include
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 垃圾收集器是否在单独的进程中运行?

    垃圾收集器是否在单独的进程中启动 例如 如果我们尝试测量某段代码所花费的进程时间 并且在此期间垃圾收集器开始收集 它会在新进程上启动还是在同一进程中启动 它的工作原理如下吗 Code Process 1 gt Garbage Collect
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • 通过指向其基址的指针删除 POD 对象是否安全?

    事实上 我正在考虑那些微不足道的可破坏物体 而不仅仅是POD http en wikipedia org wiki Plain old data structure 我不确定 POD 是否可以有基类 当我读到这个解释时is triviall
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • 测试用例执行完成后,无论是否通过,如何将测试用例结果保存在变量中?

    我正在使用 NUNIT 在 Visual Studio 中使用 Selenium WebDriver 测试用例的代码是 我想在执行测试用例后立即在变量中记录测试用例通过或失败的情况 我怎样才能实现这一点 NUnit 假设您使用 NUnit
  • 使用 XMLHTTP 进行抓取会在特定类名处引发错误

    我正在尝试使用此代码抓取网站以提取姓名和联系人 Sub Test Dim htmlDoc As Object Dim htmlDoc2 As Object Dim elem As Variant Dim tag As Variant Dim
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低

随机推荐

  • Python:导入模块导入模块

    所以在文件 foo 中我导入模块 import lib helper functions import lib config 在 helper functions py 中 我有 import config 当我运行 foo 的 main
  • Jmeter中的吞吐量计算

    Attached is the Summary Report for my tests 请帮我理解JMeter的吞吐量值是如何计算的 例如第一条线路的吞吐量53 1 min 这个数字是JMeter用什么公式计算出来的 另外 想知道后续测试中
  • 我如何通过 Objective-c 访问 iPhone 文件?

    我注意到有一些软件 例如 iExplorer 可以让您从 Mac 访问 iPhone 设备上的文件 现在我的问题是 如何通过 Objective c 访问 iPhone 文件 这仅用于教育目的 我找到了这个 https github com
  • 如何知道应用程序运行在什么 Mac 操作系统上?

    我在一些项目中看到过类似的东西 if code endif 但我现在找不到了 例如 如果应用程序在 10 8 上运行 则该应用程序会执行 1 件事 否则该应用程序会执行其他操作 编写什么代码来检查它是否在 10 8 上运行 Thanks 你
  • Mod重写问题

    和其他许多人一样 我在 apache 中进行一些非常简单的 mod rewriting 时遇到了问题 我的 htaccess 中有以下内容 Options FollowSymLinks RewriteEngine on RewriteBas
  • 如何将 Rust 内存分配器用于可提供分配器的 C 库?

    我正在编写与 C 库的 Rust 绑定 该库可以选择使用第三方内存分配器 它的界面如下所示 struct allocator void alloc void old uint void free void 我猜 相应的 Rust 结构如下
  • 当 MKMapView 显示UserLocation == YES 时隐藏 MKUserLocation

    设置后mapView showsUserLocation为 true 是否可以在不显示 MKUserLocation 气泡的情况下接收位置更新 返回零mapView viewForAnnotation 只是显示气泡 返回任何其他类型的注释会
  • 选择的图库默认项目位于中心[重复]

    这个问题在这里已经有答案了 可能的重复 android图库图像位置问题 我在我的应用程序中使用图库视图 现在当我运行代码时 图库默认选择的项目为 1 位于中心 左侧为空白 相反 我不希望左侧有 1 项被选中 此外 单击任何图库项目不应将该项
  • std::unique_ptr 的“无抛出取消引用”

    我用 C 编写代码 使用std unique ptr u处理一个std string资源 我想取消引用u这样我就可以通过std string的电话std string复制构造函数 std string copy new std string
  • Android:列表视图中的指南针+距离

    我想你们都尝试过地图中的 Google Places 这是您附近的 POI 列表 我真的很想在我的应用程序中使用 GPS 坐标列表来实现相同的功能 但这看起来非常复杂 制作带有距离和小箭头的列表视图非常容易 但我不明白如何在用户每次移动手机
  • 我的内部 API 类应该全部放在一个包中吗?

    我正在努力打包供公众使用的 API 因此 我试图限制仅向那些我希望公开且可支持的方法公开的方法 当然 在此之下还有许多受限的访问方法 问题是我有很多内部代码需要访问这些受限制的方法而不将这些方法公开 这会产生两个问题 我无法创建接口 类之间
  • 将声音帧从 8Khz 重新采样/上采样到 48Khz (Java/Android)

    我正在尝试为andriod开发的应用程序 以48Khz PCM 16位和单声道 记录帧并将它们发送到网络 此外 还有 8Khz 的传入音频流 因此 我接收 8Khz 采样帧并播放它们 我的 AudioTrack 对象设置为 8Khz 但是在
  • 在 C++ 中重写成员变量

    我在一些 C 代码中遇到了一些棘手的问题 这最容易使用代码来描述 我有类似的课程 class MyVarBase class MyVar public MyVarBase int Foo class MyBase public MyBase
  • 如何允许 std:string 参数为 NULL?

    我有一个函数foo const std string str 如果你使用它调用它它会崩溃foo NULL 我该怎么做才能防止它崩溃 std string 有一个采用 const char 参数的构造函数 当您将 NULL 传递给它时 该构造
  • C++ 使变量类型取决于用户输入

    我想要一个创建数组用于测试目的的函数 这个想法是让用户选择数组将包含的元素类型 int float double 然后它必须返回所选类型的数组并且main必须将其用作参数 我知道这是使用空指针 但如果有人能为我提供一个例子 我会很高兴 这就
  • 从 python 创建“经济学人”风格的图表

    使用 python 和 marplotlib 以及像seaborn这样的工具 我想创建一个像 经济学人 中的这样的图表 因为我认为这种风格很棒 这是一个时间序列图 我想要重现的关键是水平网格线 其标签与带有刻度线的较低水平轴相匹配 网格线两
  • MongoDB:无法连接到新的副本集主服务器

    尝试为我的 Node JS 应用程序设置 MongoDB 我运行这个命令 mongo mongodb srv cluster0 gjc2u mongodb net test username
  • 更改实例方法内的类实例

    知道是否有办法使以下代码正常工作 class Test object def init self var self var var def changeme self self Test 3 t Test 1 assert t var 1
  • 如何在不知道其名称的情况下删除 SQL 默认约束?

    在 Microsoft SQL Server 中 我知道检查列是否存在默认约束并删除默认约束的查询是 IF EXISTS SELECT FROM sysconstraints WHERE id OBJECT ID SomeTable AND
  • 如何使用 OLEDB 在 Excel 中获取仅包含 Excel 工作表名称的列表;过滤掉元数据中显示的非工作表

    我在使用 OLEDB 从 Excel 电子表格获取工作表名称时遇到问题 问题是 当我使用 GetOleDbSchemaTable 时 生成的 DataTable 不仅仅包含实际的工作表名称 还包含实际的工作表名称 它有额外的 表格 行 我只