excel 截图 python

154 篇文章 4 订阅
38 篇文章 0 订阅

from PIL import ImageGrab
import xlwings as xw


# get_screenshot

def excel_catch_screen2(shot_excel, sheetname, bu=None):
    day = datetime.now().strftime('%Y%m%d')
    print(day)
    img_dir = r"E:\code\dock_project\excel_image\ppt_images"
    image_name = sheetname + f"_{day}.png"
    if bu:
        image_name = sheetname + f"_{bu}" + f"_{day}.png"
    image_name = os.path.join(img_dir, image_name)
    if not os.path.exists(image_name):
        # kill_excel()
        app = xw.App(visible=True, add_book=False)  # 使用xlwings的app启动
        wb = app.books.open(shot_excel)  # 打开文件
        sheet = wb.sheets(sheetname)  # 选定sheet
        # print(222)
        info = sheet.used_range
        nrows = info.last_cell.row
        print(nrows)
        ncolumns = info.last_cell.column
        print(ncolumns)

        sub2_list = ['By BU對比', 'By Brand對比', 'CESBG-By Site', 'Total FCT', 'BU-By Site', 'By Customer', 'By Product']
        if sheetname in sub2_list:
            ncolumns = ncolumns - 2
        letter = convert_to_letter(ncolumns)
        print('letter', letter)

        row_sub1_list = ['By Brand對比', 'CESBG-By Site', 'Total FCT', 'BU-By Site', 'By Customer', 'By Product']
        if sheetname in row_sub1_list:
            nrows = nrows - 1

        print('row count')
        # time.sleep(1000)
        screen_area = f"B2:{letter}{nrows}"
        title = sheet.range('B1').value
        if sheetname == 'Total FCT':
            screen_area = f"A2:{letter}{nrows}"
            title = sheet.range('A1').value
        print('title ---> ', title)
        all = sheet.range(screen_area)  # 获取有内容的range
        # print(all.value)
        all.api.CopyPicture()  # 复制图片区域
        # time.sleep(1)
        sheet.api.Paste()  # 粘贴
        img_name = 'data'
        pic = sheet.pictures[0]  # 当前图片
        pic.api.Copy()  # 复制图片
        time.sleep(1)
        img = ImageGrab.grabclipboard()  # 获取剪贴板的图片数据
        # img.show()
        img.save(image_name)  # 保存图片
        pic.delete()  # 删除sheet上的图片
        wb.close()  # 不保存,直接关闭
        app.quit()
        return 1
    print('have this one')
    return 1


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值