300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > word无法打开文件 因为内容有错误的解决办法

word无法打开文件 因为内容有错误的解决办法

时间:2019-05-18 02:18:07

相关推荐

word无法打开文件 因为内容有错误的解决办法

打开word时出现以下错误:

根据网上的方法,需要将其改为zip格式,用firstobject XML编辑器手动修改内部word目录下的document.xml文档,一般是补全结束标记符。这里写一个程序自动操作,程序只能补全文档的结束标记符,对于其他情况则无能为力了。

使用时,安装python及必要的第三方库,运行程序,选择需要修复的文档副本,稍等片刻即可。

import tkinterfrom tkinter import filedialogimport reimport osimport zipfileimport shutil#将文件夹filedir内的文件压缩至同名压缩包def zip_file(filedir):file_news = filedir + '.zip'z = zipfile.ZipFile(file_news,'w',zipfile.ZIP_DEFLATED)for dirpath, dirnames, filenames in os.walk(filedir):fpath1 = dirpath.replace(filedir,'')fpath2 = fpath1 and fpath1 + os.sep or ''#print(fpath1,fpath2)for filename in filenames:z.write(os.path.join(dirpath, filename),fpath2+filename)z.close()#修复XML文档,这里只补全XML文档的结束标记符def modifyXML(filePathNoSuffix):docPath=filePathNoSuffix+'/word/document.xml'newDocPath=os.path.splitext(docPath)[0]+'.txt'os.rename(docPath,newDocPath)#print('filePath:',filePath,'\nfilePathNoSuffix:',filePathNoSuffix,'\nfileDir:',fileDir,'\nnewFilePath:',newFilePath)#print('docPath:',docPath,'\nnewDocPath:',newDocPath)fo=open(newDocPath,encoding='utf-8')damagedTxt=fo.read()lst=[]start=0count=1res0=re.search('<?.*?>',damagedTxt).group()a=damagedTxt[len(res0):]while start<len(a):print('\r请稍等:{:.0f}%'.format(100*start/len(a)),end='')res=re.search('<.*?:.*?>',a[start:])if res.group()[-2]!='/':if res.group()[1]!='/':lst.append(res.group())start+=a[start:].index(res.group())+len(res.group())else:if res.group()=='<'+'/'+lst[-1][1:(lst[-1].index(' ') if ' ' in lst[-1] else -1)]+'>':del lst[-1]start+=a[start:].index(res.group())+len(res.group())else:a=a[:start]+'<'+'/'+lst[-1][1:(lst[-1].index(' ') if ' ' in lst[-1] else -1)]+'>'+a[start:]else:start+=a[start:].index(res.group())+len(res.group())count+=1fo=open(newDocPath,'w',encoding='utf-8')modifiedTxt=res0+afo.write(modifiedTxt)fo.close()os.rename(newDocPath,docPath) root=tkinter.Tk()root.withdraw()#注意文件名的最后一个字符不要是空格,后文同名文件夹最后一个字符不会是空格,否则找不到目录#filePath=repr(filedialog.askopenfilename())[1:-1]filePath=filedialog.askopenfilename()filePathNoSuffix=os.path.splitext(filePath)[0].strip()#fileDir=filePath[:filePath.rindex('/')]newFilePath=filePathNoSuffix+'.zip'os.rename(filePath,newFilePath)os.mkdir(filePathNoSuffix)zipfile.ZipFile(newFilePath).extractall(filePathNoSuffix)modifyXML(filePathNoSuffix)zip_file(filePathNoSuffix)os.rename(filePathNoSuffix+'.zip',filePathNoSuffix+'.docx')shutil.rmtree(filePathNoSuffix)print('完成!(注意文档可能有变化)')

ref:

/qq_40081208/article/details/112652832

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。