环境:
Django (1.5.5)
pywin32 (218)
xlwt (1.2.0)
Python 3.3.2
Windows Server 2008 R2 Enterprise
执行代码:
def ppt2jpg(path,dPath):
pythoncom.CoInitialize()
App = win32com.client.DispatchEx("PowerPoint.Application")
App.Visible = True
App.DisplayAlerts= False
Presentation = App.Presentations.Open(path)
Presentation.SaveAs(dPath,ppSaveAsJPG)
Presentation.Close()
App.Quit()
path:为ppt路径,
dPath:为图片保存路径
服务器启动后,运行报错信息:
[Tue Aug 22 14:59:49 2017] [error] Traceback (most recent call last):\r
[Tue Aug 22 14:59:49 2017] [error] File "D:\\Python33\\lib\\site-packages\\django\\core\\handlers\\base.py", line 115, in get_response\r
[Tue Aug 22 14:59:49 2017] [error] response = callback(request, *callback_args, **callback_kwargs)\r
[Tue Aug 22 14:59:49 2017] [error] File "D:/server2/lts\\..\\carousel\\views.py", line 90, in pptupdate\r
[Tue Aug 22 14:59:49 2017] [error] ppt2jpg(path,dPath)\r
[Tue Aug 22 14:59:49 2017] [error] File "D:/server2/lts\\..\\carousel\\views.py", line 23, in ppt2jpg\r
[Tue Aug 22 14:59:49 2017] [error] Presentation = App.Presentations.Open(path)\r
[Tue Aug 22 14:59:49 2017] [error] File "D:\\Python33\\lib\\site-packages\\win32com\\gen_py\\MSPPT.py", line 7694, in Open\r
[Tue Aug 22 14:59:49 2017] [error] , ReadOnly, Untitled, WithWindow)\r
[Tue Aug 22 14:59:49 2017] [error] pywintypes.com_error: (-2147352567, '\xe5\x8f\x91\xe7\x94\x9f\xe6\x84\x8f\xe5\xa4\x96\xe3\x80\x82', (0, None, None, None, 0, -2147024882), None)
[Tue Aug 22 14:59:49 2017] [error] \r
在A服务器部署是ok的,不会报错,ppt上传,打开和另存为都可以实现。在B服务器*(正式发布的服务器)部署时就在ppt打开的时候报错了,配置内容和成功的服务器是一致的,那串乱码意思是,"发送意外"。B服务器是阿里云上的。
补充:在B服务器,如果是用cmd运行py文件来打开同一个ppt文件是可以顺利打开并且另存为的。
开始猜测是路径问题,然后弄了好久发现,路径是没问题的,问题就出在Open上面于是我开始猜测是多半是权限问题,就开始找相关内容。
最后终于在一个博客文章上找到了突破点~~
参考博客地址:http://blog.csdn.net/qq873113580/article/details/51656528
感谢大佬的文章,让我解决了卡了好几天的问题。
操作步骤如下:
1、在"开始"->"运行"中输入dcomcnfg.exe启动"组件服务"
2、依次点击"组件服务"->"计算机"->"我的电脑"->"DCOM配置"
3、在"DCOM配置"中找到"Microsoft PowerPoint 应用程序",在它上面点击右键,然后点击"属性",弹出"Microsoft PowerPoint 应用程序属性"对话框
4、点击"标识"标签,选择"交互式用户"
5、然后点击确定。
为了保险起见,我把Microsoft PowerPoint 幻灯片的属性也进行了同样的设置。
设置完成后,重启了服务器后,发现问题解决了。
哇哈哈哈哈哈~~~~~~~~~