#python #excel #openpyxl
Вопрос:
Я пытаюсь создавать таблицы в Excel с помощью библиотеки Openpyxl, но мне трудно понять, почему мой фрагмент кода нарушает правила.
import openpyxl
from openpyxl.utils import get_column_letter
from openpyxl.worksheet.table import Table, TableStyleInfo
def find_table(title, sheet_name, table_title):
title_row = None
global numCols
for row in pws_sheet.iter_rows():
if row[0].value == title: #Finds the title row
title_row = row[0].row 1
if row[0].value is None and title_row: #Checks if there is a blank row
end_row = row[0].row - 1
#Gets length of furthest column
numCols = len([cell.value for cell in pws_sheet[title_row 1] if cell.value is not None])
break
else:
# The last row in the sheet
end_row = row[0].row
TopLeft_Ref = "A" str(title_row) #Example output A3
BotRight_Ref = str(get_column_letter(numCols)) str(end_row) #Example output C18
table_range = str(TopLeft_Ref ":" BotRight_Ref) #Example output A3:C18
table = Table(displayName=table_title, ref=table_range
pws_sheet.add_table(table)
Запуск этого как есть дает обратную связь. Я не знаю, как это исправить. Я перепробовал множество различных комбинаций своих переменных, но безуспешно. Комментирование и печать переменных дают то, что я ожидаю, но при создании таблицы возникают ошибки. Любая помощь будет признательна.
Traceback (most recent call last):
File "a:ScriptsExcel Conversion.py", line 319, in <module>
print(find_table("All Call Distribution by Day", "All Calls by Day", "All_Calls_By_Day"))
File "a:ScriptsExcel Conversion.py", line 310, in find_table
table = Table(displayName=table_title, ref=table_range)
File "A:Condalibsite-packagesopenpyxlworksheettable.py", line 271, in __init__
self.ref = ref
File "A:Condalibsite-packagesopenpyxldescriptorsexcel.py", line 103, in __set__
super(CellRange, self).__set__(instance, value)
File "A:Condalibsite-packagesopenpyxldescriptorsbase.py", line 253, in __set__
raise ValueError('Value does not match pattern {0}'.format(self.pattern))
ValueError: Value does not match pattern ^[$]?([A-Za-z]{1,3})[$]?(d )(:[$]?([A-Za-z]{1,3})[$]?(d )?)?$|^[A-Za-z]{1,3}:[A-Za-z]{1,3}$
Комментарии:
1. Вам следует отладить свой код, чтобы точно увидеть, какое значение вы передаете. кстати. код мог бы быть намного проще.