pandas 中的超链接(数据框到 Excel)

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

我正在尝试创建一个 Excel 文件,其中的 url 链接位于特定列中。 像这样

def fill_table(table):
    if elapsed_time > datetime.timedelta(minutes=args.mtime):
        table.loc[len(table)] = [hostname, int(trigger_id), description, eventStartDate, eventEndDate, elapsed_time, message, useralias, link]
...
writer = pd.ExcelWriter(args.output, engine='xlsxwriter')

我尝试在链接变量中使用excel超链接公式

link = '=HYPERLINK(\"{0}/tr_events.php?triggerid={1}&eventid={2}\"; \"{3}\")'.format(args.url, trigger_id,event['eventid'], event['name'])

但是打开文件时收到一条错误消息,并且“链接”列用零填充

python pandas xlsxwriter
3个回答
3
投票

公式中您可能需要逗号 (

,
) 而不是分号 (
;
)。这是因为 Excel 以美国式语法存储公式(请参阅 XlsxWriter 文档中的非美国 Excel 函数和语法)。

当我通过 XlsxWriter 运行您的公式时,我收到一条 Excel 警告,内容为“我们发现‘demo.xlsx’中的某些内容存在问题”,当我单击“是”恢复公式为零时,正如您所描述的那样。

将分号更改为逗号使程序可以在没有警告的情况下按预期运行:

import xlsxwriter

workbook = xlsxwriter.Workbook('demo.xlsx')
worksheet = workbook.add_worksheet()

link = '=HYPERLINK(\"{0}/tr_events.php?triggerid={1}&eventid={2}\", \"{3}\")'.format('www.foo.com', 'abc', 'def', 'event1')

worksheet.write('A1', link)

# Or with a hyperlink format.
url_format = workbook.get_default_url_format()
worksheet.write('A2', link, url_format)

workbook.close()

输出:


1
投票

使用 xlwt,它有一个公式模块,它将作为公式对象存储在数据框中。

然后您可以使用 df.to_excel 将其写入 excel 中,如下所示:

import xlwt
... # your other code here
link = '=HYPERLINK(\"{0}/tr_events.php?triggerid={1}&eventid={2}\"; \"{3}\")'.format(args.url, trigger_id,event['eventid'], event['name'])
excel_formatted = xlwt.Formula(link)

然后,当它传递到 Excel 时,它应该显示为传递的公式。我只用

LEN()
功能测试过它,但效果很好。


0
投票

如何通过 Pandas 编写超链接以实现空白/空值

帮手

def df_convert_to_url(df, column):
    df[column] = df[column].apply(df_apply_hyperlink, axis=1)


def df_apply_hyperlink(row_value):
    if pd.notnull(row_value) and row_value != '':
        return f'=HYPERLINK("{row_value}")'
    else:
        return row_value

用法

df = pd.DataFrame(data)
df_convert_to_url(df, "your_column1")
df_convert_to_url(df, "your_column2")
df.to_excel(excel_data, index=False)
© www.soinside.com 2019 - 2024. All rights reserved.