К сожалению, это ошибка.
Это ошибка в 2012 году. ..
Некоторая связанная тема:
Извлечение гиперссылок из Excel (.xlsx) с помощью Python
Некоторые детали моего эксперимента с гиперссылкой. Я использую OpenPyXL 2.3.3
.
- Я могу добавлять гиперссылки в ячейки.
from openpyxl import load_workbook
xlsFile='hello.xlsx'
wbook = load_workbook(xlsFile)
wsheet1= wbook.get_sheet_by_name('mysheet')
cell1 = wsheet1.cell('A1')
cell1.hyperlink = r'http://www.example.com'
cell1.value=r'XXX'
wbook.save(xlsFile)
Но я не могу загрузить файл XLSX и прочитать гиперссылку, как сказано в моем вопросе.
И если я просто загружу и повторно сохраню файл XLSX, ВСЕ существующие гиперссылки будут потеряны. Ага!
from openpyxl import load_workbook
xlsFile='hello.xlsx'
wbook = load_workbook(xlsFile)
wbook.save(xlsFile)
Обходной путь!
Используйте формулу с OpenPyXL.
Моя цель - append clickable cells to existing XLSX file
. Так как hyperlink
не работает. Вместо этого я использую формулу =HYPERLINK(url, displayText)
. И, к счастью, формула не теряется, как в предыдущем эксперименте 3.
from openpyxl import load_workbook
xlsFile='hello.xlsx'
wbook = load_workbook(xlsFile)
wsheet1= wbook.get_sheet_by_name('mysheet')
cell1 = wsheet1.cell('A2')
cell1.value=r'=HYPERLINK("http://www.example.com","XXX")'
wbook.save(xlsFile)
Другие (неудачные) варианты, которые я пробовал:
Я просмотрел XlsxWriter. Но он явно говорит не может изменить существующий файл XLSX. Поэтому его нельзя использовать для добавления.
Я также просмотрел xlrd/xlwt/xlutils
, к сожалению, если вы хотите отредактировать существующий Excel, вам нужно использовать xlrd, чтобы загрузить его как книгу только для чтения, а затем использовать xlutils, чтобы преобразовать (скопировать) ее в книгу с возможностью записи. И БАХ! во время копирования что-то будет потеряно, включая формулу HYPERLINK
. Согласно строке документа, это известное ограничение:
# Copyright (c) 2009-2012 Simplistix Ltd
#
# This Software is released under the MIT License:
# http://www.opensource.org/licenses/mit-license.html
# See license.txt for more details.
from xlutils.filter import process,XLRDReader,XLWTWriter
def copy(wb):
"""
Copy an :class:`xlrd.Book` into an :class:`xlwt.Workbook` preserving as much
information from the source object as possible.
See the :doc:`copy` documentation for an example.
"""
w = XLWTWriter()
process(
XLRDReader(wb,'unknown.xls'),
w
)
return w.output[0][1]
Кроме того, xlwt не поддерживает XLSX, поддерживает только XLS. Это еще одна причина, по которой я решил не использовать его.
person
smwikipedia
schedule
23.01.2016