Python 之 Excel 表格常用操作

示例文件 test.xlsx

将各个表单拆分成单独的 Excel 文件

python 复制代码
import os.path

import openpyxl
import pandas


def handle_excel(file_path):
    dirname = os.path.dirname(file_path)
    basename = os.path.basename(file_path).split(".")[0]
    wb = openpyxl.load_workbook(file_path)
    sheet_names = wb.sheetnames
    print(sheet_names)
    for sheet_name in sheet_names:
        sheet_info = pandas.read_excel(file_path, dtype='str', sheet_name=sheet_name)
        new_file_path = os.path.join(dirname, f"{basename}_{sheet_name}.xlsx")
        print(new_file_path)
        sheet_info.to_excel(new_file_path, index=False)


if __name__ == '__main__':
    file_path = os.path.join(os.getcwd(), "test.xlsx")
    handle_excel(file_path)
python 复制代码
['Sheet1', 'Sheet2']
E:\lky_project\tmp_project\test_project\test_Sheet1.xlsx
E:\lky_project\tmp_project\test_project\test_Sheet2.xlsx

数据分组后按分组结果生成多个 Excel

python 复制代码
import os.path

import openpyxl
import pandas


def handle_excel(file_path):
    dirname = os.path.dirname(file_path)
    basename = os.path.basename(file_path).split(".")[0]
    wb = openpyxl.load_workbook(file_path)
    sheet_names = wb.sheetnames
    print(sheet_names)
    sheet_name = sheet_names[1]
    sheet_info = pandas.read_excel(file_path, dtype='str', sheet_name=sheet_name)
    group_info = sheet_info.groupby("省份")
    for key, value in group_info:
        print(key, value)
        new_file_path = os.path.join(dirname, f"{basename}_{sheet_name}_{key}.xlsx")
        print(new_file_path)
        value.to_excel(new_file_path, index=False)



if __name__ == '__main__':
    file_path = os.path.join(os.getcwd(), "test.xlsx")
    handle_excel(file_path)
python 复制代码
['Sheet1', 'Sheet2']
四川
  序号  省份 月份  金额
0  1  四川  1  10
1  2  四川  2  20
E:\lky_project\tmp_project\test_project\test_Sheet2_四川.xlsx
陕西
  序号  省份 月份  金额
2  3  陕西  1  30
E:\lky_project\tmp_project\test_project\test_Sheet2_陕西.xlsx

对 Excel 有效使用区域进行截图保存

python 复制代码
import os.path
import xlwings
from PIL import ImageGrab, Image
from xlwings._xlwindows import COMRetryObjectWrapper, App
from win32com.client import DispatchEx


def handle_excel(file_path):
    _xl = COMRetryObjectWrapper(DispatchEx("ket.Application"))
    impl = App(visible=False, add_book=False, xl=_xl)
    app = xlwings.App(visible=False, add_book=False, impl=impl)  # 如果运行中不想看到打开 Excel 的操作,设置 visible 为 False
    wb = app.books.open(file_path)
    sheet = wb.sheets["Sheet1"]
    all = sheet.used_range  # 获取表格数据使用范围
    # all = sheet.range("Sheet1!$A$1:$E$4")  # 带表单名称
    # all = sheet.range("$A$1:$E$4")  # 也可以自定义数据范围,通过对角元素的坐标进行范围限定
    print(all)
    all.api.CopyPicture()  # 复制使用范围
    sheet.api.Paste()  # 粘贴
    pic = sheet.pictures[0]  # 获取当前图片
    pic.api.Copy()  # 复制图片到剪切板
    img = ImageGrab.grabclipboard()  # 获取剪切板的图片数据
    x, y = img.size
    p = Image.new('RGBA', img.size, (255, 255, 255))  # 重新设置背景颜色,不然背景是透明的
    p.paste(img, (0, 0, x, y), img)  # 将截图粘贴到图片对象
    p.save("test.png")  # 图片保存
    pic.delete()  # 删除 sheet 表单粘贴的图片,避免截图影响 Excel 原始数据
    # wb.save()  # 保存退出
    wb.close()
    app.quit()



