了解二进制 xls 文件格式

2023-12-25

我试图在不使用任何 xls 库的情况下读取 xls 文件的内容,但这样做时遇到问题。

我正在尝试使用我找到的信息here http://msdn.microsoft.com/en-us/library/gg615597.aspx。它有一些关于如何读取文件的分步说明。 也用这个xls 文件规范 http://download.microsoft.com/download/0/B/E/0BE8BDD7-E5E8-422A-ABFD-4342ED7AD886/Excel97-2007BinaryFileFormat%28xls%29Specification.pdf.

我不确定我是否正确执行了这一步:

3、打开工作簿流并扫描 BOF 记录的第一个实例。这是 Globals 子流的开始。

根据文件规范或此页面记录编号列表 http://msdn.microsoft.com/en-us/library/dd908813%28v=office.12%29.aspx,我应该寻找 2057(0809h),但整个文件在任何地方都不包含该记录(在尝试查找它时也使用十六进制编辑器)。 但后来我读到了规范第 20 页的这一部分:

字节交换 Excel BIFF 文件可跨网络传输 MS-DOS/Windows 和 Apple Macintosh 操作系统等。到 支持可传输性,Excel 写入 BIFF 文件,其中低位 该字的字节首先出现在文件中,然后是高位 字节。

如果我理解正确(不确定我是否理解),则使用单词的大端序,那么我要查找的实际上是 2312(0908h)。这给人的印象是正确的,因为它很早就在我尝试的每个文件中找到了。

然后进入下一步:

4、读取Globals子流,将BoundSheet8记录和SST加载到内存中。有关更多详细信息,请参阅全局。

我寻找 133(8500h),在 BOF 之后不久就找到了,很好。但问题在于接下来的两个步骤:

5、从与要打开的子流对应的BoundSheet8记录中读取前4个字节,其中包含lbPlyPos FilePointer。 6, 转到 lbPlyPos FilePointer 指定的流中的偏移量。这是工作表的 BOF 记录。

所以接下来的 4 个字节是一个指针,指向我应该去的文件中的位置。但是以任何顺序读取这些字节都会得到一个比整个文件大的数字。而且,这部分让我感到困惑:“这是工作表的 BOF 记录。”这不是我在前面的步骤中发现的吗?唔...

抱歉我的胡言乱语。我希望我说得有道理,并且有人愿意帮助我一点。

Update:好吧,我对此已经有了进一步的了解。这让我很困惑,但似乎每个记录也被读取为“大端”,即记录中的最后一个变量是文件中最早定位的变量。虽然我不知道它是否适用于可变长度的值?所以,看着this http://msdn.microsoft.com/en-us/library/dd773237%28v=office.12%29.aspx,可变长度的值被列为记录中的最后一个。但显然它们不能作为文件中的第一个,因为如果该信息在它后面,则无法知道要读入多少字节? 无论如何,如果我忽略这个值,并跳过 dt 和 A/unused 的 2 个字节,并将接下来的 4 个字节作为 uint 读取,在我的例子中,结果为 1130。将其添加到第一个 BOF 的 pos 中即可得到纸张 BOF 的确切位置。这不可能是巧合,对吧?

现在下一个问题出现了。 BOF 记录之后应该立即跟随索引记录。但无论我以何种方式读取字节,它仍然没有意义...... 它看起来是这样的:

09 08 10 00 00 06 10 00 BB 0D CC 07 00 00 00 00 06 00 00 00 00 02 0E 00 00 00 00 00 1E 00 00 00 00 00 12 00 00 00 3E 02 12 00 B6 06 00 00 00 00 40 00 00 00 00 00 00 00 00 00 00 00 7D 00 0C 00 00 00 00 00 DD 06 0F 00 00 00 00 00 7D 00 0C 00 02 00 02 00 DD 06 0F 00 00 00 00 00 7D 00 0C 00 04 00 04 等等...

前 2 个字节是 BOF 记录 09 08,或 0809 被交换,即 2057(代表 BOF),所以其余的应该是INDEX http://msdn.microsoft.com/en-us/library/dd907627.aspx但没有意义...如果有人能帮助我解决这个问题,我将不胜感激。


关于BOF记录,我可以告诉你它指的是文件开始,并且位于excel文件包含的每个子流的开始处。鉴于您通常有 3 个工作表,所有工作表都有 VBA 代码表,并且工作簿有一个代码表,您正在查看 8 个 BOF 记录。

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

