2012-02-19 51 views
8

我想將我的數據speadsheet轉換爲JSON數組的數組。ODS文件到JSON

該網站做到這一點:http://www.shancarter.com/data_converter/index.html 我查看了源代碼。

但我想是一個宏/腳本/展期或以任何方式將程序到我的.ods檔案轉換成JSON文件:

像:

NAME VALUE COLOR DATE 
Alan 12 blue Sep. 25, 2009 
Shan 13 "green blue" Sep. 27, 2009 
John 45 orange Sep. 29, 2009 
Minna 27 teal Sep. 30, 2009 

要:

[ 
    ["Alan",12,"blue","Sep. 25, 2009"], 
    ["Shan",13,"green\tblue","Sep. 27, 2009"], 
    ["John",45,"orange","Sep. 29, 2009"], 
    ["Minna",27,"teal","Sep. 30, 2009"] 
] 
+0

你問這個嗎? http://stackoverflow.com/questions/4745024/spreadsheet-to-python-dictionary-conversion – 2012-02-19 22:14:11

+0

調查http://pypi.python.org/pypi/odfpy/0.9.4或http://pypi.python。 org/pypi/ezodf/0.2.1 – 2012-02-19 22:17:18

+0

我的解決方案:使用小python腳本將ODS轉換爲CSV並將CSV轉換爲JSON – damio 2012-02-20 18:14:23

回答

5

答案可能會再次遲到,但marcoconti83完全做到了:讀取一個ods文件並將它們返回爲二維數組。

https://github.com/marcoconti83/read-ods-with-odfpy/blob/master/ODSReader.py

一旦你在陣列中的數據,它並不難,讓他們進入一個JSON文件。以下是示例代碼:

import json 
from odftoarray import ODSReader # renamed the file to odftoarray.py 

r = ODSReader("your_file.ods") 
arrays = r.getSheet("your_data_sheet_name") 
json.dumps(arrays) 
3

這可能有點晚,但對於那些來看看並希望這樣做的人來說,最好將.ods文件保存爲幾乎所有電子表格程序可以執行的.csv文件。然後使用類似這樣把它轉換:

import csv 
import sys 
import json, os 


def convert(csv_filename, fieldnames): 
    print ("Opening CSV file: ",csv_filename) 
    f=open(csv_filename, 'r') 
    csv_reader = csv.DictReader(f,fieldnames) 
    json_filename = csv_filename.split(".")[0]+".json" 

    print ("Saving JSON to file: ",json_filename) 
    jsonf = open(json_filename,'w') 
    data = json.dumps([r for r in csv_reader]) 
    jsonf.write(data) 
    f.close() 
    jsonf.close() 


csvfile = ('path/to/the/csv/file.csv') 
field_names = [ 
       "a", 
       "list", 
       "of", 
       "fieldnames" 
      ] 

convert(csvfile, field_names) 

和尖端,CSV是相當人類可讀所以只是經過,並確保它保存在你想要的格式,然後運行該腳本將其轉換爲JSON。在JSONView這樣的JSON查看器中檢查出來,然後你應該很好走!

+0

自動將.ods轉換爲.csv的方法缺失,使其可用作答案 - 這可能適用於低.ods文件的數量(最多100個,也許1000個),但更多的時候它會變得非常刺激和耗時。 – 2016-02-06 10:31:13