Python自动化操作word,excel(涉及docx,win32,xlrd,xlwt,xlwings,xlutils模块)

Python自动化操作office

Topic:验证Python相关模块操作office功能

Author:qyan.li

Date:2022.1.3


前言

最近,协助老师完成Python自动化操作office的相关内容,综合整理多方资料,验证Python模块功能,形成Python自动化办公较为详细的一份文档,其中包含office操作的常用Python模块,发布出来共大家参考交流。


一、Python自动化操作word文档

Python自动化操作word文档主要介绍常用的两个模块python-docx和win32

(1) python-docx模块
  • 简介:借助于python操作word文档最简单便捷的方式,word操作的基础功能均可以由python-docx模块实现,操作速度快

  • 安装:pip install python-docx

    Tips:安装次模块注意命令为pip python-docx而非pip install docx

  • 使用:

    1. 基础功能(文档创建,保存;标题,段落添加)

      def createDocument(fileName):
          '''python-docx实现操作word文档基础命令(包含插入各级标题)
          :param fileName:文件保存路径 
          :return: None
          '''
      
          doc = Document() # 创建新文档
      
          # 添加各级标题(level参数定义各级标题)
          doc.add_heading('Python自动化操作word文档',level = 0) # level = 0,1,2...
      
          # 添加正文段落(add_run方法实现段落字体内容追加,方便调后续调整格式)
          para1 = doc.add_paragraph()
          para1.add_run('This is a test file!') # 以add_run的方式追加内容,方便后续格式调整
      
          doc.save(fileName) # 文档保存
      

      小总结:

      • Document()创建文档
      • add_heading()添加标题,参数level指定标题级数
      • add_paragraph()添加段落,配合add_run()使用方便后续调整格式
      • ```save()``文档保存
    2. 内容格式修改(颜色,字体,字号等等)

      def changeWordStyle(fileName):
          '''python-docx实现操作word文档高阶命令(包含修改字体格式)
          :param fileName: 文件保存路径
          :return: None
          '''
          doc = Document(fileName) # 打开现有文件,以“追加”的方式写入
          para2 = doc.add_paragraph()
          run = para2.add_run('这是一个测试文件!')
      
          # 字体设置
          run.font.name = '楷体'
          # 设置中文字体必须添加下面代码(同时qn必须导入包from docx.oxml.ns import qn)
          r = run._element.rPr.rFonts
          r.set(qn('w:eastAsia'),'楷体')
      
          # 字体颜色修改(借助于RGB修改)
          run.font.color.rgb = RGBColor(255,255,0)
      
          # 字号设置
          run.font.size = Pt(30)
      
          # 其余常见文字格式修改
          run.font.bold = True # 加粗
          run.font.italic = True # 斜体
          run.font.underline = True # 下划线
          run.font.strike = True # 删除线
          run.font.shadow = True # 阴影设置
      
          doc.save(fileName)
      

      小总结:

      • Document(fileName)打开现有文件,以追加方式写入
      • 借助于runfont属性实现字体格式的修改
    3. 表格操作(创建表格,合并单元格)

      def addTable(fileName):
          '''python-docx模式向word文档中插入表格
          :param fileName:文件保存以及打开的路径 
          :return: None
          '''
          doc = Document(fileName)
         
      	# 文档中添加表格(rows设置行数,cols设置列数,style设置风格-'Table Grid'表示保留表格线)
          table = doc.add_table(rows = 4,cols = 2,style = 'Table Grid')
          
          # 设置索引列
          index = table.rows[0].cells
          index[0].text = 'Name:'
          index[1].text = 'Address'
          # 设置内容列
          content1 = table.rows[1].cells
          content1[0].text = 'zhansan'
          content1[1].text = 'beijing'
          content2 = table.rows[2].cells
          content2[0].text = 'lisi'
          content2[1].text = 'shanghai'
          # 设置单元格合并(针对于cell变量进行合并单元格的操作)
          table.rows[3].cells[0].merge(table.rows[3].cells[1])
          '''Merge方法相关注释:
          merge(other_cell)[source]
          '''
          doc.save(fileName)
      

      小总结:

      • add_table创建单元格,rows,cols,style参数实现表格性质指定
      • 表格内容添加时,注意指定cells和text
      • merge的发起对象为cell,而merge函数的参数为other cell
    4. 文章格式修改(标题格式,段落格式)

      def changeParaStyle(fileName):
          '''python-docx实现段落格式修改
          :param fileName: 文件打开和保存路径
          :return: None
          '''
          doc = Document()
          title = doc.add_heading('UETSC',level = 0)
      
          # 设置段落格式(LEFT,CENTER,RIGHT,JUSTIFY,DISTRIBUTE,JUSTIFY_MED,JUSTIFY_HI,JUSTIFY_LOW,THAI_JUSTIFY)
          title.alignment = WD_ALIGN_PARAGRAPH.CENTER # 设置标题居中
      
          # 设置内容格式
          doc.add_paragraph('most', style='List Bullet') # 加圆点
          doc.add_paragraph('Least', style='List Number') # 加数字
      
          # 设置行间距
          for para in doc.paragraphs:
              # 针对于paragraph对象进行操作
              para.paragraph_format.line_spacing = 1.0
          
          # 添加分页
          doc.add_page_break()
          
          # 文档保存
          doc.save(fileName)
      

      小总结:

      • 设置行间距,借助于paragraph_format.line_spacing实现,操作的对象为文档中所有的para对象
      • alignment可以设置标题或者段落格式
      • python-docx常用的方法:add_page_break用于在文档中新起一个页面
    5. 验证操作doc文档

      def TestDoc(fileName):
          doc = Document()
          doc.add_heading('123',level = 0)
          doc.save(fileName)
      

      小总结:

      • python-docx模块可以操作doc文档
(2) win32模块
  • 简介:win32操作word文档调用office的底层组件,需要依赖于officewindows系统,运行速度较慢,但功能强大,理论上**office可以完成的内容,win32模块均可以完成**

  • 安装:

    • 安装pypiwin32模块,执行命令pip install pypiwin32

    • 安装成功后,import win32显示

      No module named win32com , win32com is not a package

      执行代码出现上述问题的原因在于个人py文件命名为win32com,与引进的模块名称冲突,故产生上述错误

  • 使用:

    1. 文件的创建和打开

      def CreateAndOpenFiles():
          # 开启进程
          wordApp = Dispatch('Word.Application')
          # 设置程序可见,警告不提醒
          wordApp.visible = True
          wordApp.DisplayAlerts = False
          # 文件的打开和保存
          doc = wordApp.Documents.Add()
          doc.SaveAs('C:\python_learning\PythonAndWin32com\Test.docx') # 借助于绝对路径完成文档的保存
          # 任意键退出
          os.system('pause')
          # 文档关闭,软件退出
          doc.Close(-1)
          wordApp.Quit()
      

      小总结:

      • 一般情况下,应用win32com模块借助于借助于绝对路径更加稳妥
      • win32com模块中的常见命令,首字母一般均大写(如Documents、Add、Open、Close、Quit等等)
    2. 内容写入

      def WriteIntoFiles(fileName):
          '''借助于win32com实现将内容写入word文档
          :param fileName: 文件打开的路径
          :return: None
          '''
          # 开启进程
          wordApp = Dispatch('Word.Application')
          # 设置程序可见,警告不提醒
          wordApp.visible = True
          wordApp.DisplayAlerts = False
          # 文件打开
          doc = wordApp.Documents.Open(fileName)
          # -------------------------------
          # 文档内容输入
          s = wordApp.Selection
          s.TypeText('UESTC')
          s.Text = ' I Love UESTC'
          # -------------------------------
          # 文件保存
          doc.SaveAs(fileName)
          # 按任意键关闭
          os.system('pause')
          # 文档关闭,软件退出
          doc.Close(-1)
          wordApp.Quit()
      

      小总结:

      • win32com模块中Selection对象指代图形化界面操作中的光标
      • 文字输入包含Text和TypeText两个命令,二者的区别在于:
        • Text文字键入后,光标选中输入文字,方便后续进行格式调整
        • TypeText为正常输入文本,文字输入后,光标停留在输入文字后
    3. 文字格式调整:

      def WordStyleChange(fileName):
          '''借助于win32com模块实现字体格式的修改
          :param fileName: 文件打开和保存的路径
          :return: None
          '''
          # 开启进程
          wordApp = Dispatch('Word.Application')
          # 设置软件可见,警告不提醒
          wordApp.visible = True
          wordApp.DisplayAlerts = False
          # 打开文件
          doc = wordApp.Documents.Open(fileName)
          # 键入文字内容,并修改格式
          s = wordApp.Selection
          s.Text = 'ChengDu'
          # 文字格式修改
          s.Style = -2 # 格式设置,设计宏定义
          s.Font.Bold = True
          s.Font.Italic = True
          s.Font.Size = 28
          s.Font.Name = '楷体'
          s.Font.Color = 255
          # 文件保存
          doc.SaveAs(fileName)
          # 任意键继续
          os.system('pause')
          # 文件关闭,软件退出
          doc.Close(-1)
          wordApp.Quit()
      

      小总结:

    4. 高阶操作:

      上述提及win32com模块功能强大,完成操作更加复杂的功能,可借助word文档中宏录制的方法实现VBA代码生成,进而转化为Python代码完成操作,详细操作参考:https://zhuanlan.zhihu.com/p/67543981

二、Python自动化操作excel文件

python自动化操作excel文件主要介绍xlrd、xlwt、xlwings、xlutils四个常用的模块

(1) xlrd模块
  • 简介:xlrd模块是python读取excel文档最常用的模块,读取excel内容方便快捷

  • 局限性:仅能操作xls类型的文档,xlsx类型的文档无法进行操作

  • 安装:pip install xlrd

    安装后,可能会遇到xlrd模块无法使用,此时由于模块版本过高,卸载后重新安装即可

    命令:pip uninstall xlrd ; pip install xlrd==1.2.0

  • 使用:

    1. 文件的获取和打开

      def readxlsxFile(fileName):
          '''xlrd模块读取xlsx文件内容
          :param fileName: 文件读取和保存的路径
          :return: None
          '''
      
          # 工作簿读取
          data = xlrd.open_workbook(fileName)
      
          # 工作表获取
          # sheetObj = data.sheet_by_index() # by index
          sheetObj = data.sheet_by_name('Sheet1') # by index
      

      小总结:

      • 工作簿的获取和打开,借助于open_workbook()命令
      • 工作表的获取存在多种方式:sheet_by_index和sheet_by_name
    2. 文件内容获取

      def getFileValue(fileName):
          '''获取xlsx文件内容的相关信息
          :param fileName: 文件读取和保存路径
          :return: None
          '''
      
          data = xlrd.open_workbook(fileName)
          sheetObj = data.sheet_by_name('Sheet1')
      
          # 获取单元格内容
          value = sheetObj.cell_value(0,1) # 注意索引值,获取(1,2处的内容)
          print('1行2列处的元素值为{}'.format(value))
      
          # 获取行数和列数
          rowNum = sheetObj.nrows
          colNum = sheetObj.ncols
          print('Sheet1表格共包含{}行{}列'.format(rowNum,colNum))
      

      小总结:

      • 特定单元格内容获取借助于cell_value(x,y)命令,获取(x+1,y+1)处单元格的内容
      • nrows和ncols属性可以获取表单的行数和列数
(2) xlwt模块
  • 简介:xlwtpython写入excel文档最常用的模块,操作excel文档的速度比较快,功能较为强大

  • 局限性:xlwt模块仅能针对于新建文档执行内容写入的操作,不能打开已有的文档

  • 使用:

    1. 基本操作(文件创建、保存;内容写入)

      def createAndWriteFiles(fileName):
          '''python-xlwt模块创建excel文件并向其中写入内容
          :param fileName: 文件打开和保存路径
          :return: None
          '''
      
          workbook = xlwt.Workbook(encoding = 'ascii') # 创建工作簿
          worksheet = workbook.add_sheet('TestSheet') # 创建工作表
      
          # 按索引向sheet中写入内容(索引下标从0开始)
          worksheet.write(0,0,'Name')
          worksheet.write(0,1,'Address')
      
          workbook.save(fileName)# 文件保存
      

      小总结:

      • xlwt.Workbook()工作簿创建,encoding参数指定编码方式
      • add_sheet()添加工作表,对象必须为workbook对象,即工作簿对象
      • write()命令内容写入,前两个参数实现位置指定,末位参数为具体内容content
    2. 内容格式修改(字体、颜色、字号)

      def setWorkBookWordStyle(fileName):
          '''python-xlwt模块设置workbook的字体格式
          :param fileName: 文件打开和保存路径
          :return: None
          '''
      
          workbook = xlwt.Workbook(encoding = 'ascii') # 打开已存在的excel文件
          Mysheet = workbook.add_sheet('TestSheet')
      
          # 格式调用
          style = xlwt.XFStyle()
          font = xlwt.Font()
      
          # 格式设置
          font.name = '楷体' # 字体设置
          font.bold = True # 加粗
          font.italic = True # 斜体
          font.underline = True # 下划线的
          font.shadow = True # 阴影
          font.height = 20*15
          font.colour_index = 5
      
          # 格式应用
          style.font = font
      
          # 无格式写入
          Mysheet.write(0,0,'beijing VS shanghai')
          # 格式写入
          Mysheet.write(1,0,'bejing VS shanghai',style)
      
          workbook.save(fileName) # 文件保存
      
      

      小总结:

      • 格式设置借助于xlwt.font和xlwt.XFStyle方法进行设置
      • 格式设置之后并不会自动应用,需要结合write方法在最后一个参数处指定
    3. 单元格格式修改(背景颜色、单元格位置)

      def setCellStyle(fileName):
          '''python-xlwt模块实现workbook单元格的格式修改
          :param fileName: 文件保存路径
          :return: None
          '''
      
          # 表单创建
          workbook = xlwt.Workbook(encoding = 'ascii')
          Mysheet = workbook.add_sheet('TestSheet')
      
      # ----------------------------------------------
          # 单元格背景颜色修改
          # 格式调用
          style = xlwt.XFStyle()
          pattern = xlwt.Pattern()
      
          # 背景颜色设置(下述语句配合使用)
          pattern.pattern = xlwt.Pattern.SOLID_PATTERN
          pattern.pattern_fore_colour = 5
      
          # 格式应用
          style.pattern = pattern
      
          Mysheet.write(0,0,'电子科技大学') # 无格式字体写入
          Mysheet.write(0,1,'电子科技大学',style) # 格式字体写入
      # -----------------------------------------------
          # 单元格居中等模式修改
          # 格式调用
          style = xlwt.XFStyle()
          al = xlwt.Alignment()
      
          # 格式设置
          '''此处包含宏定义设置:VERT_TOP = 0x00;VERT_CENTER = 0x01;VERT_BOTTOM = 0x02;HORZ_LEFT =  0x01;HORZ_CENTER = 0x02;HORZ_RIGHT = 0x03; 
          '''
          al.horz = 0x02
          al.vert = 0x03
      
          # 格式应用
          style.alignment = al
      
          Mysheet.write(4,5,'四川大学') # 无格式字体写入
          Mysheet.write(5,5,'四川大学',style) # 格式字体写入
      # -----------------------------------------------
          workbook.save(fileName) # 文件保存
      

      小总结:

      • 背景格式修改借助于xlwt.XFStyle和xlwt.Patteren
      • 单元格位置修改(居中、左对齐)等格式借助于xlwt.XFStyle和xlwt.Alignment
      • 与内容格式类似,单元格格式并不会自动应用,需要在write命令中最后一个参数指定
    4. 单元格合并

      def mergeTableCells(fileName):
          '''python-xlwt模块实现表单内单元格合并
          :param fileName: 文件保存路径
          :return: None
          '''
      
          # 表单创建
          workbook = xlwt.Workbook(encoding = 'ascii')
          Mysheet = workbook.add_sheet('TestSheet')
      
          # 内容写入合并后单元格
          Mysheet.write_merge(2,3,4,5,'University Of Electronic Science And Technology')
          # 无格式内容写入
          Mysheet.write(0,4,'University Of Electronic Science And Technology')
      
          workbook.save(fileName) # 文件保存
      

      小总结:

      • xlwt模块中设置与write命令类似的write_merge命令,完成单元格合并操作
      • write_merge(x,y,m,n,content)表示将内容content写入合并(x+1),(y+1),(m+1),(n+1)的单元格中
(3) xlwings模块
  • 简介:xlwings模块与上述xlwt模块相比功能更加强大,可以更好的适用于数据分析处理的任务,可以与DataFrame、pandas、numpy等很地进行交互

  • 局限性:xlwings模块功能最为强大,但是在操作excel文档时,速度慢,肉眼可见的慢

  • 使用:

    1. 文件的打开和创建(打开现有文件,创建新文件)

      def createAndOpenFiles(fileName):
          '''python-xlwings模块实现excel文件的创建与打开
          :param filieName: 文件保存或者打开路径
          :return: None
          '''
      
          # 软件打开
          app = xw.App(visible = True,add_book = False) # visible设置excel文件开启
      
          # --------------------------------
          # 已有文件的打开与保存
          workbook = app.books.open(fileName)
          workbook.save(fileName)
      
          # 文件关闭,软件退出
          workbook.close()
          app.quit()
          # --------------------------------
      
          # --------------------------------
          # # 新excel文件的创建与保存
          # new_workbook = app.books.add()
          # new_workbook.save(fileName)
      
          # # 文件关闭,软件退出
          # new_workbook.close()
          # app.close()
          # --------------------------------
      

      小总结:

      • 借助于xlwings模块开启软件,App()方法中visible参数可以设置软件是否可见
      • app.books中包含open和add两个方法,分别代表打开和创建文件
      • xlwings模块使用完毕后,使用close和quit命令分别关闭记事本和退出软件
    2. 读取文件内容(类似于xlrd模块功能)

      def ReadExcelFiles(fileName):
          '''python-xlwings模块实现excel文件内容读取
          :param fileName: 文件打开以及保存的路径
          :return: None
          '''
      
          # 软件打开
          app = xw.App(visible = True,add_book = False)
      
          # 已存在表单打开
          workbook = app.books.open(fileName)
          sheet = workbook.sheets['Sheet1']
      
          '''1. 文件内容读取-以列表形式返回'''
          # 文件内容读取(以列表list形式返回结果)
          address = sheet.range('A2:A3').value # output->['beijing', 'sahnghai']
          name = sheet.range('B2:B3').value # output->['linxuan', 'zhansan']
      
          # 返回二维列表
          sheetContent = sheet['A1:B3'].value # output->[['Address', 'Name'], ['beijing', 'linxuan'], ['sahnghai', 'zhansan']]
      
          '''2. 文件内容读取,返回单元格内容'''
          cellContent1 = sheet[0,0].value # output->Address
          cellContent2 = sheet[1,1].value # output->linxuan
      
          os.system('pause') # 防止excel文件打开闪退,设置按任意键继续
      
          # 文件关闭,软件退出
          workbook.close()
          app.quit()
      

      小总结:

      • 工作簿中的sheets命令可以用来打开工作簿中特定的工作表
      • sheet中内容读取包括两种读取方式:
        1. 列表形式返回,借助于命令sheet['An:Bn']
        2. 字符串形式返回,借助于命令sheet[m,n]
      • app设定visible后,使用完毕直接quit会造成软件闪退,因此程序添加os.system('pause')代码实现按任意键退出的操作
    3. 写入文件内容(类似于xlwt功能)

      def writeIntoFiles(fileName):
          '''python-xlwings实现向excel文件中写入内容
          :param fileName: 文件打开及保存路径
          :return: None
          '''
          # 打开软件
          app = xw.App(visible = True,add_book = False)
          # 表单创建
          workbook = app.books.open(fileName)
          sht = workbook.sheets['Sheet1']
          # 内容写入
          sht.range('A4').value = 'Chengdu'
          sht.range('A5').value = 'Beijing'
          
          # 按任意键继续
          os.system('pause')
          # 文件保存
          workbook.save(fileName)
          # 文件关闭,软件退出
          workbook.close()
          app.quit()
      

      小总结:

      • 与读取类似,range.value直接等号赋值方式实现单元格内容的写入
    4. 文件字体格式修改

      def FontStyleChange(fileName):
          '''借助于python-xlwings实现文件字体格式的修改
          :param fileName: 文件打开和保存的路径
          :return: None
          '''
          # 软件打开
          app = xw.App(visible = True,add_book = False)
          # 工作簿和工作表创建
          workbook = app.books.open(fileName)
          sheet = workbook.sheets['Sheet1']
          # 单元格字体格式修改
          sheet.range('A2').font.name = 'Times New Roman'
          sheet.range('A2').font.color = (255,0,0)
          sheet.range('A2').font.bold = True
      
          # 按任意键退出
          os.system('pause')
          # 文件保存
          workbook.save(fileName)
          # 文档关闭,软件退出
          workbook.close()
          app.quit()
      

      小总结:

      • 字体格式修改借助于range.font()内含诸多style设置,包含bold、color、name
      • 字体格式设置后,代码需要添加workbook.save()命令,否则程序退出后文档不会自动进行保存
    5. 单元格合并:

      def mergeCells(fileName):
          '''借助于python-xlwings模块实现单元格合并
          :param fileName: 文件打开和保存的路径
          :return: None
          '''
          # 软件打开
          app = xw.App(visible = True,add_book = False)
          # 工作簿、工作表创建
          workbook = app.books.open(fileName)
          sheet = workbook.sheets['Sheet1']
      
          # 设置单元格合并(合并时注意:merge方法返回NoneType对象,无法获取value进行赋值)
          sheet.range('J7:J9').merge()
          sheet.range('J7').value = 'UESTC'
      
          # 按任意键退出
          os.system('pause')
      
          # 文件保存
          workbook.save(fileName)
          # 文件关闭,软件退出
          workbook.close()
          app.quit()
      

      小总结:

      • 借助于ptython-xlwings模块实现单元格合并,使用merge方法,注意将range选中的区域进行合并

      • ```merge``方法返回的对象为NoneType,不具备value属性进行赋值的操作,否则会显示

        AttributeError: 'NoneType' object has no attribute 'value'
        
      • 写入内容操作可以借助于合并的任意单元格实现