了解二进制 xls 文件格式 的相关文章

  • 无法在我的抓取工具中设置超时选项以防止无限循环

    我已经使用 IE 在 vba 中编写了一个脚本 在其搜索框中的网页中启动搜索 通过点击搜索按钮根据搜索填充结果 网页加载它是searchbox几秒钟后它就会打开 但是 我的下面的脚本可以处理这个障碍并以正确的方式执行搜索 现在 我有一个稍微
  • 如何使用 Nodejs 创建 Excel 文件?

    我是一名 Nodejs 程序员 现在我有一个数据表 我想将其保存为 Excel 文件格式 我该怎么做呢 我找到了一些 Node 库 但其中大多数是 Excel 解析器而不是 Excel 编写器 我使用的是 Linux 服务器 因此需要一些可
  • 导出到excel时如何显示前导零?

    我正在通过更改内容类型来创建 Excel 报告 Response ContentType application vnd ms excel 我有包含前导零的值 问题是导出到 Excel 时缺少前导零 e g 000123 gt 123 我知
  • 在合并的单元格中选择、插入照片并将其居中

    我是一名研发面包师 正在为我的团队制作食谱模板 模板中有照片 但我需要轻松地允许他们单击一个按钮 打开照片的文件选择器 然后将该照片放在合并的单元格中 我其实不太擅长做这个 Sub InsertPhotoMacro Dim photoNam
  • VBA 完成 Internet 表单

    我正在寻找将 Excel 中的值放入网页的代码 Sub FillInternetForm Dim IE As Object Set IE CreateObject InternetExplorer Application IE naviga
  • 将包含宏的工作簿复制到不带宏的工作簿

    我能够复制工作簿 复制到所需位置 其中在后台包含宏 该副本还包含相同的宏 我的问题是我不希望这个重复的工作簿包含宏 谁能告诉怎么做吗 先感谢您 将您的工作簿保存为无宏 即简单地保存为 Excel 工作簿 对于我的 Excel 2007 这是
  • VBA ByRef 参数类型不匹配

    最初在我的主代码部分中 我有一个丑陋的 if 语句 尽管它会运行丑陋 我决定将其设为我要调用的函数 这导致我收到错误 编译错误 ByRef 参数类型不匹配 我的假设是该函数需要正确引用 尽管我一直在阅读文档并且不明白为什么 gt 声明 Sh
  • 使用 OpenPyXL 迭代工作表和单元格,并使用包含的字符串更新单元格[重复]

    这个问题在这里已经有答案了 我想使用 OpenPyXL 来搜索工作簿 但我遇到了一些问题 希望有人可以帮助解决 以下是一些障碍 待办事项 我的工作表和单元格数量未知 我想搜索工作簿并将工作表名称放入数组中 我想循环遍历每个数组项并搜索包含特
  • 我如何以更好的方式编码而不是像这样的VBA编码

    我正在 Excel 中创建一个仪表板 但是我想知道是否有比这更好的编码方式 我想对其进行模块化 而不是这样做以使其更加整洁 Private Sub Afford If af Value True Then af afr Value Shee
  • 在 Excel 中使用 VBA 设置图像透明度

    有没有办法使用 VBA 脚本对图像应用一些透明度 我录制了一个 宏 但似乎没有录制艺术效果 我已经找到了如何制作形状 但没有找到图像 这需要几个步骤 将自选图形 如矩形 放置在工作表上 使用以下方法将您的实际图片嵌入矩形中 ShapeRan
  • 如何在 Excel 中对“高”字符进行 HTML 编码或音译?

    在 Excel 中 如何将包含重音字符 大引号等的单元格内容转换为相同字符的 HTML 或音译纯文本版本 我们有一个 XLS 文档 其中包含一些 高 字符 数据已通过数据库连接提取 并且 Excel 似乎正确处理不同代码页中的各个单元格 或
  • 根据列值突出显示数据框中的行?

    假设我有这样的数据框 col1 col2 col3 col4 0 A A 1 pass 2 1 A A 2 pass 4 2 A A 1 fail 4 3 A A 1 fail 5 4 A A 1 pass 3 5 A A 2 fail 2
  • 使用 VBScript 在日期字段值上选择错误的数据

    我有一张包含以下数据的表 现在 Excel 共有 36 个任务 每个任务有 4 列 第一个任务 即 Task1 名称将始终从 L 列开始 144 列描述了 36 个任务 现在我们需要按行进行检查 并需要检查 TNStart 开始日期 你们能
  • 在工作表中合并行和求和值

    我有一个 Excel 工作表 其中包含以下数据 管道 来分隔列 A B C X 50 60 D E F X 40 30 A B C X 10 20 A B C Y 20 20 A B C X 20 70 D E F X 10 50 A B
  • 在Excel VBA中将图像(jpg)转换为base64?

    我需要在 Excel 中转换图像 或通过VBA 转为base64 最后我将进行XML输出 我怎样才能做到这一点 我需要引用 DOM 吗 我一直在读书这个问题 https stackoverflow com questions 169907
  • 比较 EXCEL 中的列本身以检查其是否有重复值

    假设我有一个名为项目代码的列 如下所示 row code 1 A123 2 B123 n A123 代码列中的值可能出现多次 如何使用Excel公式或Excel中的任何方法检查列中的重复记录 Thanks 根据您使用的 Excel 版本 您
  • 索引行和列意外结果

    我试图理解以下行为 如果我有以下数据 A B a 1 b 2 c 3 如果我使用 INDEX A 1 B 3 它将正确显示整个范围 如果我使用 INDEX A 1 B 3 1 它将正确显示两列第一行的数据 如果我使用 INDEX A 1 B
  • Pandas.read_excel 有时会错误地将布尔值读取为 1/0

    我需要将一个非常大的 Excel 文件读入 DataFrame 中 该文件包含字符串 整数 浮点和布尔数据 以及丢失的数据和完全空的行 还值得注意的是 某些单元格值源自单元格公式和 或 VBA 尽管理论上这不会影响任何内容 正如标题所示 p
  • 使用 LAMBDA 在 Excel 中生成所有排列

    这是一个经常被问到和回答的问题 如何在 Excel 中生成所有排列 2011 https stackoverflow com questions 5724373 permutations in excel 2016 https stacko
  • 在 Python 中从 Excel 复制 YEARFRAC() 函数

    因此 我使用 python 来自动执行一些必须在 Excel 中执行的重复任务 我需要做的计算之一需要使用yearfrac 这在Python中被复制了吗 I found this https lists oasis open org arc

