FileName_Save = "修改后.docx" print('正在处理:' + fileName) document = docx.Document(fileName) # 修改表格格式 temp_i_row = 0 for i_index, i_table in enumerate(document.tables): # 设置表格外边框为 1.5 磅 tblPr = i_table._element.xpath('w:tblPr')[0] tblBorders = OxmlElement('w:tblBorders') tblBorders.set(qn('w:top'), 'on') tblBorders.set(qn('w:left'), 'on') tblBorders.set(qn('w:bottom'), 'on') tblBorders.set(qn('w:right'), 'on') tblBorders.set(qn('w:insideH'), 'on') tblBorders.set(qn('w:insideV'), 'on') tblBorders.set(qn('w:sz'), '24') tblBorders.set(qn('w:val'), 'single') tblBorders.set(qn('w:space'), '0') tblPr.append(tblBorders) # 设置表格内边框为 0.75 磅 for row in i_table.rows: for cell in row.cells: for paragraph in cell.paragraphs: for run in paragraph.runs: run.font.size = Pt(10) cell._element.tcPr.tcBorders.set(qn('w:insideH'), 'single') cell._element.tcPr.tcBorders.set(qn('w:insideV'), 'single') cell._element.tcPr.tcBorders.set(qn('w:top'), 'single') cell._element.tcPr.tcBorders.set(qn('w:bottom'), 'single') cell._element.tcPr.tcBorders.set(qn('w:left'), 'single') cell._element.tcPr.tcBorders.set(qn('w:right'), 'single') cell._element.tcPr.tcBorders.set(qn('w:sz'), '18') cell._element.tcPr.tcBorders.set(qn('w:val'), 'single') cell._element.tcPr.tcBorders.set(qn('w:space'), '0') # 保存文档 document.save(FileName_Save) 报错:AttributeError: 'CT_TcPr' object has no attribute 'tcBorders'

时间: 2024-04-21 21:27:10 浏览: 6
这个报错的原因是因为在修改表格内边框的时候,代码中使用了 `cell._element.tcPr.tcBorders`,而实际上 `CT_TcPr` 对象并没有 `tcBorders` 这个属性。你可以尝试修改这个属性为 `tcBorders` 的正确名称,比如 `tcBorders` 修改为 `tcMar`。修改后的代码如下: ``` FileName_Save = "修改后.docx" print('正在处理:' + fileName) document = docx.Document(fileName) # 修改表格格式 temp_i_row = 0 for i_index, i_table in enumerate(document.tables): # 设置表格外边框为 1.5 磅 tblPr = i_table._element.xpath('w:tblPr')[0] tblBorders = OxmlElement('w:tblBorders') tblBorders.set(qn('w:top'), 'on') tblBorders.set(qn('w:left'), 'on') tblBorders.set(qn('w:bottom'), 'on') tblBorders.set(qn('w:right'), 'on') tblBorders.set(qn('w:insideH'), 'on') tblBorders.set(qn('w:insideV'), 'on') tblBorders.set(qn('w:sz'), '24') tblBorders.set(qn('w:val'), 'single') tblBorders.set(qn('w:space'), '0') tblPr.append(tblBorders) # 设置表格内边框为 0.75 磅 for row in i_table.rows: for cell in row.cells: for paragraph in cell.paragraphs: for run in paragraph.runs: run.font.size = Pt(10) cell._element.tcPr.tcMar.set(qn('w:insideH'), 'single') cell._element.tcPr.tcMar.set(qn('w:insideV'), 'single') cell._element.tcPr.tcMar.set(qn('w:top'), 'single') cell._element.tcPr.tcMar.set(qn('w:bottom'), 'single') cell._element.tcPr.tcMar.set(qn('w:left'), 'single') cell._element.tcPr.tcMar.set(qn('w:right'), 'single') cell._element.tcPr.tcMar.set(qn('w:sz'), '18') cell._element.tcPr.tcMar.set(qn('w:val'), 'single') cell._element.tcPr.tcMar.set(qn('w:space'), '0') # 保存文档 document.save(FileName_Save) ``` 这样应该就可以解决这个报错了。

相关推荐

#-*- coding:utf-8 -*- import os #from win32com.client import Dispatch, constants, gencache, DispatchEx import win32api import win32com.client def pdf_xls(root,filename,name): if(filename.find('.xlsx')>=0): pdfname = root+os.sep+filename.replace(".xlsx", ".pdf") else: pdfname = root+os.sep+filename.replace(".xls", ".pdf") xlApp=win32com.client.Dispatch('Excel.Application') xlApp.Visible = 0 xlApp.DisplayAlerts = 0 books = xlApp.Workbooks.Open(name,False) for sh in books.Sheets: sh.PageSetup.Orientation = 1 sh.PageSetup.Zoom = False sh.PageSetup.FitToPagesWide= 1 books.ExportAsFixedFormat(0, pdfname) books.Close() print('保存 PDF 文件:', pdfname) xlApp.Quit() def pdf_doc(root,filename,name): if(name.find('.docx')>=0): pdfname =root+os.sep+filename.replace(".docx", ".pdf") else: pdfname = root+os.sep+filename.replace(".doc", ".pdf") print(pdfname) #print(pdfwj) exec_tool = 'kwps.application' word = win32com.client.DispatchEx(exec_tool) word.Visible = 0 word.DisplayAlerts = 0 password='666666' doc = word.Documents.Open(name,True,False,False,password,password,Visible=False) doc.SaveAs(pdfname,FileFormat=17) #doc.ExportAsFixedFormat(0,pdfname) doc.Close() word.Quit() if __name__ == "__main__": path=input('输入文档路径') for root, directories, files in os.walk(path): n=0 for fileList in files: name=root+ os.sep+fileList #文件名 if (name.find('.doc')>=0): print(name+"开始执行") try: pdf_doc(root,fileList,name) print(name+"已完成执行") except Exception as re: f=open("error_data.txt","a",encoding='UTF-8') f.write(str(name)+str(re)+"\n") f.close() if name.find('.xls')>=0: print(name+"开始执行") try: pdf_xls(root,fileList,name) #root 目录 fileList 文档名称 name 文件加文档名 except Exception as re: f=open("error_data.txt","a",encoding='UTF-8') f.write(name+str(re)+"\n") f.close()这个程序怎么用

