为什么保存MSWord文档会无声地失败?

我需要在许多文件中更改一些自定义属性值.这是一个代码示例-我如何对单个文件执行操作:

import win32com.client

MSWord = win32com.client.Dispatch("Word.Application")
MSWord.Visible = False

doc = MSWord.Documents.Open(file)
doc.CustomDocumentProperties('Some Property').Value = 'Some New Value'
doc.Save()
doc.Close()

MSWord.Quit()

为“ Excel.Application”运行相同的代码(进行细微更改-只是为了使它工作)可以为我带来出色的结果.但是,当我为MSWord使用doc.Save()或doc.SaveAs(same_file)时,它默默失败.我不知道为什么,但是更改没有保存.

现在,我的解决方法是对其他文件使用SaveAs,它也很好用.但是我想了解为什么我的MSWord文件会有这种奇怪的行为,以及如何解决?

编辑:我更改了我的代码,而不是用try / except导致失败的原因使人误导.
但是,感谢所有这些人在我的代码中发现了这个缺陷:)

解决方法:

您以错误的方式使用CustomDocumentProperties,并且正如其他人指出的那样,您看不到它,因为您正在吞下该异常.

此外-在这里我在文档中找不到任何内容-更改属性时未重置Saved属性,因此文件未更改.

这是正确的代码:

msoPropertyTypeBoolean = 0
msoPropertyTypeDate = 1
msoPropertyTypeFloat = 2
msoPropertyTypeNumber = 3
msoPropertyTypeString = 4

import win32com.client

MSWord = win32com.client.Dispatch("Word.Application")
MSWord.Visible = False

doc = MSWord.Documents.Open(file)
csp = doc.CustomDocumentProperties
csp.Add('Some Property', False, msoPropertyTypeString, 'Some New Value')
doc.Saved = False
doc.Save()
doc.Close()

MSWord.Quit()

注意:没有错误处理,而且绝对不是生产质量,但是对于您来说,实现功能就足够了.
最后,我正在猜测属性类型的值(对于字符串类型,猜测是正确的),但对于其他类型,可能会出现一些问题.

上一篇:Windows资源管理器IShellFolderViewDual :: SelectItem用法


下一篇:重新学习建立网站