如何在保留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'
谢谢!
答案 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/
享受!