(4) xlutils模块
  • 简介:xlutils同样是python操作excel文件常用模块之一,与其他模块相比最特别功能在于copy功能,可以结合xlrd模块共同使用

  • 局限性:由于xlutils模块一般情况下与xlrd模块配合使用,故一般情况下操作xls文件

  • 使用:

    1. excel文件复制

      def CopyFunction(OpenfileName,SavefileName):
          '''借助于python-xlutils模块实现excel文件的拷贝
          :param OpenfileName: 原始文件路径
          :param SavefileName: 拷贝文件保存路径
          :return: None
          '''
          workbook = xlrd.open_workbook(OpenfileName,formatting_info = True)
          new_workbook = copy(workbook)
          new_workbook.save(SavefileName)
      

      小总结:

      • xlutilscopy功能需结合xlrd模块共同使用,copy的对象为xlrd模块获取的wordbook对象
      • 新产生的对象需要借助于save命令进行保存,以生成copy后的文件对象
      • formatting_info参数决定拷贝后的文件是否保留原始文档的格式(True表示保留)
    2. 文件内容写入

      def WriteIntoFiles(SoursefileName,ObjFileName):
          '''借助于python-xlutils修改文件内容
          :param SoursefileName:原始文件路径 
          :param ObjFileName: 文件保存路径
          :return: None
          '''
          workbook = xlrd.open_workbook(SoursefileName)
          new_workbook = copy(workbook)
          sht = new_workbook.get_sheet(0)
          sht.write(0,0,'CustomerName')
          new_workbook.save(ObjFileName)
      

      小总结:

      • 内容写入文件借助于write(m,n,content)表示将内容content写入(m+1,n+1)的位置
      • wirte命令的使用对象必须为sheet对象,而非workbook对象
