Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用openpyxl将数据写入现有excel工作表_Python_Excel_Export To Excel_Openpyxl - Fatal编程技术网

Python 使用openpyxl将数据写入现有excel工作表

Python 使用openpyxl将数据写入现有excel工作表,python,excel,export-to-excel,openpyxl,Python,Excel,Export To Excel,Openpyxl,一般来说,我对编码不太熟悉 我想要实现的是制作一个脚本,运行到excel中的雇主列表,并每周生成一个新的工时表。我指的是为每个雇主生成一份空工时表,并将其重命名,同时在新制作的副本中更改周数和雇主名称 我不是从一个循环开始的,因为我首先要做的是改变雇主名称和周数的部分。我已经在互联网上搜索了一些答案,但我无法让代码正常工作,不断收到错误消息 这是我到目前为止的代码: import os import shutil import time from openpyxl import load_wor

一般来说,我对编码不太熟悉

我想要实现的是制作一个脚本,运行到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)
回溯(最近一次呼叫最后一次):
文件“G:\ALL\URENVERNTWOORDING\Wekelijks\Genereer\U weekstaten.py”,第46行,中
插入\u xlsx(目标文件名、雇主、周)
文件“G:\ALL\ureInventWoording\Wekelijks\geneer\u weekstaten.py”,第44行,插入\u xlsx
wb.save(目的地)
文件“C:\Python34\lib\site packages\openpyxl\workbook\workbook.py”,第298行,保存
保存工作簿(自身,文件名)
保存工作簿中第198行的文件“C:\Python34\lib\site packages\openpyxl\writer\excel.py”
writer.save(文件名,as_template=as_template)
文件“C:\Python34\lib\site packages\openpyxl\writer\excel.py”,第181行,保存
self.write_数据(存档,作为_模板=作为_模板)
文件“C:\Python34\lib\site packages\openpyxl\writer\excel.py”,第87行,在write\u数据中
自写工作表(存档)
文件“C:\Python34\lib\site packages\openpyxl\writer\excel.py”,第114行,在工作表中
编写工作表(工作表、self.workbook.shared\u字符串、,
文件“C:\Python34\lib\site packages\openpyxl\writer\worksheet.py”,第302行,在write\u工作表中
xf.write(注释)
文件“C:\Python34\lib\contextlib.py”,第66行,在退出时__
下一个(self.gen)
文件“C:\Python34\lib\site packages\openpyxl\xml\xmlfile.py”,第51行,在元素中
自写入元素(el)
文件“C:\Python34\lib\site packages\openpyxl\xml\xmlfile.py”,第78行,在_write_元素中
xml=tostring(元素)
文件“C:\Python34\lib\xml\etree\ElementTree.py”,第1126行,在tostring中
short_empty_elements=short_empty_elements)
文件“C:\Python34\lib\xml\etree\ElementTree.py”,第778行,写入
short_empty_elements=short_empty_elements)
文件“C:\Python34\lib\xml\etree\ElementTree.py”,第943行,在xml中序列化
short_empty_elements=short_empty_elements)
文件“C:\Python34\lib\xml\etree\ElementTree.py”,第943行,在xml中序列化
short_empty_elements=short_empty_elements)
文件“C:\Python34\lib\xml\etree\ElementTree.py”,第935行,在xml中序列化
v=_escape_attrib(v)
文件“C:\Python34\lib\xml\etree\ElementTree.py”,第1093行,在_escape\u attrib中
_引发序列化错误(文本)
文件“C:\Python34\lib\xml\etree\ElementTree.py”,第1059行,出现错误
“无法序列化%r(类型%s)”%(文本,类型(文本)。\u\u名称\u”
TypeError:无法序列化3(int类型)
有人能给我指出正确的方向吗


非常感谢

根据您的回答,我认为问题在于您现有的工时表Excel电子表格:

  • 尝试从现有电子表格的副本开始,删除所有条目。希望这也能奏效

  • 如果失败,则从新的空白电子表格开始

  • 逐点复制现有数据并重复脚本

  • 通过这样做,您可能能够隔离与
    openpyxl
    不兼容的功能


    或者,您可以从Python脚本中编写整个内容,而不必尝试修改半填充脚本。这将是100%兼容。

    如果您将保存行更改为
    wb.save(filename=dest)
    ,您能看到会发生什么吗?如果您只加载/保存工作簿而不进行修改,会发生什么情况?因为除了未定义的
    week\u str
    (我假设是c&p错误)之外,您的代码似乎没有问题,所以openpyxl可能无法正确处理原始工作表。@Martin感谢您的快速回复,然后我收到以下错误消息:文件“c:\Python34\lib\xml\etree\ElementTree.py”,第1059行,在raise\u serialization\u error“cannot serialize%r(type%s)”%(text,type(text)。\u name\u TypeError:cannot serialize 3(type int)from@dhke,如果您尝试一个默认的空Excel文件,而不是您试图修改的文件,会发生什么情况?@dhke仍然会收到相同的错误,因此这意味着openpyxl可以处理我的Excel文件。你现在知道有什么解决办法了吗?埃文斯,谢谢你的帮助,今晚将尝试一下。现在,如果我找到了负责的部分,请告诉我。我还将研究如何使用python构建完整的文档。