精华内容
下载资源
问答
  • 昨天女朋友告诉我她遇到了一个比较复杂的难题,需要对七十多篇文档统一改格式,改的很简单就是文件太多,然后保存为pdf,每个文档都有好多页,可能手动改得改一天。听了之后,我突然萌生了给写个程序帮她改的想法。...

    昨天女朋友告诉我她遇到了一个比较复杂的难题,需要对七十多篇文档统一改格式,改的很简单就是文件太多,然后保存为pdf,每个文档都有好多页,可能手动改得改一天。听了之后,我突然萌生了给写个程序帮她改的想法。说干就干。后面会把程序贴出来,并记录下遇到的问题。

    首先是导入模块:

    import win32com
    from win32com.client import Dispatch
    import glob

    然后开启一个进程:

    w = win32com.client.Dispatch('kwps.Application') # 可能会报错
    w.Visible = 0
    w.DisplayAlerts = 0

    刚开始我使用的是“Word.Application”,结果报错pywintypes.com_error: (-2147221005, '无效的类字符串', None, None),查了一些资料,说是改成“wps.Application”或者“kwps.Application”,改了之后果然成功了。仔细想来,原理应该是开一个文档处理程序(office或wps)的线程进行处理,因为我电脑没有装office,所以失败了。wps和kwps的区别是你电脑上转wps的版本。

    接下来就是处理的程序:

    def process():
        filenames = glob.glob(root + '\*.doc')
        for filename in filenames:
            print(filename)
            doc = w.Documents.Open(FileName=filename)
            # # 文档最开始插入文字,这里是插入文档的名字
            # insert = filename.split('.')[0] + '\n'
            # myRange = doc.Range(0, 0)
            # myRange.InsertBefore(insert)
    
            par = doc.Range(10, doc.Content.End)
            par.ParagraphFormat.LineSpacing = 12
    
            w.ActiveDocument.Select()
            w.Selection.Font.Name = "微软雅黑"
            w.Selection.Font.Size = "12"
            # 删除空行,这里数量是1,因为回车占一个字符
            for each in w.ActiveDocument.Paragraphs:
                if each.Range.Words.Count == 1:
                    each.Range.Delete()
            print("已处理:" + filename)
            # 保存为PDF
            pdf_name = filename.split('.')[0]
            doc.SaveAs(pdf_name, FileFormat=17)
            doc.Close()
        print("处理完毕!")

    运行完成之后,在目录里生成对应的PDF文件了,每个文件名都跟之前的相对应。

    完整代码如下:

    import win32com
    from win32com.client import Dispatch
    import glob
    
    w = win32com.client.Dispatch('kwps.Application')
    w.Visible = 0
    w.DisplayAlerts = 0
    
    def process():
        filenames = glob.glob(root + '\*.doc')
        for filename in filenames:
            print(filename)
            doc = w.Documents.Open(FileName=filename)
            # # 文档最开始插入文字,这里是插入文档的名字
            # insert = filename.split('.')[0] + '\n'
            # myRange = doc.Range(0, 0)
            # myRange.InsertBefore(insert)
    
            par = doc.Range(10, doc.Content.End)
            par.ParagraphFormat.LineSpacing = 12
    
            w.ActiveDocument.Select()
            w.Selection.Font.Name = "微软雅黑"
            w.Selection.Font.Size = "12"
            # 删除空行,这里数量是1,因为回车占一个字符
            for each in w.ActiveDocument.Paragraphs:
                if each.Range.Words.Count == 1:
                    each.Range.Delete()
            print("已处理:" + filename)
            # 保存为PDF
            pdf_name = filename.split('.')[0]
            doc.SaveAs(pdf_name, FileFormat=17)
            doc.Close()
        print("处理完毕!")
    
    
    if __name__ =='__main__':
        root = r'F:\github\Modify_word_using_python\word'
        process()
    
    
    

    后续:我用了半个小时就搞定了我女朋友一天的工作量,她高兴疯了。我告诉她,知识就是力量!

    展开全文
  • 最近不小心把硬盘给格式化了,由于当时的文件没有备份,所以一下所有的文件都没有了,于是只能采取补救措施,用文件恢复软件恢复了一部分的数据出来,但是恢复完毕的文件的文件名全丢了,所有的文件只有代号,如下面...
  • 最近不小心把硬盘给格式化了,由于当时的文件没有备份,所以一下所有的文件都没有了,于是只能采取补救措施,用文件恢复软件恢复了一部分的数据出来,但是恢复完毕的文件的文件名全丢了,所有的文件只有代号,如下面...

    最近不小心把硬盘给格式化了,由于当时的文件没有备份,所以一下所有的文件都没有了,于是只能采取补救措施,用文件恢复软件恢复了一部分的数据出来,但是恢复完毕的文件的文件名全丢了,所有的文件只有代号,如下面的图:

    几万个文件这要是手动的改得要改到明年。所以便动手写了一个python的脚本程序来代替这种繁杂的操作。

    主要想法:想让程序来理解我的word文档里到底是什么内容是不可能的了,但是好在我的word文档内容都有标题,大部分的标题正好就是这个文档的文件名,于是我便打算把文档的标题当作文件名,而文件名大部分都是内容的第一段,于是思路便有了。于是开始写程序开干。

    首先需要安装python-docx库,直接通过pip安装:  pip install python-docx

    具体的程序如下:

    # -*- coding: utf-8 -*-
    """
    NameChange1.0
    
    This is a program that automatically modifies
     the name of an word document.
     
     author:fanghao
    """
    from docx import Document
    import os
    
    #这个是放所有待修改的word文件的目录
    dir_1 = "C:\\Users\\visg\\Desktop\\4"
    filenames = os.listdir(dir_1)
    
    #自动修改
    for a in range(len(filenames)):
        print(filenames[a])
        dir_docx = dir_1 +"\\"+ filenames[a]
        try:
            document = Document(dir_docx)
        except:
            print("error")
        else:
            new_name = document.paragraphs[0].text + '.docx'
            try:
                os.rename(dir_1 + os.sep + filenames[a],dir_1 + os.sep + new_name)
            except(FileNotFoundError,FileExistsError,OSError):
                print("FileNotFoundError")
    

     具体的目录自己修改下就可以了,这里我直接跳过了哪些名字改后重复的文件。

    但是有点坑的地方是恢复出来的文档有的是docx,有的是doc文档,docx文档可以通过以上的方法来改名,但是doc文档便出现了问题。于是便只能先把doc文档转成docx文档,然后再用上述的方法来修改。怎么把doc转成docx,这里有一篇博客,一个大牛写了个比较利好的插件可以很好的实现(http://blog.sina.com.cn/s/blog_5488e3a90100u8ux.html),亲测好用!

    注意:上述的方法对于大部分的word文档是可以的,但是有些文档由于格式等自身原因,无法进行修改,对于这些文档可以直接手动修改。

     

    转载于:https://www.cnblogs.com/zutterhao/p/7678523.html

    展开全文
  • 这两天用python批量修改word文档,熟练了字符串匹配查找和替换,下面提供以下成果: python代码和word文档放在一个路径下 用循环实现代替人工重复做重复的事,除了实现自动生成10个名字递增的文件,还要匹配到文档...

    如何利用python批量修改和生成docx格式word文章

    编程语言就是用来解决实际问题,python的代码精简度方便了我们对一个具体功能的实现。这两天用python批量修改word文档,熟练了字符串匹配查找和替换,下面提供以下成果:

    python代码和word文档放在一个路径下
    在这里插入图片描述
    用循环实现代替人工重复做重复的事,除了实现自动生成10个名字递增的文件,还要匹配到文档内要替换的文字,比如可以批量换掉姓名,时间,公司,学号等,替换时加一个循环

    我要做的是让文档里的时间自动化,匹配时间那一堆然后替换它,整体替换

    在这里插入图片描述

    下面是代码:(把要保存的文档关了再执行代码,要不然会报错)

    import docx
    from docx import Document
    document = Document()
    file = Document("C:/Users/nulls/Desktop/测试/心理周报第四学期第1周.docx")
    document=file
    def info_update(document, old_info, new_info):
      # 读取段落中的所有run,找到需替换的信息进行替换
      for para in document.paragraphs:
          for run in para.runs:
                     run.text = run.text.replace(old_info, new_info)  # 替换信息,第三位为最多替换几次
      # 读取表格中的所有单元格,找到需替换的信息进行替换
      for table in document.tables:
          for row in table.rows:
                for cell in row.cells:
                       cell.text = cell.text.replace(old_info, new_info)  # 替换信息old_info, new_info
    for i in range(1,10):
          info_update(document, "报告时间:2019年3月3日", '报告时间2019'+str(i)+'月'+str(i+3)+'日')
          # '2019','中原工学院''2019年'+str(i)+'月'+str(i+3)+'日'
          print("第"+str(i)+"篇替换完成")
          document.save('./心理周报第四学期第' + str(i) + '周.docx')
          print( '报告时间' + str(2019) + '年' + str(i) + '月' + str(i) + '日')
    print(str('报告时间'+str(2019)+'年'+str(3)+'月'+str(3)+'日'))
    
    
    
    

    这里有一个问题,就是我发现整体替换匹配不到,数字字符串’2019‘和汉字字符串‘年’能匹配到,'2019年’就不能了,所以就没往下写了,但是基本实现了要的功能

    展开全文
  • 当然Python中只能写入docx格式word,所以切记修改了先哦。import docximport osimport xlwtfrom docx import Document #导入库rootdir ='你word所在目录'list = os.listdir(rootdir) #列出文件夹下所有的目录与...

    当然Python中只能写入docx格式的word,所以切记修改了先哦。

    import docx

    import os

    import xlwt

    from docx import Document #导入库

    rootdir ='你word所在目录'
    list = os.listdir(rootdir) #列出文件夹下所有的目录与文件
    f = xlwt.Workbook()#创建工作簿
    sheet1 = f.add_sheet(u'sheet1',cell_overwrite_ok=True) #创建sheet
    for i in range(0,len(list)):
        path = os.path.join(rootdir,list[i])
        if os.path.isfile(path):   #如果是文件夹就继续打开
            document = Document(path) #读入文件
            tables = document.tables #获取文件中的表格集
            table = tables[0]#获取文件中的第一个表格
           
            name = table.cell(1,1).text             #cell( )  这是表格里面单元格的位置
            bumen = table.cell(2,4).text
            tel = table.cell(2,2).text
            zcid = table.cell(6,1).text  

            

            data=[]      #创建一个空列表,用append将表格里取出的数据加入到这个列表

            data.append(Document(path).paragraphs[1].text)    #这里是读取了word中的第一段的内容
            data.append(bumen)
            data.append(name)
            data.append(tel)
            data.append(zcid)
          
            l_=range(len(data))
            x = data
            for j in l_:
                sheet1.write(i+1,j,x[j])    #第一个是写入哪一行,第二个写入参数的列, 第三个是要写入的数据
    f.save("数据.xls")#保存文件
    展开全文
  • 下面这个直接用是不行的,要修改一下几个地方 docxurl:指的是你存放docx文件的目录 xlsx1url:指的是你写入xlsx文件的绝对路径 xlsx2url:指的是你在内存中操作完xlsx文件之后要把他存放到哪 returndata:每个人...
  • 大家好,今天有一个公务员的小伙伴委托我给他帮个忙,大概是有这样一份Word(由于涉及文件私密所以文中的具体内容已做修改)一共有近2600条类似格式的表格细栏,每个栏目包括的信息有:日期发...
  • python办公自动化之批量修改docx——以修改合同(内含表格)为例前言一、docx类的包很多,但docx一个就够用二、快速熟悉docx 二、使用步骤1.修改段落中的内容 2.修改合同表格中的内容 总结:docx这个包的内容并不多...
  • 在日常生活中我们常常会用到PDF格式的文档,这种格式虽然阅读方便,但我们通常无法修改PDF里面的内容,如果想要修改的需要把PDF转成Word形式。除此之外,PDF字间距较大,如果完整打印下来会花费不少钱,也需要转成...
  • 可以进行单个文档或多个文档的处理和合并,格式转化等,用于批量修改文档内容,批量转pdf或转图片等系列操作
  • 全选放word里,竟然是倒序,不知道怎么排序,也许可以修改一下文件名。 现写一个小工具好了。 第一步,图片重命名。 要转的图片准备好,命名为‘1.jpg’数字格式。如果不在乎顺序的话,其实也可以不重命名图片。 ...
  • python-docx:读取,查询以及修改 Microsoft Word 2007/2008 docx 文件。 python-pptx:可用于创建和修改 ppt 文件的 Python 库。 relatorio:模板化 OpenDocument 文件。 unoconv:在 LibreOffice/OpenOffice ...
  • 尹成Python27天入门到项目实战

    千人学习 2020-12-05 17:04:22
    综合实战播放音乐设置背景鬼程序协程简介协程传递数据wmv协程编号协程生产者消费者模式office自动化操作wordoffice办公自动化操作exceloffice办公自动化操作outlookoffice办公自动化access开发环境配置访问mdb格式...
  • 具体demo见example/use_custom_confusion.py,其中./my_custom_confusion.txt的内容格式如下,以空格间隔: iPhone差 iPhoneX 100 张旗康 张旗康 set_custom_confusion_dict方法的path参数为用户自定义混淆集文件...
  • 通过 NodeJS 编写批量格式整理的程序,整理后导出 JSON 文件 3. 数据文件批量导入(传入数据库) 由于微信小程序云开发控制台不支持数据文件的批量导入数据库,所以开发了一个支持云开发数据集合批量导入的程序 ...
  • ✅ 字幕酱:一个字幕在线生成、翻译、格式转换的工具网站 - 更多介绍 2020年10月28号添加 Vove7(上海) - Github ✅ VAssistant:Android平台强大的自定义语音助手 - 博客 ✅ EnergyRing:挖孔屏福利,电量...

空空如也

空空如也

1
收藏数 20
精华内容 8
关键字:

python批量修改word格式

python 订阅