三、关于特殊要求的实现验证
(1) 验证excel操作模块对已经存在的excel文件内容修改时格式是否发生改变:
  • 验证代码

    1. xlutils+xlrd模块验证:

      def XlwtTest(fileName):
          '''验证xlutils模块是否可以保留原始格式
          :param fileName: 原始文件
          :return: None
          '''
          # 工作簿打开
          workbook = xlrd.open_workbook(fileName,formatting_info = True) # copy后的文件可以保留格式
          # 工作簿复制
          new_workbook = copy(workbook)
          # 工作表打开
          sheet = new_workbook.get_sheet(0)
          # 内容修改
          sheet.write(1,1,'chengdu')
          # 文件保存
          new_workbook.save('xlutilsTest.xls')
      

      xlrd.open_workbook函数中formatting_info参数的设置可以保证copy后的文件保留原始格式,否则格式丧失

    2. xlwings模块

      def XlwingsTest(fileName):
          # 软件打开
          app = xw.App(visible = True,add_book = False)
          # 工作簿、工作表创建
          workbook = app.books.open(fileName)
          sheet = workbook.sheets['Sheet1']
          # 内容修改
          sheet.range('B2').value = 'chengdu'
          # 文件保存
          workbook.save('XlwingsTest.xls')
      
          # 按任意键退出
          os.system('pause')
      
          # 文件关闭,软件退出
          workbook.close()
          app.quit()
      
  • 验证结果:

    • xlwings模块内容修改后,excel文件中的所有格式均会得以保留,包括"字体格式",“单元格格式”,“特殊格式”

    • xlutils+xlrd模块内容修改后,excel文件中所有内容均会丧失

      Tips : 只要是改动,哪怕改动并非带有格式的内容,原始格式均会丧失

