Utiliser Python pour implémenter des opérations par lots sur Word

Python est vraiment pratique et rapide pour écrire de petits outils en temps normal, et Python est un excellent moyen !

Tous les codes suivants sont partagés par de nombreux magnats en ligne et modifiés en fonction de leurs propres besoins. Les bibliothèques appelées sont Python-docx, win32com, PyPDF2, xlwings (fonctionnant excel).

Parce que la tâche de l'entreprise est d'effectuer des opérations par lots sur des milliers de fichiers de mots, l'opération manuelle est trop fatigante, j'ai donc travaillé des heures supplémentaires pour précipiter un script automatisé.Bien qu'il reste encore de nombreux endroits à optimiser, il peut déjà fonctionner de manière stable.

Enregistrez la fonction de script ci-dessous.

doc à docx

Parce que la bibliothèque Python-docx ne peut fonctionner que sur des fichiers docx, donc si vous voulez convertir le format, vous ne pouvez pas changer directement le suffixe.

  word = wc.Dispatch("Word.Application")
    # 不能用相对路径,老老实实用绝对路径
    # 需要处理的文件所在文件夹目录
    for root, dirs, files in os.walk(rawpath):
        for i in files:
            # 找出文件中以.doc结尾并且不以~$开头的文件(~$是为了排除临时文件的)
            if i.endswith('.doc') and not i.startswith('~$'):
                print(i)
                doc = word.Documents.Open(root +'\\'+ i)
                # # 将文件名与后缀分割
                rename = os.path.splitext(i)
                # 将文件另存为.docx
                doc.SaveAs(root + '\\' +rename[0] + '.docx', 12)  # 12表示docx格式
                doc.Close()
                # time.sleep(1)
    word.Quit()

trouver un fichier spécifique

C'est relativement simple, il vous suffit de parcourir les dossiers et d'ajouter les fichiers cibles à la file d'attente en fonction des mots-clés de la file d'attente.

Parce que la conversion en pdf ne peut être que docx, nous devons donc trouver des fichiers docx, et en même temps filtrer les fichiers temporaires au début des fichiers ~$.

def findfiles():
    count = 1
    for root, dirs, files in os.walk(path):
        for filename in files:
            for i in range(len(filenames)):
                if (filenames[i] in filename and filename.endswith('docx') and not filename.startswith('~$') :
                    result.append([count, root + "\\" + filename])
                    count += 1
                    break
    print(result)

Toutes les couleurs de police sont passées au noir

def change_color(path):

    file = Document(path)
    for pag in file.paragraphs:
        for block in pag.runs:
            block.font.color.rgb = RGBColor(0, 0, 0)
    for table in file.tables:
        for row in table.rows:
            for cell in row.cells:
                for cell_pag in cell.paragraphs:
                    for cell_block in cell_pag.runs:
                        cell_block.font.color.rgb = RGBColor(0, 0, 0)

    # 页眉
    pag_head = file.sections[0].header
    head_pag = pag_head.paragraphs[0]
    for run in head_pag.runs:
        run.font.color.rgb = RGBColor(0, 0, 0)

    #  页脚
    pag_foot = file.sections[0].footer
    foot_pag = pag_foot.paragraphs[0]
    for run in foot_pag.runs:
        run.font.color.rgb = RGBColor(0, 0, 0)
    file.save(path)
    print(path)
    print("^"*10 + "颜色切换完成" + "^"*10)

docx en pdf

Parce que l'opération de pagination ne peut être mise en œuvre qu'en pdf.


for i in range(len(result)):
    file = result[i][1]
    name = file.rsplit('\\', 1)[1]
    print(i)
    if "关键字" in name:  # 跳过不需要截取的关键字文件
        outfile = pdf_file_path + name[:-5] + str(i) +'.pdf'
    else:
        outfile = out_path + name[:-5] + str(i) +'.pdf'  

    if file.split(".")[-1] == 'docx':
        print(file)
        convert(file, outfile)
    print("^"*10+"PDF转换完成"+"^"*10)
    time.sleep(1)

Capturer une page spécifique

def split_single_pdf(read_file, start_page, end_page, pdf_file):
    # 1. 获取原始pdf文件
    fp_read_file = open(read_file, 'rb')
    # 2. 将要分割的PDF内容格式化
    pdf_input = PdfFileReader(fp_read_file)
    # 3. 实例一个 PDF文件编写器
    pdf_output = PdfFileWriter()
    # 4. 把第一页放到PDF文件编写器
    for i in range(start_page, end_page):
        pdf_output.addPage(pdf_input.getPage(i))
    # 5. PDF文件输出
    with open(pdf_file, 'wb') as pdf_out:
        pdf_output.write(pdf_out)
    print(f'{read_file}分割{start_page}页-{end_page}页完成,保存为{pdf_file}!')

Appelez l'imprimante pour imprimer

def printer_loading(filename):
    win32api.ShellExecute(0, "print", filename, '/d:"%s"' % win32print.GetDefaultPrinter(), ".", 0)

Imprimer pour exécuter une page spécifique


def excel_print(execl_path):
    app = xw.App(visible=False, add_book=False)
    workbook = app.books.open(execl_path)
    worksheet = workbook.sheets['sheet关键字']
    area = worksheet.range('A1:D11')  # 打印区域
    area.api.PrintOut(Copies=1, ActivePrinter='Canon MF260 Series UFRII LT', Collate=True)
    workbook.close()
    app.quit()

              [Ce qui suit est le diagramme de système d'architecture de connaissances d'apprentissage d'ingénieur de test logiciel le plus complet en 2023 que j'ai compilé]


1. De l'entrée à la maîtrise de la programmation Python

2. Combat réel du projet d'automatisation de l'interface

3. Combat réel du projet d'automatisation Web


4. Combat réel du projet d'automatisation des applications

5. CV des fabricants de premier rang


6. Tester et développer le système DevOps

7. Outils de test automatisés couramment utilisés


Huit, test de performance JMeter

9. Résumé (petite surprise à la fin)

la vie est longue alors ajoutez de l'huile. Chaque effort ne sera pas abandonné, tant que vous persévérez, il y aura des récompenses à la fin. Chérissez votre temps et poursuivez vos rêves. N'oubliez pas l'intention initiale, allez de l'avant. Votre avenir est entre vos mains !

La vie est courte, le temps est précieux, nous ne pouvons pas prédire ce qui se passera dans le futur, mais nous pouvons saisir le moment présent. Chérissez chaque jour et travaillez dur pour vous rendre plus fort et meilleur. Croyance ferme, poursuite persistante, le succès vous appartiendra finalement !

Ce n'est qu'en vous remettant constamment en question que vous pourrez constamment vous surpasser. Persistez dans la poursuite de vos rêves et avancez courageusement, et vous constaterez que le processus de lutte est si beau et si valable. Croyez en vous, vous pouvez le faire !

Guess you like

Origin blog.csdn.net/nhb687096/article/details/131917167