gpt4 book ai didi

excel - 了解二进制 xls 文件格式

转载 作者:行者123 更新时间:2023-12-02 08:50:41 24 4
gpt4 key购买 nike

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

我正在尝试使用我找到的信息 here 。它有一些关于如何读取文件的分步说明。还用这个xls-file-specification .

我不确定我是否正确执行了此步骤:

3, Open the Workbook stream and scan for the first instance of a BOF record. This is the beginning of the Globals substream.

根据文件规范或此页面带有 list of the record-numbers ,我应该寻找 2057(0809h),但整个文件在任何地方都不包含该记录(在尝试查找它时也使用十六进制编辑器)。但后来我读到了规范第 20 页的这一部分:

Byte Swapping Excel BIFF files are transportable across the MS-DOS/Windows and Apple Macintosh operating systems, among others. To support transportability, Excel writes BIFF files where the low-order byte of the word appears first in the file, followed by the highorder byte.

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

然后进入下一步:

4, Read the Globals substream, loading the BoundSheet8 records and the SST into memory. For more details, see Globals.

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

5, From the BoundSheet8 record that corresponds to the substream you want to open, read the first 4 bytes, which contains the lbPlyPos FilePointer. 6, Go to the offset in the stream specified by the lbPlyPos FilePointer. This is the BOF record for the worksheet.

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

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

更新:好吧,我对此已经有了进一步的了解。这让我很困惑,但似乎每个记录也被读取为“大端”,即记录中的最后一个变量是文件中最早定位的变量。虽然我不知道它是否适用于可变长度的值?所以,看看 this ,可变长度的值被列为记录中的最后一个。但显然它们不能作为文件中的第一个出现,因为如果该信息出现在它后面,则无法知道要读入多少字节?不管怎样,如果我忽略这个值,并跳过 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 etc...

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

最佳答案

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

关于excel - 了解二进制 xls 文件格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9748469/

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