使用 Win32 和 COM 访问 Word 时出现问题
Trouble with accessing Word using Win32 and COM
最近我一直在尝试将 .doc 文件转换为一种新格式,以便更轻松地处理数据。因此,我决定将 .doc 文件转换为 .docx 文件,因为这样做具有很大的灵活性,而且我认为这项任务会很容易。然而,我想错了。我目前正在尝试使用 Win32 访问 Word,但由于某种原因它无法正常工作。这是我的代码:
import win32com.client as win32
import os
import re
from win32com.client import constants
def SaveAsDocx(path):
word = win32.gencache.EnsureDispatch("Word.Application")
doc = word.Documents.Open(path)
doc.Activate()
new_file_abs = os.path.abspath(path)
new_file_abs = re.sub(r'\. \w+$', '.docx', new_file_abs)
word.ActiveDocument.SaveAs(
new_file_abs, FileFormat=constants.wdFormatXMLDocument
)
doc.Close(False)
print('done')
SaveAsDocx("(1)2014-06-18.doc")
我得到的错误是:
Traceback (most recent call last):
File "c:/Users/gawel/OneDrive/Desktop/scraping/doctotxt.py", line 20, in <module>
SaveAsDocx("(1)2014-06-18.doc")
File "c:/Users/gawel/OneDrive/Desktop/scraping/doctotxt.py", line 9, in SaveAsDocx
doc.Activate()
AttributeError: 'NoneType' object has no attribute 'Activate'
我做了很多研究,只是不知道从这里去哪里。我想我的 Word 应用程序可能有问题,但我不知道如何修复它。任何帮助,将不胜感激。此外,如果有人知道最终将 .doc 文件转换为 TXT/PDF/DOCX 文件的不同方法,请告诉我。这个看似简单的项目占用了我太多的时间。
您快完成了,只需要更改一些小东西:
- 不需要
Activate()
,这个可以省略
- 我认为您的正则表达式没有正确完成工作
- 您应该在保存文件后退出 Word 应用程序
所以这应该有效:
def SaveAsDocx(path):
word = win32.gencache.EnsureDispatch("Word.Application")
doc = word.Documents.Open(path)
new_file_abs = re.sub(r'\.doc', '.docx', os.path.abspath(path))
word.ActiveDocument.SaveAs(new_file_abs, FileFormat=constants.wdFormatXMLDocument)
doc.Close(False)
word.Application.Quit(-1)
print('done')
最近我一直在尝试将 .doc 文件转换为一种新格式,以便更轻松地处理数据。因此,我决定将 .doc 文件转换为 .docx 文件,因为这样做具有很大的灵活性,而且我认为这项任务会很容易。然而,我想错了。我目前正在尝试使用 Win32 访问 Word,但由于某种原因它无法正常工作。这是我的代码:
import win32com.client as win32
import os
import re
from win32com.client import constants
def SaveAsDocx(path):
word = win32.gencache.EnsureDispatch("Word.Application")
doc = word.Documents.Open(path)
doc.Activate()
new_file_abs = os.path.abspath(path)
new_file_abs = re.sub(r'\. \w+$', '.docx', new_file_abs)
word.ActiveDocument.SaveAs(
new_file_abs, FileFormat=constants.wdFormatXMLDocument
)
doc.Close(False)
print('done')
SaveAsDocx("(1)2014-06-18.doc")
我得到的错误是:
Traceback (most recent call last):
File "c:/Users/gawel/OneDrive/Desktop/scraping/doctotxt.py", line 20, in <module>
SaveAsDocx("(1)2014-06-18.doc")
File "c:/Users/gawel/OneDrive/Desktop/scraping/doctotxt.py", line 9, in SaveAsDocx
doc.Activate()
AttributeError: 'NoneType' object has no attribute 'Activate'
我做了很多研究,只是不知道从这里去哪里。我想我的 Word 应用程序可能有问题,但我不知道如何修复它。任何帮助,将不胜感激。此外,如果有人知道最终将 .doc 文件转换为 TXT/PDF/DOCX 文件的不同方法,请告诉我。这个看似简单的项目占用了我太多的时间。
您快完成了,只需要更改一些小东西:
- 不需要
Activate()
,这个可以省略 - 我认为您的正则表达式没有正确完成工作
- 您应该在保存文件后退出 Word 应用程序
所以这应该有效:
def SaveAsDocx(path):
word = win32.gencache.EnsureDispatch("Word.Application")
doc = word.Documents.Open(path)
new_file_abs = re.sub(r'\.doc', '.docx', os.path.abspath(path))
word.ActiveDocument.SaveAs(new_file_abs, FileFormat=constants.wdFormatXMLDocument)
doc.Close(False)
word.Application.Quit(-1)
print('done')