1. 使用多線程編程,且需要調用win32com模塊來打開word文檔時,常見的錯誤如下:
IDispatch = pythoncom.CoCreateInstance(IDispatch, None, clsctx, pythoncom.IID_IDispatch) com_error: (-2147221008, '\xc9\xd0\xce\xb4\xb5\xf7\xd3\xc3 CoInitialize\xa1\xa3', None, None)
將第二行error中的第二項,打印出來是:“尚未調用 CoInitialize”,那么在代碼中加入如下兩行代碼,即可解決:
import pythoncom pythoncom.CoInitialize()
那么pythoncom是用來做什么的呢?
在網址http://docs.activestate.com/activepython/2.4/pywin32/pythoncom.html中,查詢pythoncom的CoInitialize()函數的解釋是:
Initialize the COM libraries for the calling thread.
2. 讀取word文檔的內容,常見錯誤是,讀英文的時候,沒有問題,但是碰到中文的時候,就會報錯,見下面代碼:
1 import win32com 2 from win32com.client import Dispatch 3 msword = Dispatch('Word.Application') 4 msword.Visible = 0 5 msword.DisplayAlerts = 0 6 doc = msword.Documents.Open(FileName=u"J:\\study.docx", Encoding='gb18030') 7 range = doc.Range(doc.Content.Start, doc.Content.End) 8 text = range.__str__()
出現的錯誤是:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-18: ordinal not in range(128)
修改成unicode(range),還是報錯,后修改成text = unicode(range()),才得以解決,但是具體原因還沒有探明。