You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Python更新Confluence表格并在指定列附加文件?

解决Confluence表格自动更新及附件添加问题

一、修复表格更新失败的问题

你遇到的Object of type DataFrame is not JSON serializable错误,是因为conf.update_page需要的是Confluence支持的XHTML格式内容,而非直接传入DataFrame。正确的做法是把修改后的DataFrame转成符合Confluence样式的HTML,再替换页面中原有的表格内容(而非覆盖整个页面),步骤如下:

1. 依赖准备

先安装HTML解析库:

pip install beautifulsoup4

2. 完整更新表格代码

from atlassian import Confluence
import pandas as pd
from bs4 import BeautifulSoup

# 配置信息
conf_site = 'https://confluence.company.com/'
conf_user = "login"
conf_pass = "password"
page_id = 0000000000

# 初始化Confluence客户端
conf = Confluence(url=conf_site, username=conf_user, password=conf_pass)

# 获取页面原始存储内容(必须用body.storage,而非view,这是可编辑的原始格式)
page = conf.get_page_by_id(page_id, expand='body.storage')
page_storage = page['body']['storage']['value']
page_title = page['title']

# 解析页面HTML,定位目标表格
soup = BeautifulSoup(page_storage, 'html.parser')
target_table = soup.find('table', class_='confluenceTable')  # Confluence表格默认带这个类

# 读取原有表格为DataFrame,执行你的新增行操作
table = pd.read_html(str(target_table))[0]
# 示例:新增一行数据(替换成你的实际逻辑)
table.loc[len(table)] = ["新增内容1", "新增内容2", "", ""]  # 最后一列留空,后续插入附件链接

# 将修改后的DataFrame转为Confluence格式的HTML表格
new_table_html = table.to_html(
    classes='confluenceTable',  # 保留Confluence表格样式
    index=False,  # 不显示DataFrame索引
    border=0  # 去掉默认边框,匹配Confluence样式
)

# 替换页面中的旧表格
target_table.replace_with(BeautifulSoup(new_table_html, 'html.parser'))
new_page_content = str(soup)

# 更新Confluence页面
conf.update_page(page_id=page_id, title=page_title, body=new_page_content)

二、实现表格最后一列添加附件

附件需要先上传到Confluence页面,再把附件的下载链接插入到表格对应单元格中,流程如下:

1. 上传附件并获取链接

# 上传目标文件
file_path = '/path/to/your/target/file.pdf'
file_display_name = '月度报告.pdf'  # 在Confluence显示的文件名

# 上传附件到指定页面,overwrite=True表示覆盖同名文件
attachment_info = conf.attach_file(
    file_path,
    name=file_display_name,
    page_id=page_id,
    overwrite=True
)

# 构造附件的直接下载链接
attachment_url = f"{conf_site}download/attachments/{page_id}/{file_display_name}?api=v2"

2. 将链接插入表格并更新页面

在你新增行之后,把链接插入到最后一行的最后一列:

# 假设表格最后一列的列名为"附件",或者直接用索引定位
table.iloc[-1, -1] = f"<a href='{attachment_url}'>{file_display_name}</a>"

# 后续重复表格替换和页面更新的步骤(即前面代码中生成new_table_html到update_page的部分)

注意事项

  • 必须使用body.storage获取页面内容:body.view是渲染后的展示用HTML,无法用于编辑更新
  • 表格定位要准确:如果页面有多个表格,需要调整find方法的参数(比如通过id或其他属性)来定位目标表格
  • 链接格式用HTML的<a>标签:Confluence存储内容支持标准HTML标签,这样插入的链接可以直接在页面中点击

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 18:35:28