2016-12-06 5 views

ответ

4

Если питон установлен на машине, 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) 

(это просто переписывание в Джулии питона кода Давидович в on this answer)

EDIT:

Теперь я написал на основе этого кода пакет Julia: OdsIO.

Он предоставляет несколько функций для импорта данных из файлов ods (включая диапазон ячеек), и, надеюсь, скоро это также позволит экспортировать.

EDIT2:

Экспорт в ODS теперь поддерживается начиная с версии v0.1.0