Vladimir_KZ
@Vladimir_KZ
Student

Как отформатировать ячейки с гиперссылками?

Экспортирую данные в таблицу Excel.
Но никак не получается отформатировать ячейки с гиперссылками.
В чем может быть дело?

import pandas as pd

sheet_name = 'sheet 1'
width_list = [5, 25, 25, 15, 25, 30, 20]
data_list = [{
    '#': 1,
    'Наименование': 'Тестовая страница 1',
    'Ссылка': 'https://test0000-link.ru/test-00001.html',
    'Автор': 'Автор 1',
    'Описание': 'Тестовое задание. Тестовое задание 1',
    'Примечание': '-',
    'E-Mail': 'не указан',
},
    {
    '#': 2,
    'Наименование': 'Тестовая страница 2',
    'Ссылка': 'https://test0000-link.ru/test-00002.html',
    'Автор': 'Автор 2',
    'Описание': 'Тестовое задание. Тестовое задание 2',
    'Примечание': '-',
    'E-Mail': 'не указан',
}
]

df_ = pd.DataFrame(data_list)
writer = pd.ExcelWriter('test.xlsx')
workbook = writer.book

header_format = workbook.add_format({  # type: ignore
    'bold': True,
    'text_wrap': True,
    'valign': 'top',
    'align': 'center',
    'fg_color': '#D7E4BC',
    'border': 1})

table_format = workbook.add_format({  # type: ignore
    'valign': 'top',
    'text_wrap': True,
    'fg_color': '#E3DDDD'})

df_.to_excel(writer, sheet_name=sheet_name, index=False)
for col_num, value in enumerate(df_.columns.values):
    writer.sheets[sheet_name].write(0, col_num, value, header_format)

for i in range(7):
    writer.sheets[sheet_name].set_column(i, i, width_list[i], table_format)

writer.close()


64123974e252e103477565.jpeg
  • Вопрос задан
  • 189 просмотров
Пригласить эксперта
Ответы на вопрос 2
@StepsOnes
Для форматирования ячеек с гиперссылками в Excel необходимо использовать специальный формат ячеек. В вашем коде вы создаете формат таблицы в переменной `table_format`, но этот формат не содержит опций для гиперссылок.

Для создания формата ячеек с гиперссылками можно использовать следующий код:

link_format = workbook.add_format({  # type: ignore
    'font_color': 'blue',
    'underline': 1,
    'valign': 'top',
    'text_wrap': True,
})


Затем, при записи данных в таблицу, можно указать этот формат для столбца с гиперссылками:

writer.sheets[sheet_name].set_column('C:C', None, link_format)


Эта строка кода устанавливает формат `link_format` для столбца "Ссылка" (столбец "C").

В итоге, обновленный код будет выглядеть так:

import pandas as pd

sheet_name = 'sheet 1'
width_list = [5, 25, 25, 15, 25, 30, 20]
data_list = [{
    '#': 1,
    'Наименование': 'Тестовая страница 1',
    'Ссылка': 'https://test0000-link.ru/test-00001.html',
    'Автор': 'Автор 1',
    'Описание': 'Тестовое задание. Тестовое задание 1',
    'Примечание': '-',
    'E-Mail': 'не указан',
},
    {
    '#': 2,
    'Наименование': 'Тестовая страница 2',
    'Ссылка': 'https://test0000-link.ru/test-00002.html',
    'Автор': 'Автор 2',
    'Описание': 'Тестовое задание. Тестовое задание 2',
    'Примечание': '-',
    'E-Mail': 'не указан',
}
]

df_ = pd.DataFrame(data_list)
writer = pd.ExcelWriter('test.xlsx')
workbook = writer.book

header_format = workbook.add_format({  # type: ignore
    'bold': True,
    'text_wrap': True,
    'valign': 'top',
    'align': 'center',
    'fg_color': '#D7E4BC',
    'border': 1})

table_format = workbook.add_format({  # type: ignore
    'valign': 'top',
    'text_wrap': True,
    'fg_color': '#E3DDDD'})

link_format = workbook.add_format({  # type: ignore
    'font_color': 'blue',
    'underline': 1,
    'valign': 'top',
    'text_wrap': True,
})

df_.to_excel(writer, sheet_name=sheet_name, index=False)
for col_num, value in enumerate(df_.columns.values):
    writer.sheets[sheet_name].write(0, col_num, value, header_format)

for i in range(7):
    writer.sheets[sheet_name].set_column(i, i, width_list[i], table_format)

writer.sheets[sheet_name].set_column('C:C', None, link_format)

writer.close()
Ответ написан
Vladimir_KZ
@Vladimir_KZ Автор вопроса
Student
Видимо, без openpyxl не обойтись
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы