以编程方式从Excel电子表格中提取数据

有没有一种简单的方法,使用一些常用的Unix脚本语言(Perl / Python / Ruby)或命令行工具,将Excel电子表格文件转换为CSV? 具体来说,这一个:

http://www.econ.yale.edu/~shiller/data/ie_data.xls

特别是电子表格的第三张(前两张是图表)。

有一个非常好的Perl库xls阅读: Spreadsheet :: ParseExcel 。

也许xlrd会做的工作(在Python中)

编辑:我真的应该学习阅读问题。 但是写csv不应该是个大问题,所以也许你可以真正使用它。

你可以在python中使用pyexcelerator 。

此代码(包含在pyexcelerator的examples文件夹中,名称为xls2csv.py )从电子表格中提取所有工作表,并将其输出为stdout为CSV格式。

你可以很容易地改变代码来做你想做的事情。

关于pyexcelerator的很酷的事情是,你也可以使用它来编写/创build excel xls文件,而不需要安装excel。

 #!/usr/bin/env python # -*- coding: windows-1251 -*- # Copyright (C) 2005 Kiseliov Roman __rev_id__ = """$Id: xls2csv.py,v 1.1 2005/05/19 09:27:42 rvk Exp $""" from pyExcelerator import * import sys me, args = sys.argv[0], sys.argv[1:] if args: for arg in args: print >>sys.stderr, 'extracting data from', arg for sheet_name, values in parse_xls(arg, 'cp1251'): # parse_xls(arg) -- default encoding matrix = [[]] print 'Sheet = "%s"' % sheet_name.encode('cp866', 'backslashreplace') print '----------------' for row_idx, col_idx in sorted(values.keys()): v = values[(row_idx, col_idx)] if isinstance(v, unicode): v = v.encode('cp866', 'backslashreplace') else: v = str(v) last_row, last_col = len(matrix), len(matrix[-1]) while last_row < row_idx: matrix.extend([[]]) last_row = len(matrix) while last_col < col_idx: matrix[-1].extend(['']) last_col = len(matrix[-1]) matrix[-1].extend([v]) for row in matrix: csv_row = ','.join(row) print csv_row else: print 'usage: %s (inputfile)+' % me 

对于ruby,电子表格gem是优秀的阅读写修改,… excell文件

https://github.com/zdavatz/spreadsheet

这是相当晚的游戏,但我想我会通过使用gem“roo”的Ruby添加另一个选项:

    要求'rubygems'
    要求'roo'

     my_excel_file = Excelx.new(“path / to / my_excel_file.xlsx”)
     my_excel_file.default_sheet = my_excel_file.sheets [2]
     my_excel_file.to_csv( “path/到/ my_excel_file.csv”)

在Ruby中,这里是我使用的代码:(需要优秀的parseexcel gem)需要'parseexcel'

 def excelGetSheet(worksheet) sheet=Array.new worksheet.each { |row| if row != nil # empty row? cells=Array.new j=0 row.each { |cell| cells << cell.to_s('latin1') unless cell == nil j=j+1 } sheet << cells end } return sheet end workbook = Spreadsheet::ParseExcel.parse("MyExcelFile.xls") sheet1 = excelGetSheet(workbook.worksheet(0)) puts sheet1.inspect 

对于python,有很多选项,请看这里 , 在这里和这里 。 请注意,最后一个选项仅适用于安装了Excel的Windows。

所有三种语言都有选项。 问题是 – 你最熟悉哪一个。 这是你应该使用的语言,当然。 如果你还不熟悉,这个应用程序并不是一个很好的语言select的例子。

意见PS:如果你不知道任何语言,只要学习Python和使用xlrd

我可能已经find了可以接受的答案:

xls2csv

但有兴趣听听还有其他的select,或者其他语言的工具。

有了pyexcel库,你可以这样做:

 >>> import pyexcel as p >>> data_sheet=p.get_sheet(file_name='/Users/jaska/Downloads/ie_data.xls', sheet_name='Data') >>> data_sheet.top_left() pyexcel sheet: +---------------------------------------------------------------------------------------------------------+---+---+---+------------+---+---+---+---+---+------------+---+---+---+---+---+---+ | | | | | | | | | | | | | | | | | | +---------------------------------------------------------------------------------------------------------+---+---+---+------------+---+---+---+---+---+------------+---+---+---+---+---+---+ | Stock Market Data Used in "Irrational Exuberance" Princeton University Press, 2000, 2005, 2015, updated | | | | | | | | | | Cyclically | | | | | | | +---------------------------------------------------------------------------------------------------------+---+---+---+------------+---+---+---+---+---+------------+---+---+---+---+---+---+ | Robert J. Shiller | | | | | | | | | | Adjusted | | | | | | | +---------------------------------------------------------------------------------------------------------+---+---+---+------------+---+---+---+---+---+------------+---+---+---+---+---+---+ | | | | | | | | | | | Price | | | | | | | +---------------------------------------------------------------------------------------------------------+---+---+---+------------+---+---+---+---+---+------------+---+---+---+---+---+---+ | | | | | Consumer | | | | | | Earnings | | | | | | | +---------------------------------------------------------------------------------------------------------+---+---+---+------------+---+---+---+---+---+------------+---+---+---+---+---+---+ >>> data_sheet.save_as('ie_data.csv') 

为了工作,您需要安装:

 $ pip install pyexcel $ pip install pyexcel-xls 

更重要的是,您可以安装pyexcel-cli ,并在一个命令行中获取您的csv数据:

 $ pyexcel transcode --sheet-name 'Data' /your/home/Downloads/ie_data.xls ie_data.csv