如何在Python中将Excel表格另存为HTML?

7

我正在使用这个库XlsxWriter

我已经打开了一个工作簿并在里面写了一些东西(考虑官方示例) -

import xlsxwriter

# Create a workbook and add a worksheet.
workbook = xlsxwriter.Workbook('Expenses01.xlsx')
worksheet = workbook.add_worksheet()

# Some data we want to write to the worksheet.
expenses = (
    ['Rent', 1000],
    ['Gas',   100],
    ['Food',  300],
    ['Gym',    50],
)

# Start from the first cell. Rows and columns are zero indexed.
row = 0
col = 0

# Iterate over the data and write it out row by row.
for item, cost in (expenses):
    worksheet.write(row, col,     item)
    worksheet.write(row, col + 1, cost)
    row += 1

# Write a total using a formula.
worksheet.write(row, 0, 'Total')
worksheet.write(row, 1, '=SUM(B1:B4)')

workbook.close()

我已经认真阅读了文档,但似乎找不到“另存为”功能。
是否有一种(任何一种)方法将工作簿保存为HTML文件?
如果无法从Python代码中实现,那么我是否可以编写VBA代码并从Python调用该代码?

1
如果你想要生成HTML,为什么要将表格数据写在Excel中呢?为什么不直接使用表格数据生成HTML呢? - VIKASH JAISWAL
@VIKASHJAISWAL 因为我已经花费了相当于6个月的时间来生成我的项目的Excel表格。重新从头开始做可能会涉及到不必要的努力。 - ComputerFellow
4个回答

4
您可以直接从Python保存为HTML,然后附加到电子邮件中:
from win32com.client.gencache import EnsureDispatch
from win32com.client import constants

yourExcelFile = ...
newFileName = ...

xl = EnsureDispatch('Excel.Application')
wb = xl.Workbooks.Open(yourExcelFile)
wb.SaveAs(newFileName, constants.xlHtml)
xl.Workbooks.Close()
xl.Quit()
del xl

这个部分工作正常,我已成功生成了HTML,但问题是:#1.电子邮件无法显示。#2.如何仅保存一个工作簿的第一张表格为HTML,而不是所有表格。 - Erik Johnsson

4
您可以使用win32com.client来调用VBA宏。假设您的文件名为Bar...。 VBA:
Sub SaveHTML()
ThisWorkbook.SaveAs Filename:="C:\Foo\Bar.htm", FileFormat:=xlHtml
End Sub

Python:

from win32com.client import Dispatch

xl = Dispatch('Excel.Application')
xl.Workbooks.Open('C:\Foo\Bar.xlsx')
#xl.Visible = True -- optional
xl.Application.Run("SaveHTML")
xl.Workbooks.Close

根据需要进行修改。

补充一下:使用win32com关闭Excel非常麻烦。工作簿会关闭,但应用程序本身会停留(请检查任务管理器)。请参考这篇SO文章中的解决方法。


2

1
链接已失效。 - CodeLikeBeaker

0
你也可以尝试使用xlsx2html库 https://pypi.org/project/xlsx2html/
import io
from xlsx2html import xlsx2html


xlsx_file = open('path/to/example.xlsx', 'rb')
out_file = io.StringIO()
xlsx2html(xlsx_file, out_file, locale='en')
out_file.seek(0)
result_html = out_file.read()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接