最新推荐

recommend-type

NR网络拒绝码-5gsm_cause = 29 (0x1d) (User authentication failed).docx

从3GPP协议和UE端行为分析5G gsm cause #29的网络问题
recommend-type

NR5G网络拒绝码-5gmm_cause = 111 (Protocol error, unspecified).docx

从3GPP协议和UE端行为分析5G gmm cause #111的网络问题
recommend-type

NR网络拒绝码-cause_value = 17 (0x11) (Network failure).docx

NR网络拒绝码-cause_value = 17 (0x11) (Network failure).docx
recommend-type

RoseMirrorHA6_for_windows2016_mysql8.0.20安装配置.docx

winserver2016系统,安装配置RoseMirrorHA6镜像服务器,数据库为mysql8.0.20-winx64.zip。详细安装过程和截图。
recommend-type

NR5G网络拒绝码-5gsm_cause = 10 (0xa) (Implicitly de-registered).docx

从3GPP协议和UE端行为分析5G gmm cause #10的网络问题
recommend-type

RTL8188FU-Linux-v5.7.4.2-36687.20200602.tar(20765).gz

REALTEK 8188FTV 8188eus 8188etv linux驱动程序稳定版本, 支持AP,STA 以及AP+STA 共存模式。 稳定支持linux4.0以上内核。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

numpy数组索引与切片技巧

![numpy数组索引与切片技巧](https://img-blog.csdnimg.cn/f610d87ed50745d2b7052af887da2d0d.png) # 2.1 整数索引 整数索引是 NumPy 数组中索引元素的最简单方法。它允许您使用整数来访问数组中的特定元素或子数组。 ### 2.1.1 单个元素索引 单个元素索引使用一个整数来访问数组中的单个元素。语法为: ```python array[index] ``` 其中: * `array` 是要索引的 NumPy 数组。 * `index` 是要访问的元素的索引。 例如: ```python import
recommend-type

javaboolean类型怎么使用

Java中的boolean类型表示真或假,只有两个可能的值。在Java中,boolean类型的变量可以被初始化为false或true。可以使用以下语法来声明和初始化一个boolean类型的变量: ``` boolean myBoolean = true; ``` 在Java中,boolean类型的变量通常用于控制流程和条件测试,例如: ``` if (myBoolean) { // do something if myBoolean is true } else { // do something if myBoolean is false } ``` 除了if语句之外
recommend-type

c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf

校园超市商品信息管理系统课程设计旨在帮助学生深入理解程序设计的基础知识,同时锻炼他们的实际操作能力。通过设计和实现一个校园超市商品信息管理系统,学生掌握了如何利用计算机科学与技术知识解决实际问题的能力。在课程设计过程中,学生需要对超市商品和销售员的关系进行有效管理,使系统功能更全面、实用,从而提高用户体验和便利性。 学生在课程设计过程中展现了积极的学习态度和纪律,没有缺勤情况,演示过程流畅且作品具有很强的使用价值。设计报告完整详细,展现了对问题的深入思考和解决能力。在答辩环节中,学生能够自信地回答问题,展示出扎实的专业知识和逻辑思维能力。教师对学生的表现予以肯定,认为学生在课程设计中表现出色,值得称赞。 整个课程设计过程包括平时成绩、报告成绩和演示与答辩成绩三个部分,其中平时表现占比20%,报告成绩占比40%,演示与答辩成绩占比40%。通过这三个部分的综合评定,最终为学生总成绩提供参考。总评分以百分制计算,全面评估学生在课程设计中的各项表现,最终为学生提供综合评价和反馈意见。 通过校园超市商品信息管理系统课程设计,学生不仅提升了对程序设计基础知识的理解与应用能力,同时也增强了团队协作和沟通能力。这一过程旨在培养学生综合运用技术解决问题的能力,为其未来的专业发展打下坚实基础。学生在进行校园超市商品信息管理系统课程设计过程中,不仅获得了理论知识的提升,同时也锻炼了实践能力和创新思维,为其未来的职业发展奠定了坚实基础。 校园超市商品信息管理系统课程设计的目的在于促进学生对程序设计基础知识的深入理解与掌握,同时培养学生解决实际问题的能力。通过对系统功能和用户需求的全面考量,学生设计了一个实用、高效的校园超市商品信息管理系统,为用户提供了更便捷、更高效的管理和使用体验。 综上所述,校园超市商品信息管理系统课程设计是一项旨在提升学生综合能力和实践技能的重要教学活动。通过此次设计,学生不仅深化了对程序设计基础知识的理解,还培养了解决实际问题的能力和团队合作精神。这一过程将为学生未来的专业发展提供坚实基础,使其在实际工作中能够胜任更多挑战。