You need to enable JavaScript to run this app. Python使用xlsxwriter导出GPG公钥到Excel时出现写入错位、内容拆分异常
优惠活动
大模型
产品
解决方案
定价
更多

Python使用xlsxwriter导出GPG公钥到Excel时出现写入错位、内容拆分异常

异常根本原因

核心是对xlsxwriter的write_row方法参数逻辑的误用,叠加可迭代对象的特性触发了内容错位,和你观察到的所有现象完全匹配:

  • 公钥ID被逐字符拆分写入相邻单元格:keyid本身是字符串类型,当你把单个字符串作为第三个参数传给write_row时,方法会把传入的可迭代对象逐元素拆解写入。字符串是逐字符的可迭代序列,自然会把整个公钥ID的每个字符依次写到从当前列开始的相邻单元格里,形成拆字符的错位效果。
  • 第一列只显示过期epoch值的开头数字“1”:python-gnupg在部分场景下会把expires的epoch时间返回为字符串类型。当你调用write_row写入这个字符串时,本来会从A列开始逐字符写入整个epoch的所有数字;但紧接着的内层循环会在B列、C列等位置执行新的写入操作,把之前逐字符写到B、C及更靠后位置的数字全部覆盖,最后A列就只剩最开头的第一个字符“1”。
  • 第二列UID显示正常:key["uids"]本身是列表类型,当你把这个列表传给write_row时,方法只会把列表里的单个UID元素写入当前的B列单元格——因为这个列表只有1个元素,不会继续向右拆分覆盖其他列,所以这一列的显示效果符合预期。

补充说明write_row的设计逻辑:这个方法的初衷是一次性写入一整行的连续单元格,第三个参数需要传入整行所有单元格值组成的序列,方法会自动从指定的起始列开始,把序列里的每个元素依次填入对应列的单元格,不会对单个单元格的值做迭代拆分。你的代码里错误地把每一个单独的单元格值,反复传给write_row作为待写入的序列,才触发了所有错位问题。

修正方案

两种改法都可以解决问题:

  1. 利用write_row本来的设计用途,去掉多余的内层循环。你已经提前把每一行的内容组装成了列表,直接把整行的列表传给write_row即可:
    for row_num, row_data in enumerate(datalist):
        # 从第0列开始,把整行数据依次写入单元格
        worksheet.write_row(row_num, 0, row_data)
    
  2. 如果要保留逐单元格写入的逻辑,就把误用的write_row换成专门写单个单元格的write方法:
    for row_num, row_data in enumerate(datalist):
        for col_num, col_data in enumerate(row_data):
            worksheet.write(row_num, col_num, col_data)
    

内容的提问来源于stack exchange,提问作者illbeinmyoffice

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.10 04:24:00