当前位置: 代码网 > 科技>操作系统>Windows > pywintypes.com_error: (-2147352567, ‘发生意外。‘, (0, None, None, None, 0, -2147024809), None)

pywintypes.com_error: (-2147352567, ‘发生意外。‘, (0, None, None, None, 0, -2147024809), None)

2024年07月28日 Windows 我要评论
pywintypes.com_error: (-2147352567, '发生意外。', (0, None, None, None, 0, -2147024809), None)

 批量将excel另存为pdf时报错。

 将报错文件提取出来后运行原路径无误,单独运行报错文件仍然不行。

此时可以将问题定位到文件。

这是一个模糊的报错信息,网上众说纷纭,或说权限问题,或说文件已被打开,或说服务器未正确启动,一一排除后发现是文件存在隐藏表,读取第一个sheet时读取到了隐藏表导致报错。

将隐藏表取消隐藏,或者获取当前活跃表,解决问题。

import os
import win32process,win32api,win32con
import win32com.client
class abc():
    def __init__(self,path):
        self.path_excels = path
        self.excels = []
        self.name=[]
        self.pdf_small = os.path.join(path, 'pdf')
        if not os.path.exists(self.pdf_small):
            os.makedirs(self.pdf_small)
    def getexcels(self):
        a=0
        for i in os.listdir(self.path_excels):
            if i.split('.')[-1] in ['xlsx', 'xls']:
                a+=1
                this_excel = os.path.join(self.path_excels, i)
                self.excels.append(this_excel)
                target_name = os.path.join(self.pdf_small, str(a) + '.pdf')
                self.name.append(target_name)
    def openexcel(self):
        self.excel = win32com.client.dispatchex('excel.application')
        self.excel.visible = false  # 是否可视化
        self.excel.displayalerts = false

        for i in range(len(self.excels)):
            self.exceltopdf(i)

        self.close_excel_by_force()

    def exceltopdf(self, i):
        wb = self.excel.workbooks.open(self.excels[i], readonly=false)
        ws = wb.worksheets(1)
        ws.show(true)
        # target_name=os.path.join(self.pdf_small,self.name[i])
        ws.pagesetup.zoom = false
        ws.pagesetup.fittopagestall = 1
        ws.pagesetup.fittopageswide = 1
        print(self.excels[i], self.name[i])
        ws.exportasfixedformat(0, self.name[i][:-4])  # 不需带文件后缀
        wb.close()

    def run(self):
        try:
            self.getexcels()
            if not self.name: raise typeerror('没有excel文件')
            self.openexcel()
            # shutil.rmtree(self.pdf_small)
        except:
            if self.excel:
                self.close_excel_by_force()
            import traceback
            print(traceback.format_exc())
            # wx.messagebox(traceback.format_exc())
    def close_excel_by_force(self):  # 关闭进程

        # get the window's process id's
        hwnd = self.excel.hwnd
        t, p = win32process.getwindowthreadprocessid(hwnd)
        # ask window nicely to close
        try:
            handle = win32api.openprocess(win32con.process_terminate, 0, p)
            if handle:
                win32api.terminateprocess(handle, 0)
                win32api.closehandle(handle)
        except:
            pass

if __name__=='__main__':
    path = r"c:\users\gzyz\desktop\dd\b1"
    abc(path).run()

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com