鱼C论坛

 找回密码
 立即注册
查看: 1371|回复: 16

win32模块打印word文档出问题了,请教高手怎么解决?

[复制链接]
发表于 2020-4-21 15:43:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
工作中经常遇到一种情况:从excel文件中提取数据,填到word模板中,并将word打印。我想,编一段代码,用以实现自动提取数据,填写模板,并打印。前面的部分都实现了,唯独打印部分除了问题。
下面是打印部分的代码:
import os,win32api,time
def print_docx(file_dir,num):

    '''打印num份文档'''

    for i in range(num):
        win32api.ShellExecute (0,"print",file_dir,'',".",0)
        # 调用shellexecute,执行打印命令
        # 第一个参数为父窗口的句柄,如果没有父窗口,则为0
        # 第二个参数为要进行的操作,为“open”、“print”或者为空。
        # 第三个参数为要运行的程序,或者打开的脚本或文件。
        # 第四个参数要向程序传递的参数,如果打开的为文件,则为空。在此为空,则意味着启动默认打印机
        # 第五个参数是程序初始化目录
        # 第六个参数是是否显示窗口,0表示不显示,即不打开文件的窗口

目前的问题是这样的,如果只打印一个文件,且文件只打印一份,程序可以正常运行。但如果打印多份,就会弹出下面的窗口:
file:///C:/Users/Administrator/Desktop/%E4%B8%B4%E6%97%B6%E6%96%87%E4%BB%B6/%E5%BC%B9%E7%AA%97.jpg
弹窗提示:
××.docx被“Microsoft”锁定,无法编辑
只读打开副本
创建本地副本,稍后合并更改
在原副本可用时,接收通知
确定  取消


当我选择一个选项,点击确定后,程序可以运行不报错,但是打印顺序经常会乱。
因为模板都是打印好的,我把每个人的模板文件对照Excel中的数据排好序,放入打印机,然后开始打印。
如果打印顺序乱了,就把每个人的信息都搞打印错乱了。

请教各位高手,看看该怎么解决
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-21 15:47:07 | 显示全部楼层
1、点击“我的电脑”右击,选中属性

2、单击高级系统设置

3、单击“环境变量”,下面只需修改环境变量即可。

4、在弹出的对话框中,选择变量Temp,然后单击编辑。

5、将变量值改为C:\WINDOWS\Temp,再单击确定。

6、变量Temp,也做同样处理。

7、点确定即可。操作完成看下效果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-21 15:49:22 | 显示全部楼层
Hello. 发表于 2020-4-21 15:47
1、点击“我的电脑”右击,选中属性

2、单击高级系统设置

我试试!然后回复你。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-21 16:04:51 | 显示全部楼层
Hello. 发表于 2020-4-21 15:47
1、点击“我的电脑”右击,选中属性

2、单击高级系统设置

请问:“在弹出的对话框中,选择变量Temp“,指的是将用户变量哪个框里面的Temp进行编辑是吗?
“6、变量Temp,也做同样处理。”这里你是不是在说变量Tmp?对它也做同样操作是不是将他的值也修改为C:\WINDOWS\Tmp?还有就是大小写有没有影响?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-21 16:14:53 | 显示全部楼层
jackoolee 发表于 2020-4-21 16:04
请问:“在弹出的对话框中,选择变量Temp“,指的是将用户变量哪个框里面的Temp进行编辑是吗?
“6、变 ...


Tep是的
大小写有影响
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-21 16:19:08 | 显示全部楼层
f45009f6-cb98-4928-860d-9ec61b8b7531.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-21 16:41:28 | 显示全部楼层
jackoolee 发表于 2020-4-21 15:49
我试试!然后回复你。

我试了一下:将用户变量里面的两个变量修改了,TEMP 的值是C:\WINDOWS\Temp;TMP 的值是C:\WINDOWS\Tmp。然后重启程序,打印一个文件,4份,仍然会出现弹窗。是不是我哪里操作的不对?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-21 16:43:09 | 显示全部楼层
jackoolee 发表于 2020-4-21 16:41
我试了一下:将用户变量里面的两个变量修改了,TEMP 的值是C:\WINDOWS\Temp;TMP 的值是C:\WINDOWS\Tmp。 ...

第二个也改成Temp
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-21 16:45:34 | 显示全部楼层
我想知道你填到word模板中用的什么方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-21 16:57:16 | 显示全部楼层
snaker 发表于 2020-4-21 16:45
我想知道你填到word模板中用的什么方法

word 模板事先发给每个人,让他们打印后,填写个人基本信息,盖上公章,而后再交给我,有我负责对照Excel里的数据,为他们填写后续信息。因为这是例行性工作,每个月都要进行,而且人数很多,所以我就想试着看能否编写程序自动执行。
我的方法是:用openxl模块读取Excel数据,用docx模块生成word文档。在填写word模板时候,事先设计好模板,待填入的数据位置固定。然后将模板内容的颜色设为白色。然后用docx慕课打开模板,填入从Excel中读取的数据,然后把数据设为黑色,然后另存文件,然后 用win32api模块打印。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-21 17:38:30 | 显示全部楼层
jackoolee 发表于 2020-4-21 16:57
word 模板事先发给每个人,让他们打印后,填写个人基本信息,盖上公章,而后再交给我,有我负责对照Excel ...

可以了吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-21 17:48:07 | 显示全部楼层

还是不行。打印多份或多个人,依然会出现弹窗,打印顺序还是会乱。
前面的运行都很顺利,另存的文件都没问题,就最后打印出毛病了。
我只好一个个用word打开,逐个人打印了。至少比手写快点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-21 17:48:45 | 显示全部楼层
jackoolee 发表于 2020-4-21 17:48
还是不行。打印多份或多个人,依然会出现弹窗,打印顺序还是会乱。
前面的运行都很顺利,另存的文件都没 ...

可以最佳么^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-21 17:56:13 | 显示全部楼层

我弄不清楚原因是啥,不知道这和环境变量有什么关系。
我猜测原因是不是这样:
win32api打印docx时候,要调用word程序,然后程序跑的比较快,但打印过程较慢。word程序在一次调用没有结束时候,不能进行下一次调用。导致很多文件堆积在一起。于是出现弹窗。如果我点击弹窗的顺序不对,打印就会乱序。

我试着用time.sleep,每次打印结束后,暂停5秒,然后弹窗就消失了。

我想知道有没有一种方法,就是把打印任务依次传给打印机,就想在word里面操作打印多份文档一样?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-21 18:11:32 | 显示全部楼层
jackoolee 发表于 2020-4-21 17:56
我弄不清楚原因是啥,不知道这和环境变量有什么关系。
我猜测原因是不是这样:
win32api打印docx时候, ...

等一下吧,回复审核了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-22 09:33:41 | 显示全部楼层
Hello. 发表于 2020-4-21 18:11
等一下吧,回复审核了

我现在级别太低,没法加好友
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-22 09:49:40 | 显示全部楼层
jackoolee 发表于 2020-4-22 09:33
我现在级别太低,没法加好友

脱机使用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 18:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表