Гиперссылка в пандах (датафрейм, чтобы превзойти) - PullRequest
0 голосов
/ 04 июня 2019

Я пытаюсь создать файл Excel с URL-ссылкой в ​​определенном столбце. Как это

Table with lionk

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'])

Но я получаю сообщение об ошибке, когда открываю файл и столбец "ссылка" заполняется нулями

Ответы [ 2 ]

2 голосов
/ 04 июня 2019

Возможно, вам нужна запятая (,) вместо точки с запятой (;) в формуле. Это связано с тем, что Excel хранит формулы в синтаксисе в американском стиле (см. Функции, отличные от US Excel, и синтаксис в документации XlsxWriter).

Когда я запускаю вашу формулу через 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()

Выход:

enter image description here

1 голос
/ 04 июня 2019

Используйте xlwt, у которого есть модуль формулы, который будет хранить как объект формулы в вашем фрейме данных.

Затем вы можете написать это, чтобы преуспеть с пандами, используя df.to_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)

Тогда, когда это передано, чтобы превзойти, это должно появиться как формула того, что прошло.Я тестировал его только с помощью функции LEN(), но он работал нормально.

...