Python转换(读取和保存)excel xlsx到xls

时间:2016-06-23 14:01:02

标签: python excel xls xlsx

如何在保留Excel文件格式的同时将现有的xlsx Excel文件转换为xls?我使用的是Anaconda Python 3,所以我不确定我是否可以使用xlutils ...我无法通过conda install xlutils安装它,因为它存在很多不兼容性。所以现在我使用这个代码没有xlutils.copy()

import xlrd, xlwt

wb = xlrd.open_workbook(my_xlsx_excel_file)
# wb = xlutils.copy(wb)
wb.save(my_xlsx_excel_file[:-1])

我收到了这个错误:

AttributeError: 'Book' object has no attribute 'save'

谢谢!

3 个答案:

答案 0 :(得分:2)

首先要做的事情:为什么要转换为.xls?这通常表明您在过程中的某个地方使用过时的工具,使用较新的工具而不是将数据转换为旧格式可能会更好。

但是,如果你真的需要在保留格式的同时转换为.xls,那么你现在唯一可行的选择就是使用Excel本身。您没有说出您正在使用哪个平台,但如果它是Windows或Mac,并且您安装了Excel,那么自动化Excel的最简单方法可能是xlwings原则上这将允许您使用Python在Excel中打开.xlsx文件(一个实际的,正在运行的Microsoft Excel实例)并执行"另存为"到.xls文件。

我说"原则上"因为我个人不知道如何在xlwings中做到这一点。 (我并不真正使用该软件包。)在幕后,xlwings依赖于Windows上的pywin32和Mac上的appscript,因此您可以直接使用这些较低级别的软件包。

例如,如果您使用的是Windows,则可以执行以下操作:

from win32com.client import Dispatch

xl = Dispatch('Excel.Application')
wb = xl.Workbooks.Add(my_xlsx_excel_file)
wb.SaveAs(my_xlsx_excel_file[:-1], FileFormat=56)
xl.Quit()

56是magic constant,表示Excel 97-2003格式(适用于Windows)。

当然,应该有相应的方法在带有appscript的Mac上执行此操作。请注意文件格式常量may be different而不是Windows。

答案 1 :(得分:0)

另一种解决方案是使用 subprocess 通过 powershell 运行 Excel。这具有不使用特定于 Windows 的库的优点,因此也可以在 WSL 上工作。

import subprocess
import textwrap
import os

xlsx = 'data.xlsx'
ps = 'script.ps1'

with open(ps, 'w') as f:
    f.write(textwrap.dedent('''\
        param ($File)
        $myDir = split-path -parent $MyInvocation.MyCommand.Path
        $excelFile = "$myDir\\" + $File
        $Excel = New-Object -ComObject Excel.Application
        $wb = $Excel.Workbooks.Open($excelFile)
        $out = "$myDir\\" + (Get-Item ("$myDir\\" + $File) ).Basename + ".xls"
        $wb.SaveAs($out, 56)
        $Excel.Quit()        
    '''))
p = subprocess.Popen(["powershell.exe", '.\\'+ps, xlsx])
p.communicate()
os.remove(ps)

答案 2 :(得分:-1)

您可以尝试使用openpyxl,然后通过 conda install openpyxl 进行安装 它应该与python3.5 *一起使用 然后,以下代码可能会起作用

import openpyxl as xl
wb = xl.load_workbook("yourfile.xlsx")
wb.save("file.xls")

您可以从openpyxl文档中了解更多信息,https://openpyxl.readthedocs.io/en/default/

享受!