将 Google 表格转换为带格式的 PDF 文件

问题描述 投票:0回答:1

我一直在尝试将 Google 表格转换为 PDF 文件。 (这是输入的 Google Sheets。)我浏览了互联网并开始使用 gspread 库将 Google Sheets 转换为 HTML,并使用 pdfkit 将其转换为 PDF。下面的脚本有效,但正如预期的那样,工作表的所有格式数据(包括合并的单元格)都会丢失。

import gspread
import pdfkit

wkhtmltopdf = r"wkhtmltopdf.exe"
config = pdfkit.configuration(wkhtmltopdf=wkhtmltopdf)

gc = gspread.service_account()
sh = gc.open("Test")
sheet = sh.sheet1.get_all_values()

table = ""
for row in sheet:
    table += "<tr>"
    for data in row:
        table += f"<td>{data}</td>"
    table += "</tr>"

html = f'''
<html>
    <body>
    <table>
        {table}
    </table>
    </body>
</html>
'''

pdfkit.from_string(html, "test.pdf", configuration=config)

this就是结果。 我希望合并的单元格保持合并状态,并且格式应保留。从 gspread 文档中,我没有找到任何函数来了解哪些单元格被合并,或返回格式。

编辑:

正如@LimeHusky提到的,我可以使用

colspan
标签来合并单元格,但我关心的是区分正常单元格和合并单元格,以及如果合并,合并到什么程度(合并的单元格数量)。 其他格式也一样。

为了澄清起见,这就是变量

sheet
返回的内容。

[['ID00001', '', '', '', ''],
['', '', '', '', ''],
['Merged', '', '', '', ''],
['1', 'A', '10', '11', '70'],
['2', 'B', '20', '22', '80'],
['3', 'C', '30', '33', '70'],
['4', 'D', '40', '44', '90'],
['5', 'E', '50', '55', '70'],
['6', 'F', '60', '66', '100']]

任何解决问题的解决方案将不胜感激。

此外,我并不是专门要求使用 HTML 的解决方案。我只需要将 Google Sheet 转换为具有所有格式的 PDF 文件,并控制要渲染的行和不渲染的行。

python google-sheets pdf-generation google-sheets-api
1个回答
0
投票

使用枚举的 Python For 循环

我尝试修改你的Python代码并添加条件colspan和css文本对齐。

修改后的代码:

sheet = [
    ['ID00001', '', '', '', ''],
    ['', '', '', '', ''],
    ['Merged', '', '', '', ''],
    ['1', 'A', '10', '11', '70'],
    ['2', 'B', '20', '22', '80'],
    ['3', 'C', '30', '33', '70'],
    ['4', 'D', '40', '44', '90'],
    ['5', 'E', '50', '55', '70'],
    ['6', 'F', '60', '66', '100']
]

table = ""
for rowIndex, row in enumerate(sheet):
    table += "<tr>"
    for data in row:
        if rowIndex == 0 or rowIndex == 2:  # Check for the ID and Merged rows
            if data:  # Only add the data if it's not empty
                table += f"<td colspan='5' style='text-align: center;'>{data}</td>"
                break  
        elif data == "":  # Skip empty cells
            continue
        else:
            table += f"<td>{data}</td>"
    table += "</tr>"

html = f'''
<html>
    <body>
    <table border="1">
        {table}
    </table>
    </body>
</html>
'''

print(html)

示例输出:

Sample 1

参考:

© www.soinside.com 2019 - 2024. All rights reserved.