我一直在使用python-docx自动创建和保存.docx文件。它可以创建一个唯一命名为.docx的文件,但是如果我想覆盖该文件,它什么也没做。
在再次运行程序之前,我尝试执行os.remove或删除文件,但仍然没有执行任何操作。
唯一允许它工作的是进入回收站并永久删除它。
def writeDocx():
# os.remove(client+' Invoice.docx')
###heading at top###
document.add_heading(client+" Invoice", 0)
document.add_paragraph("").add_run("This Invoice was generated automatically").italic = True
table = document.add_table(rows=1, cols=3)
t = table.rows[0].cells
t[0].text = 'TEST'
t[1].text = 'TEST'
t[2].text = 'TEST'
for i in range(6):
row_cells = table.add_row().cells
row_cells[0].text = str(i)
row_cells[1].text = str(i)
row_cells[2].text = str(i)
document.save(client+' Invoice.docx')
它应该用新生成的文件覆盖已经保存的Invoice.docx文件,但不会。
它没有显示错误消息。
答案 0 :(得分:0)
摘自Python-Docx的官方文档
document.save("file.docx")
函数不会替代 现有文件,直到将其作为文档对象(document = Document("file.docx")
)打开
但是,如果您想要一种解决方法,则可以执行以下操作
is_present = False
document = Document()
try:
document = Document("Invoice.docx")
is_present =True
except:
pass
if is_present:
document.save("old-Invoice.docx") # or you can delete it.
document = Document()
document.add_heading("Invoice", 0)
document.add_paragraph("").add_run("This Invoice was generated automatically").italic = True
table = document.add_table(rows=1, cols=3)
t = table.rows[0].cells
t[0].text = 'TEST1'
t[1].text = 'TEST2'
t[2].text = 'TEST3'
for i in range(6):
row_cells = table.add_row().cells
row_cells[0].text = str(i)
row_cells[1].text = str(i)
row_cells[2].text = str(i)
document.save('Invoice.docx')
答案 1 :(得分:0)
document.save(filename)
将覆盖filename
(如果存在)。
您的代码未显示document
的来源,但是以下内容足以重现此行为:
Document().save(filename)
我建议您使用文字(例如“ Client Invoice.docx”)进行此操作,这样可以消除可能的原因。
如果仍然存在问题,我将查看权限,例如运行Python
的用户能够读取和写入文件,尽管我认为这会引发异常。另一要检查的是文件是否正在被写入另一个目录。 Python程序的默认目录有时不是预期的目录。
您应该研究本文档,以帮助您完善可复制的问题陈述。通常,遵循此过程可以帮助您了解哪里出了问题,但无论如何,它可以为我们提供更多需要帮助的内容:
https://stackoverflow.com/help/minimal-reproducible-example