if __name__ == '__main__':
    file_path = os.path.join(os.getcwd(), "test_Sheet2_四川.xlsx")
    handle_excel(file_path)

当然,也可以自定义数据截图范围。

上传文件自动选择

这个和 Excel 没有关系,夹带的私货。

在打开的 windows 窗口自动选择文件并确认

python 复制代码
import os.path
import time
import win32con
import win32gui


# 自动选择文件并确认
def file_upload(file):
    retry_times = 3
    while retry_times > 0:
        time.sleep(3)
        dialog = win32gui.FindWindow('#32770', '打开')
        if dialog:
            break
        retry_times -= 1
    time.sleep(3)
    ComboBoxEx32 = win32gui.FindWindowEx(dialog, 0, 'ComboBoxEx32', None)
    ComboBox = win32gui.FindWindowEx(ComboBoxEx32, 0, 'ComboBox', None)
    Edit = win32gui.FindWindowEx(ComboBox, 0, 'Edit', None)
    Button = win32gui.FindWindowEx(dialog, 0, 'Button', None)
    win32gui.SendMessage(Edit, win32con.WM_SETTEXT, None, file)
    time.sleep(1)
    win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, Button)
    time.sleep(1)
    return True


if __name__ == '__main__':
    file = os.path.join(os.getcwd(), "test.txt")
    print(file)
    file_upload(file)

pip 本地安装依赖包出现 ERROR: No matching distribution found for 报错时:

python 复制代码
pip install --no-build-isolation --no-index --find-links=./ fairscale

切换输入法为英文

python 复制代码
import win32api
import win32con
import win32gui

LANGUAGE = {
    'ZH': 0x0804,  # 中文(中国)
    "EN": 0x0409,  # 英语(美国) 美式键盘
}


def change_language(language="EN"):
    language = LANGUAGE.get(language)
    hwnd = win32gui.GetForegroundWindow()
    win32api.SendMessage(hwnd, win32con.WM_INPUTLANGCHANGEREQUEST, 0, language)


if __name__ == '__main__':
    change_language('EN')

切换成功以后,右下角的输入法展示会显示一个 ENG 的图标,如果你本身没有安装英文输入法的话是没办法切换的哟。

相关推荐
羲云网络1 小时前
GPT Image 2.6 接入指南:Flare、Sunburst 怎么选,编辑失败如何排查
人工智能·python·aigc·图像生成·acedatacloud
橙橙笔记4 小时前
具身智能的学习 - 完成一个机械臂 第1节
python·学习·机械臂·具身智能
小小张说故事4 小时前
Python 的 class 语句到底执行了什么?拆开 __prepare__、metaclass.__new__ 和那个被讲反的 __set_name__ 顺序
python
天天被压力6 小时前
【A股分钟级高频数据完全手册 #07】北交所历史分钟K线接口:京市Pro版分时批量
java·人工智能·python
天天被压力7 小时前
【A股分钟级高频数据完全手册 #08】股票日、分时数据接口对比:普通分时与Pro版差异实测
java·人工智能·python
特立独行的猫A7 小时前
AI 时代,我为什么推荐用 cj-tauri 开发桌面应用
java·后端·python
小lo想吃棒棒糖7 小时前
把机器人训练从 GPU 搬到昇腾 NPU:启元 Q1 起身动作 PPO 训练全记录
python·机器人·昇腾·启元机器人
Thanks_ks7 小时前
【第 006 讲】搭建 PyCharm 开发环境:PyCharm 的下载与安装 | 初始设置与常用配置
ide·python·pycharm·开发工具·jetbrains·开发环境·集成开发环境
青少儿编程课堂8 小时前
蓝桥杯青少组图形化省考报名倒计时·全国青少年信息素养大赛·电子学会图形化考级:校园黑白棋人机对战解析
c++·python·算法·bfs·信息学竞赛
tellmewhoisi9 小时前
nlp:知识库检索和dify知识库创建
python·自然语言处理