November
23rd,
2014
個人比較習慣使用python,但是最近要搞Rails的東西,先用python轉再透過其他方式似乎也不是很方便。姑且把相關的資訊一起找一找。由於個人需要parse的檔案是xls格式,先以讀取excel為主做測試。
python
python可使用xlutils
來處理xls,包含讀檔(xlrd),寫檔(xlwr)。新版的xlrd已經可以處理xlsx的檔案了。另外openpyxl
似乎也可以處理xlsx的檔案。這次測試主要使用xlrd來讀取excel檔。
首先是library:
import xlrd
讀取檔案:
book = xlrd.open_workbook('/path/to/foo.xls')
利用index存取某個sheet的某個row,第一個sheet的index是0,第一個row的index是0:
sheet = book.sheet_by_index(0)
print sheet.row(0)
sheet及row的個數:
print book.nsheets
print sheet.nrows
讀取第3個row第2個element:
print sheet.cell_value(2, 1)
透過index讀取第3個row開始的所有的row:
for idx in range(2, sheet.nrows - 1):
print sheet.row(idx)
利用sheet的name來iterate所有的sheet:
for name in book.sheet_names():
worksheet = book.sheet_by_name(name)
print worksheet
利用sheet的index來iterate所有的sheet:
for idx in range(0, book.nsheets - 1):
worksheet = book.sheet_by_index(idx)
print worksheet
ruby
ruby中與excel相關的library可使用roo
,可讀寫csv, excel, excelx, openoffice/libreoffice等格式。似乎還可以處理格式及公式的部分。
首先是輸入library的部分,roo處理excel是透過spreadsheet gem:
require 'roo'
require 'spreadsheet'
讀取檔案:
xls = Roo::Spreadsheet.open("/path/to/foo.xls")
利用index存取某個sheet的某個row,留意roo中第一個sheet的index是0,第一個row的index是1:
sheet = xls.sheet(0)
p sheet.row(1)
最後一個row的index,可用來當作sheet裡row的個數:
p sheet.last_row
透過index讀取第3個row開始的所有的row:
(3..sheet.last_row).each do |idx|
p sheet.row(idx)
end
Parse所有的sheet:
xls.each_with_pagename do |name, sheet|
p name
p sheet.row(1)
end