通过编程从Excel电子表格提取数据

7 投票
10 回答
18994 浏览
提问于 2025-04-15 13:26

有没有简单的方法,使用一些常见的Unix脚本语言(比如Perl、Python或Ruby)或者命令行工具,把Excel表格文件转换成CSV格式?具体来说,就是这个文件:

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

而且特别是这个表格的第三个工作表(前两个是图表)。

10 个回答

4

你可以在Python中使用pyexcelerator这个工具。

这段代码(在pyexcelerator的examples文件夹里,文件名是xls2csv.py)可以从电子表格中提取所有的工作表,并把它们输出为CSV格式,直接显示在屏幕上。

你可以很简单地修改这段代码,让它做你想要的事情。

pyexcelerator的一个很棒的地方是,你可以用它来写入/创建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
8

也许 xlrd 可以解决这个问题(在Python中)

补充:我真该学着认真读问题。不过,写csv文件应该不是什么大问题,所以你可能真的可以用它。

14

有一个非常不错的Perl库可以用来读取xls文件,叫做 Spreadsheet::ParseExcel

撰写回答