(2) word文档生成自动生成目录
# 目录生成函数(users self coding)
def update_toc(docx_file):
    '''win32com模块自定义产生目录
    :param docx_file: docx文件的原始目录
    :return: None
    '''
    word = win32com.client.DispatchEx("Word.Application")
    word.Visible = 0  # 设置应用可见
    word.DisplayAlerts = 0
    doc = word.Documents.Open(docx_file)  # 使用微软office打开word
    toc_count = doc.TablesOfContents.Count  # 判断是否有无目录,如果数量是1则代表已经有目录了
    if toc_count == 0:
        for i, p in enumerate(doc.Paragraphs):  # 遍历word中的内容
            if '目录' in p.Range.Text:  # 用于指定目录页面,看下面提示
                p.Range.InsertParagraphAfter()  # 添加新的段落
                p.Range.InsertAfter("---")
                parag_range = doc.Paragraphs(i+2).Range
                doc.TablesOfContents.Add(Range=parag_range,
                                         UseHeadingStyles=True,
                                         LowerHeadingLevel=2)  # 生成目录对象

    elif toc_count == 1:
        toc = doc.TablesOfContents(1)
        toc.Update()

    doc.Close(SaveChanges=True)
    word.Quit()

小总结:

  • 借助于win32com模块产生文件目录,可以完成生成目录的操作,但是速度比较慢
  • 此函数应用前提:文章中另起一页,且必须包含目录二字
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值