用于 Swift 的 Microsoft OLE2 格式支持,也称为结构化存储、复合文件二进制格式或复合文档文件格式。
一些使用该格式的文件类型
.docx
, Excel .xlsx
, PowerPoint .pptx
).doc
, Excel .xls
, PowerPoint .ppt
, Visio .vsd
, Project .mpp
)vbaProject.bin
.hwp
文件格式...等等。如果您知道任何基于 CFBF 的文件格式,请提交 拉取请求,以便将其添加到列表中。
自动生成的文档可在 我们的 GitHub Pages 上找到。
加入我们的 Discord,提出任何问题并进行友好交流。
OLE2 文件在其内部嵌入了一个 微型文件系统,在 OLEKit 中,该文件系统表示为一个 DirectoryEntry
值的树。
读取文件和文件中的条目
import OLEKit
。OLEFile(_ path: String)
创建一个新实例,并传入你的 OLE2 文件的路径。OLEFile
上的 root
属性(类型为 DirectoryEntry
)读取根目录条目,并使用 DirectoryEntry
上的 children
属性来遍历条目树。OLEFile
实例上调用 stream(_ entry:)
来访问该条目。 这将返回一个 DataReader
的实例,它提供了用于读取原始数据的辅助 read()
函数。import OLEKit
let filepath = "./categories.xlsx"
let entryName = "EncryptionInfo"
let ole = try OLEFile(filepath)
guard
let infoEntry = oleFile.root.children.first(where: { $0.name == entryName })
else { fatalError("entry \(entryName) not found in file \(filepath)") }
let stream = try oleFile.stream(infoEntry)
// Read version bytes from the encryption stream in little-endian order
let major: UInt16 = stream.read()
let minor: UInt16 = stream.read()
guard major == 4 && minor == 4
else { fatalError("unknown version: major \(major), minor \(minor)") }
// change position in the `stream`
reader.seek(toOffset: 8)
// get the rest of the data
let rawStreamData = reader.readDataToEnd()
您可以参考 CryptoOffice 库的源代码 以获得更详细的示例。
Apple 平台
Linux
Swift Package Manager 是一种用于管理 Swift 代码分发的工具。 它与 Swift 构建系统集成在一起,可自动执行下载、编译和链接所有平台上依赖项的过程。
设置好 Swift 包后,将 OLEKit
添加为依赖项就像将其添加到 Package.swift
的 dependencies
值一样简单。
dependencies: [
.package(
url: "https://github.com/CoreOffice/OLEKit.git",
.upToNextMinor(from: "0.2.0")
)
]
如果您在 Xcode 构建的应用程序中使用 OLEKit,您也可以 使用 Xcode 的 GUI 将其添加为直接依赖项。
本项目使用 SwiftFormat 和 SwiftLint 来强制执行格式和编码风格。 我们鼓励您在本地代码仓库的副本中以最适合您的方式运行 SwiftFormat,无论是手动还是通过 Xcode 扩展、构建阶段 或 git pre-commit hook 等自动运行。
为了保证这些工具在您提交 macOS 上的更改之前运行,我们鼓励您运行此命令一次来设置 pre-commit 钩子。
brew bundle # installs SwiftLint, SwiftFormat and pre-commit
pre-commit install # installs pre-commit hook to run checks before you commit
有关其他平台的更多详细信息和安装说明,请参阅 pre-commit 文档页面。
SwiftFormat 和 SwiftLint 也在 CI 上为每个 PR 运行,因此 CI 构建可能会因为不一致的格式或样式而失败。 我们要求 CI 构建通过所有 PR 后才能合并。
本项目遵守 贡献者公约行为准则。 参与本项目,您需要遵守此准则。 请将不可接受的行为报告给 coreoffice@desiatov.com。
OLEKit 基于 Apache License, Version 2.0 协议 (the "License") 发布;除非您遵守此协议,否则您不得使用本库。 详情请参阅 LICENSE 文件。
除非适用法律要求或书面同意,否则按此协议发布的软件按"现状"分发,不提供任何形式的明示或暗示的保证或条件。 请参阅许可协议,了解关于权限和限制的具体条款。
OLEKit 基于 olefile 库的代码,该库使用 FreeBSD 风格的许可证,请查看 LICENSE-olefile 了解详情。