随机推荐

  • 本地主机 - 您的浏览器已阻止或不支持 Cookie [关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 我刚刚在我的本地主机上设置了这个多站点 WordPress 它由一个域 local example com 和 2 个子域 local
  • 引用第 3 方程序集的最佳实践

    我一直想知道引用第 3 方程序集时的最佳实践是什么 前段时间我问了一个问题 依赖关系和引用 我到底应该引用什么 https stackoverflow com questions 268214 dependencies and refere
  • @Entity 不同数据库上表之间的关系

    我是 Java Enterprise 和 JPA 的新手 使用 Netbeans 的 EclipseLink JPA 2 0 我试图实现不同项目和包中不同 Entity 类之间的链接 但没有成功 数据库 D1 具有表 T1 和引用数据库 D
  • 为什么这个函数会占用大量内存?

    我正在尝试将 1 4 亿位的二进制向量解压到列表中 我正在检查这个函数的内存使用情况 但看起来很奇怪 内存使用量上升至 35GB GB 而不是 MB 如何减少内存使用 sub bin2list This sub translates a b
  • signal() 覆盖其他信号处理程序

    是否signal 函数会覆盖进程可能设置的其他信号调用吗 IE 如果一个SIGINT处理程序已由进程设置 并且 DLL 调用signal SIGINT xxx 处理自己的终止代码 原来的SIGINT处理程序被禁用 The signal ca
  • 时间戳和计算滑动速度

    嘿 我知道已经有一些关于此的帖子 但我仍然找不到针对我遇到的问题的充分答案 我刚刚接触 cocoa 和 iOS 正在开发我的第一个 iOS 游戏 在这个游戏中 我希望能够计算用户滑动的速度 我可以轻松找到滑动动作中连续触摸之间的距离 但很难
  • 如何在 Eclipse 中针对特定文件禁用编译器警告? [复制]

    这个问题在这里已经有答案了 在我的 Eclipse 项目中 有一些生成的 java 文件 我需要将它们用于 SQLJ 并且我无法移动到单独的项目 由于管理开销 这些文件也会定期重新生成 因此不幸的是无法编辑它们 不幸的是 这些文件生成了数百
  • 是否有记录的 Android 版本接收安全更新的生命周期?

    Android 版本是否有官方生命周期来说明每月哪些版本会收到安全补丁 如果你看最新安全公告 https source android com security bulletin 2020 09 01看来 8 0 仍在接收补丁 但我想知道这
  • 具有嵌套条件行为的奇怪工具栏

    我遇到了一个非常奇怪的问题 如果你有一个很深的链ViewBuilder和 if 语句以及工具栏 工具栏中的某些项目是重复的 这是一张图片来说明我的意思 注意 2 个 按我 按钮 重现 注意 我使用的是 macOS Monterey Beta
  • 我的网站上需要有图标吗?如何消除我在 apache 日志中看到的错误?

    我不断在我的 apache 日志中看到 favicon 警告 我该如何摆脱这些 我的网站必须有图标吗 favicon ico是浏览器黑暗时代的产物之一 cca 2000 虽然无法阻止浏览器请求 但创建名为 favicon ico 的 0 字
  • 使用 ng-if 作为 ng-repeat 内部的开关?

    我正在开发 Angular 应用程序 我尝试使用 ng if 并在里面切换NG 重复但没有成功 我有这样的数据 id 52fb84fac6b93c152d8b4569 post id 52fb84fac6b93c152d8b4567 use
  • 在核心 MVC 中是否有任何充分的理由不使用 ViewComponent 而不是 Partial View?

    我是 MVC 新手 决定从 net core 开始 所以我对 core 与旧版本的差异不太了解 我确实找到了下面的问题 它提供了一些见解 但并没有帮助我决定是否可以基本上忽略部分视图 为什么我们应该使用 MVC 6 功能视图组件而不是部分视
  • Silverlight 中的 FrameworkPropertyMetadataOptions

    Silverlight 5 中是否有与 FrameworkPropertyMetadataOptions 等效的工具 我希望能够从我的用户控件强制进行双向绑定 如下所示 public static readonly DependencyPr
  • 从一个列表创建两个随机列表

    我想获取一个包含大约 12 个对象的字符串列表 并将其拆分为两个字符串列表 但将其完全随机化 列表示例 List 1 EXAMPLE 1 EXAMPLE 2 EXAMPLE 3 EXAMPLE 4 EXAMPLE 5 EXAMPLE 6 E
  • 使用 C 语言的套接字编程,使用 select() 函数

    根据我得到的答案这个线程 https stackoverflow com q 3366808 我创建了这个 Server sock init from SFL see http legacy imatix com html sfl time
  • 以编程方式在支持 bean 中创建并添加复合组件

    我正在使用动态仪表板 用户可以根据需要固定和删除项目 现在我有一个问题 我想将现有的复合组件从支持 bean 添加到视图中 我试图从互联网上找到正确的方法来做到这一点 但到目前为止还没有成功 这是我要添加的简单复合组件
  • 在我的 React 应用程序中访问 heroku 配置变量

    我在我的 Heroku 应用程序中定义了一个配置变量 BASE URL 我试图在我的 React 应用程序中访问它 process env BASE URL 但当我 console log 它时 它给了我未定义的信息 因为它似乎不存在 如何
  • Android Studio 更新到 2.0 后冻结

    我刚刚将 Android Studio 从 1 4 更新到 2 0 启动时它在启动屏幕上冻结 是否可以修复它或者我必须重新下载它 这很奇怪 我的 MAC Ubuntu 和 Windows 10 也已更新到 2 0 到目前为止 我没有感觉到任
  • 在bash中,如何将返回值存储在变量中?

    我知道 Linux 中的一些非常基本的命令 并且正在尝试编写一些脚本 我编写了一个函数 用于计算 5 位数字中最后 2 位数字的总和 该函数应将所得总和连接在最后 2 位数字之间并返回它 我想返回这个值的原因是因为我将在另一个函数中使用这个
  • 了解二进制 xls 文件格式

    我试图在不使用任何 xls 库的情况下读取 xls 文件的内容 但这样做时遇到问题 我正在尝试使用我找到的信息here http msdn microsoft com en us library gg615597 aspx 它有一些关于如何