基本的电子表格格式 - 行、列、标题 - 已经被普通的计算机用户广泛理解。有很多电子表格程序,它们都提供了高级的数据编辑功能,甚至还有其他程序可以将它们自己的数据导出为表格。这些情况使得电子表格成为某些类型数据交换的理想格式,但并非总是有现成的工具可以将数据转换回结构化对象。该软件包的目的是帮助访问和转换所需的值。
这个软件包并不打算处理非常大的表格,或者以最大速度或最小内存成本来处理它们,它也不进行转换本身。 相反,它专注于促进普通用户和开发人员之间的数据共享,让前者以熟悉的格式生成数据,后者可以轻松地从中提取相关部分,并具有一定的容错性。
通过 CoreXLSX 支持读取 XLSX 文件。 可能会在某个时候添加 CSV 支持。
标题在行中,单个数据列
Data:
+-------+-------+
| Name | Alice |
| Age | 27 |
+-------+-------+
let person = Person(
name: try table.at(row:"name").text(),
age: try table.at(row:"age").int()
)
创建一个按姓氏分组的人员映射
Data:
+-------------+------------+-----+
| First name | Last name | Age |
+-------------+------------+-----+
| Alice | Goldsmith | 27 |
| Bob | Cooper | 31 |
| Concha | Delorean | 60 |
| Zoe | Cooper | 36 |
+-------------+------------+-----+
let personsByLastName = try table.enumerateRows().reduce(into: [String:[Person]]()) { map, row in
let lastName = try table.at(col:"last name", row).text()
let person = try Person(
firstName: table.at(col:"first name", row).text(),
lastName: lastName,
age: table.at(col:"age", row).int()
)
var list = map[lastName] ?? []
list.append(person)
map[lastName] = list
}
将相关列加载到数组/二维数组中
Data:
+-------------+-----------------+-----------------+-----------------+-----------------+------------+-----------+
| Guest | Main Course 1.1 | Main Course 1.2 | Main Course 2.1 | Main Course 2.2 | Dessert 1 | Dessert 2 |
+-------------+-----------------+-----------------+-----------------+-----------------+------------+-----------+
| Alice | Veal | Mutton | Tuna | Bass | Porridge | Mousse |
| Bob | Beef | Pork | Salmon | Trout | Cheesecake | Custard |
+-------------+-----------------+-----------------+-----------------+-----------------+------------+-----------+
struct Choices {
let guest: String
let mains: [[String]]
let dessert: [String]
}
let choices = try table.enumerateRows().map { row in Choices(
guest: try table.at(col:"guest", row).text(),
mains: try table.array2(col:"main course", row).map { $0.map { try $0.text() }},
dessert: try table.array(col:"main course", row).map { try $0.text() }
)}
除非另有说明,否则此软件包中的所有文件均是 NOTICE
文件中提到的软件包贡献者的版权所有,并根据 Apache 2.0 许可证 获得许可,该许可证允许商业用途。