簡體   English   中英

以編程方式從Excel電子表格中提取數據

[英]Programmatically extract data from an Excel spreadsheet

是否有一種簡單的方法,使用一些常見的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 )從電子表格中提取所有工作表,並將它們作為CSV輸出到stdout

您可以輕松地更改代碼以執行所需的操作。

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

對於ruby,電子表格gem非常適合讀取,寫入,修改.... excell文件

https://github.com/zdavatz/spreadsheet

這對游戲來說已經很晚了,但是我想我會使用gem“ roo”通過Ruby添加另一個選項:

require 'rubygems'
    require '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/to/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

我可能已經找到了可接受的答案:

xls2csv

但是有興趣了解還有哪些其他選擇,或者想知道其他語言的工具。

對於python,有很多選項,請參見此處此處此處 請注意,最后一個選項僅在安裝了Excel的Windows上有效。

所有三種語言都有選項。 問題是-您最熟悉哪一個。 當然,這是您應該使用的語言。 而且,如果您都不熟悉這兩種語言,那么該應用程序並不是一個很好的示例。

PS:如果您不懂任何一種語言,只需學習Python並使用xlrd

使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM