如何读取 ods 文档(例如 LibreOffice calc)并将其转换为 Julia 数据帧?
Posted
技术标签:
【中文标题】如何读取 ods 文档(例如 LibreOffice calc)并将其转换为 Julia 数据帧?【英文标题】:How to read an ods document (e.g. LibreOffice calc) and convert it in a Julia dataframe? 【发布时间】:2016-12-06 15:42:45 【问题描述】:如何在 Julia DataFrame 中从 ODS 电子表格(由 OpenOffice、LibreOffice 等使用)导入数据?
(这是一个社区维基问答)
【问题讨论】:
【参考方案1】:如果机器上安装了 python,则 Julia 可以非常直接地使用 ezodf 模块,使用 PyCall:
using PyCall
using DataFrames
@pyimport ezodf
doc = ezodf.opendoc("test.ods")
nsheets = length(doc[:sheets])
println("Spreadsheet contains $nsheets sheet(s).")
for sheet in doc[:sheets]
println("---------")
println(" Sheet name : $(sheet[:name])")
println("Size of Sheet : (rows=$(sheet[:nrows]()), cols=$(sheet[:ncols]()))")
end
# convert the first sheet to a dictionary
sheet = doc[:sheets][1]
df_dict = Dict()
col_index = Dict()
for (i, row) in enumerate(sheet[:rows]())
# row is a list of cells
# assume the header is on the first row
if i == 1
# columns as lists in a dictionary
[df_dict[cell[:value]] = [] for cell in row]
# create index for the column headers
[col_index[j]=cell[:value] for (j, cell) in enumerate(row)]
continue
end
for (j, cell) in enumerate(row)
# use header instead of column index
append!(df_dict[col_index[j]],cell[:value])
end
end
# and convert the dictionary to a DataFrame
df = DataFrame(df_dict)
(这只是 Julia 对 davidovitch 的 python 代码on this answer的重写)
编辑:
我现在确实根据这段代码编写了一个 Julia 包:OdsIO。
它提供了几个从 ods 文件(包括单元格范围)导入数据的功能,希望很快它也允许导出。
编辑2:
从 v0.1.0 版本开始支持导出到 Ods
【讨论】:
以上是关于如何读取 ods 文档(例如 LibreOffice calc)并将其转换为 Julia 数据帧?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 ODFDOM 设置 ods 电子表格的页面大小、页面方向和页边距?
如何在 Eclipse 中开发 LibreOffice 扩展?
使用 ActiveXObject (JavaScript) 读取 Excel 或 OpenOffice (.ods) 文件