我在使用Python教科书和视频教程自动化无聊的东西的过程中,但我有一个大项目,我需要自动填充我们似乎无法找到的60份化学品购买评论文档。我不想单独填写它们,而是想用到目前为止我学到的东西。我必须跳过章节,但我似乎无法弄清楚如何超越最后一行代码。 基本上,我有一个excel电子表格,其中包含四列信息,我需要输入到word文档表单模板的某些区域。 我在doc这个词中有“AAAA,BBBB ......”作为可以找到和替换的东西。
import openpyxl,os,docx,re
os.chdir(r'C:\Users\MYUSERNAME\OneDrive\Documents\Programming\ChemInv')
wb = openpyxl.load_workbook('cheminv.xlsx')
sheet = wb.get_sheet_by_name('Sheet1')
doc = docx.Document('ChemPurchaseForm_.docx')
fillObj = ('AAAA','BBBB','CCCC','DDDD')
for a in range(1,61):
for b in range(1,5):
fill = sheet.cell(row=a,column=b).value
for x in range(len(fillObj)):
inputRegex = re.compile(fillObj[x])
inputRegex.sub(fill,doc)
doc.save('ChemPurcaseForm_' + fill + '.docx')
我收到了这个错误:
Traceback (most recent call last):
File "C:/Users/MYUSERNAME/OneDrive/Documents/Programming/ChemInv/autofill.py", line
15, in <module>
inputRegex.sub(fill,doc)
TypeError: expected string or bytes-like object
我假设“填充”变量或“doc”变量不是二进制或字符串值?
提前感谢您的帮助!
答案 0 :(得分:0)
要对此进行调试,您需要确定哪些值不是二进制值或字符串值。一种方便的方法是开始为每个值添加print语句。例如,您可以尝试
print(fill)
print(doc)
print(type(fill))
print(type(doc))
我不确切知道docx模块是如何工作的,但我发现了两个假设:
doc
不是sub
函数的合适类型;您必须将对象转换为不同的对象,或者如果情况不同,则以不同的方式访问对象。fill
是None
。这样更容易修复,这意味着您无法正确阅读Excel文档。阅读docx文档,我倾向于1,因为它看起来不像是字节或字符串对象,或字节或字符串兼容的对象,因此sub
方法无法正常运作;如果这是正确的,请阅读python-docx文档以获取更多详细信息,这些信息可能有助于您弄清楚您需要做什么。我将探索文档中存在哪些属性,似乎有一些用于直接访问文本。