用python批量将指定文件夹(及其子文件夹)下的word转为p

2020-03-20  本文已影响0人  DUTZCS

最近小弟需要每天需要将老师发的word文件打印出来,因为格式问题需要转成pdf打印,所以想利用python写一个小程序批量的转化。为了在没有python环境运行,想到可以将这个程序转化为exe文件,这样就可以在任意windows环境下运行了。

从网上发现有一些解决办法,其中比较简单的是利用comtypes模块中的client,产生一个实例,之后利用实例的方法saveas就可以保存为pdf.

参考:第一个资料, 借助于comtypes, 定义一个实例可以借助其下的方法来转换。
第二个资料第三个资料, 都是用win32com实现的,当然还有别的实现方法。
当然在这个过程中遇到一些问题,我会在下面分享一下解决方法。
先上代码:

#%%
import sys, os
import comtypes.client

path_q0 = input('path is:')
path_q1 = path_q0


def word2pdf(wordfile, path_dir):
    word = comtypes.client.CreateObject('Word.Application')
    file_name = path_dir + '\\' + wordfile
    doc = word.Documents.Open(file_name)
    output_name = ''
    ## 对于文件名中存在多个点时候,输出名字
    for jj in wordfile.split('.')[0:-1]:
        output_name = output_name + jj + '.'

    output_name = output_name + 'pdf'
    output_name_path = path_dir + '\\' + output_name
    doc.SaveAs(output_name_path, FileFormat=17)
    doc.Close()
    word.Quit()


num = 0
for A, B, C in os.walk(path_q1):
    for ii in C:
        if ii.split('.')[-1] == 'docx':  ##判断是否是word文件
            word2pdf(ii, A)
            print(ii, 'is ok')
    num += 1
    print(num, 'is ok')

input("please input any key to exit!")

代码很简单,首先定义一个转换的函数,之后利用os.walk遍历一下的所有word文件。
第一个问题就是walk的使用,需要遍历来获取结果。
第二个问题就是comtypes的使用.
第三个问题是打包使用pyinstaller模块。
这部分有两个问题第一是这个模块不是python写的,所以不能在python环境中运行,也就是需要在cmd中运行,当然需要先将python加入到环境变量中,也可以利用conda的终端来运行。参考.
第二个问题是利用pyinstaller -F *.py 运行之后直接点击exe文件会出现一闪而过或者报错的问题。一闪而过可以在程序最后一行加上input('enter to quit')来解决。之后又出现了报错,参考.直接修改 _ int _.py文件,当然也有很多降级setuptools的方法。推荐第一种,因为对症解决比较简单。
结果如下:

捕获.PNG

本来也想吧exe文件放在这里但是不知道如何添加附件,另外我觉得已经将所有遇到的问题写在上面了应该可以很简单的实现,那就算了吧。有需要的可以给我发邮件1639458228@qq.com.

上一篇下一篇

猜你喜欢

热点阅读