xls到csv转换器

Lal*_*tar 47 python csv excel xls export-to-csv

我在python中使用win32.client将.xlsx和.xls文件转换为.csv.当我执行此代码时,它会给出错误.我的代码是:

def convertXLS2CSV(aFile):
    '''converts a MS Excel file to csv w/ the same name in the same directory'''

    print "------ beginning to convert XLS to CSV ------"

    try:
        import win32com.client, os
        from win32com.client import constants as c
        excel = win32com.client.Dispatch('Excel.Application')

        fileDir, fileName = os.path.split(aFile)
        nameOnly = os.path.splitext(fileName)
        newName = nameOnly[0] + ".csv"
        outCSV = os.path.join(fileDir, newName)
        workbook = excel.Workbooks.Open(aFile)
        workbook.SaveAs(outCSV, c.xlCSVMSDOS) # 24 represents xlCSVMSDOS
        workbook.Close(False)
        excel.Quit()
        del excel

        print "...Converted " + nameOnly + " to CSV"
    except:
        print ">>>>>>> FAILED to convert " + aFile + " to CSV!"

convertXLS2CSV("G:\\hello.xlsx")
Run Code Online (Sandbox Code Playgroud)

我无法在此代码中找到错误.请帮忙.

Ben*_*hes 62

我会使用xlrd - 它更快,跨平台并直接与文件一起工作.有一点需要注意 - 它不适用于xlsx文件 - 所以你必须将你的Excel文件保存为xls. 编辑:从0.8.0版开始,xlrd读取XLS和XLSX文件.

 import xlrd
 import csv

 def csv_from_excel():

    wb = xlrd.open_workbook('your_workbook.xls')
    sh = wb.sheet_by_name('Sheet1')
    your_csv_file = open('your_csv_file.csv', 'wb')
    wr = csv.writer(your_csv_file, quoting=csv.QUOTE_ALL)

    for rownum in xrange(sh.nrows):
        wr.writerow(sh.row_values(rownum))

    your_csv_file.close()
Run Code Online (Sandbox Code Playgroud)

  • 注意:此方法不会保留某些数字的Excel格式.整数格式的数值将以十进制形式写入(例如2 - > 2.0),整数格式的公式也将以十进制形式写入(例如= A1/B2显示为1但输出为0.9912319),以及前导的文本零格式化的数值将被剥离(例如"007" - >"7.0").祝您在秘密特工数据库中查询邦德先生!如果幸运的话,这些问题会在明显的失败中出现.如果你不幸运,他们可以默默地毒害你的数据. (12认同)
  • 如果您不知道工作表的名称(即它不是`Sheet1`),那么您可以使用`wb.sheet_by_index(0)`来获取第一个工作表,无论其名称如何. (3认同)
  • 对于 python 3:使用 `your_csv_file = open(xls_path, 'w')` (不是 'wb')。csv 模块以文本模式而不是字节模式接受输入。否则,你会得到:`TypeError: a bytes-like object is required, not 'str'` (3认同)
  • 不应该是`wr.writerow(sh.row_values(rownum))`?见[here](https://secure.simplistix.co.uk/svn/xlrd/trunk/xlrd/doc/xlrd.html#sheet.Sheet.row_values-method). (2认同)
  • 它是否支持从xls datmode到正常日期时间的日期时间转换 (2认同)
  • 有什么建议可以代替吗,@Stew? (2认同)

phi*_*ilE 47

我会用pandas.计算量很大的部分是用cython或c-extension编写的,以加快进程,语法非常干净.例如,如果你想从文件"your_workbook.xls"到文件"your_csv.csv"转"工作表Sheet1",你只需要使用顶级函数read_excel和方法to_csvDataFrame类,如下所示:

import pandas as pd
data_xls = pd.read_excel('your_workbook.xls', 'Sheet1', index_col=None)
data_xls.to_csv('your_csv.csv', encoding='utf-8')
Run Code Online (Sandbox Code Playgroud)

设置encoding='utf-8'缓解了UnicodeEncodeError其他答案中提到的内容.

  • 如果行中有一些其他语言的文本,它就不起作用。它显示???在文本中 (2认同)
  • @philE这太慢了。使用xlsx2csv (2认同)

and*_*abs 35

也许有人发现这个随时可用的代码片段很有用.它允许从Excel工作簿中的所有电子表格创建CSV.

在此输入图像描述

# -*- coding: utf-8 -*-
import xlrd
import csv
from os import sys

def csv_from_excel(excel_file):
    workbook = xlrd.open_workbook(excel_file)
    all_worksheets = workbook.sheet_names()
    for worksheet_name in all_worksheets:
        worksheet = workbook.sheet_by_name(worksheet_name)
        with open(u'{}.csv'.format(worksheet_name), 'wb') as your_csv_file:
            wr = csv.writer(your_csv_file, quoting=csv.QUOTE_ALL)
            for rownum in xrange(worksheet.nrows):
                wr.writerow([unicode(entry).encode("utf-8") for entry in worksheet.row_values(rownum)])

if __name__ == "__main__":
    csv_from_excel(sys.argv[1])
Run Code Online (Sandbox Code Playgroud)


小智 21

我使用csvkit,它使用xlrd(用于xls)和openpyxl(用于xlsx)将几乎任何表格数据转换为csv.

安装后,依赖于它,这是一个问题:

python in2csv myfile > myoutput.csv
Run Code Online (Sandbox Code Playgroud)

它会处理所有格式检测问题,因此您可以将其传递给任何表格数据源.它也是跨平台的(没有win32依赖).


Ash*_*007 5

首先将您的 Excel 电子表格读入 Pandas,下面的代码会将您的 Excel 电子表格作为 OrderedDict 类型导入 Pandas,其中包含您的所有工作表作为数据框。然后只需使用 worksheet_name 作为键来访问特定工作表作为数据框,并使用 df.to_csv() 仅将所需工作表保存为 csv 文件。希望这会在你的情况下锻炼。

import pandas as pd
df = pd.read_excel('YourExcel.xlsx', sheet_name=None)
df['worksheet_name'].to_csv('YourCsv.csv')  
Run Code Online (Sandbox Code Playgroud)

如果您的 Excel 文件只包含一张工作表,那么只需使用以下代码:

import pandas as pd
df = pd.read_excel('YourExcel.xlsx')
df.to_csv('YourCsv.csv') 
Run Code Online (Sandbox Code Playgroud)

如果有人想将所有 excel 工作表从单个 excel 工作簿转换为不同的 csv 文件,请尝试以下代码:

import pandas as pd
def excelTOcsv(filename):
    df = pd.read_excel(filename, sheet_name=None)  
    for key, value in df.items(): 
        return df[key].to_csv('%s.csv' %key)
Run Code Online (Sandbox Code Playgroud)

此功能可用作多个 csv 文件转换器的同一 excel 工作簿的多个 Excel 工作表。其中键是工作表名称,值是工作表内的内容。