Я вообще-то отказался от кодирования.Запись данных на существующий лист excel с использованием openpyxl
Что я хочу достичь, так это сделать скрипт, который работает со списком работодателей в Excel и еженедельно, генерировать новый часовой лист. И, порождая, я имею в виду копию для каждого работодателя пустого часового листа и переименовываю его, а также изменяю номер недели и имя работодателя во вновь созданной копии.
Я не начинал с цикла, потому что сначала хотел сделать часть, которая меняет имя работодателя и номер недели. Я уже искал в Интернете ответы на некоторые вопросы, но я не могу заставить код работать, продолжать получать сообщения об ошибках.
Так вот мой код до сих пор:
import os
import shutil
import time
from openpyxl import load_workbook
#calculate the year and week number
from time import strftime
year = (time.strftime("%Y"))
week = str(int(time.strftime("%W"))+1)
year_week = year + "_" + week
#create weekly houresheets per employer
employer = "Adam"
hsheets_dir = "C:\\test\\"
old_file_name = "blanco.xlsx"
new_file_name = employer + "_" + year_week + ".xlsx"
dest_filename = (hsheets_dir + new_file_name)
shutil.copy2((hsheets_dir + old_file_name), dest_filename)
#change employer name and weeknumber
def insert_xlsx(dest, empl, wk):
#Open an xlsx for reading
print (dest)
wb = load_workbook(filename = dest)
#Get the current Active Sheet
ws = wb.get_sheet_by_name("Auto")
ws.cell(row=1,column=2).value = empl
ws.cell(row=2,column=2).value = wk
wb.save(dest)
insert_xlsx(dest_filename, employer, week_str)
А вот сообщение об ошибке я получаю:
Traceback (most recent call last):
File "G:\ALL\Urenverantwoording\Wekelijks\Genereer_weekstaten.py", line 46, in <module>
insert_xlsx(dest_filename, employer, week)
File "G:\ALL\Urenverantwoording\Wekelijks\Genereer_weekstaten.py", line 44, in insert_xlsx
wb.save(dest)
File "C:\Python34\lib\site-packages\openpyxl\workbook\workbook.py", line 298, in save
save_workbook(self, filename)
File "C:\Python34\lib\site-packages\openpyxl\writer\excel.py", line 198, in save_workbook
writer.save(filename, as_template=as_template)
File "C:\Python34\lib\site-packages\openpyxl\writer\excel.py", line 181, in save
self.write_data(archive, as_template=as_template)
File "C:\Python34\lib\site-packages\openpyxl\writer\excel.py", line 87, in write_data
self._write_worksheets(archive)
File "C:\Python34\lib\site-packages\openpyxl\writer\excel.py", line 114, in _write_worksheets
write_worksheet(sheet, self.workbook.shared_strings,
File "C:\Python34\lib\site-packages\openpyxl\writer\worksheet.py", line 302, in write_worksheet
xf.write(comments)
File "C:\Python34\lib\contextlib.py", line 66, in __exit__
next(self.gen)
File "C:\Python34\lib\site-packages\openpyxl\xml\xmlfile.py", line 51, in element
self._write_element(el)
File "C:\Python34\lib\site-packages\openpyxl\xml\xmlfile.py", line 78, in _write_element
xml = tostring(element)
File "C:\Python34\lib\xml\etree\ElementTree.py", line 1126, in tostring
short_empty_elements=short_empty_elements)
File "C:\Python34\lib\xml\etree\ElementTree.py", line 778, in write
short_empty_elements=short_empty_elements)
File "C:\Python34\lib\xml\etree\ElementTree.py", line 943, in _serialize_xml
short_empty_elements=short_empty_elements)
File "C:\Python34\lib\xml\etree\ElementTree.py", line 943, in _serialize_xml
short_empty_elements=short_empty_elements)
File "C:\Python34\lib\xml\etree\ElementTree.py", line 935, in _serialize_xml
v = _escape_attrib(v)
File "C:\Python34\lib\xml\etree\ElementTree.py", line 1093, in _escape_attrib
_raise_serialization_error(text)
File "C:\Python34\lib\xml\etree\ElementTree.py", line 1059, in _raise_serialization_error
"cannot serialize %r (type %s)" % (text, type(text).__name__)
TypeError: cannot serialize 3 (type int)
Может somewone поместить меня в правильном направлении?
Большое спасибо
Не могли бы вы увидеть, что произойдет, если вы измените строку сохранения на 'wb.save (filename = dest)'? –
Что происходит, когда вы просто загружаете или сохраняете книгу без изменений? Потому что, кроме неопределенного 'week_str' (который я предполагаю, это ошибка c & p), ваш код кажется прекрасным, поэтому, возможно, openpyxl не может правильно обрабатывать исходный лист. – dhke
@Martin Спасибо за быстрый ответ, тогда я получаю следующее сообщение об ошибке: Файл «C: \ Python34 \ lib \ xml \ etree \ ElementTree.py», строка 1059, в _raise_serialization_error «не может сериализовать% r (type % s) "% (текст, тип (текст) .__ name__) ТипError: невозможно сериализовать 3 (тип int) – MNijland