Python 基于win32com客户端实现Excel操作的详细过程
(相关资料图)
目录
测试环境代码实现非多线程场景下使用新建并保存EXCEL读取现有EXCEL多线程场景下使用参考连接测试环境
Python 3.6.2
代码实现
非多线程场景下使用
新建并保存EXCEL
import win32com.client from win32api import RGB def save_something_to_excel(result_file_path): excel_app = win32com.client.Dispatch("Excel.Application") excel_app.Visible = False # 设置进程界面是否可见 False表示后台运行 excel_app.DisplayAlerts = False # 设置是否显示警告和消息框 book = excel_app.Workbooks.Add() # 添加Excel工作簿 sheet = excel_app.Worksheets(1) # 获取第一个Sheet sheet.name = "汇总统计" # 设置Sheet名称 sheet.Columns.ColumnWidth = 10 # 设置所有列列宽 sheet.Columns(1).ColumnWidth = 20 # 设置第1列列宽 sheet.Rows.RowHeight = 15 # 设置所有行高 sheet.Rows(1).RowHeight = 20 # 设置第一行行高 usedRange = sheet.UsedRange # 获取sheet的已使用范围 rows = usedRange.Rows.Count # 获取已使用范围的最大行数,初始值为 1 cols = usedRange.Columns.Count # 获取已使用范围的最大列数,初始值为 1 print(rows, cols) # 输出 1 1 usedRange.Rows.RowHeight = 30 # 设置已使用范围内的行高 usedRange.Columns.ColumnWidth = 30 # 设置已使用范围内的列宽 # do something ... row_index = 1 for index, item in enumerate(["日期", "请求方法", "URL", "调用次数"]): # 单元格赋值 sheet.Cells(row_index, col_index).Value = 目标值 row_index, col_index 起始值为1 sheet.Cells(row_index, index + 1).Value = item row_index += 1 # do something else ... usedRange = sheet.UsedRange rows = usedRange.Rows.Count cols = usedRange.Columns.Count print(rows, cols) # 输出 1 4 sheet.Cells(1, 2).Font.Size = 29 # 设置单元格字体大小 sheet.Cells(1, 2).Font.Bold = True # 字体是否加粗 True 表示加粗,False 表示不加粗 sheet.Cells(2, 2).Font.Name = "微软雅黑" # 设置字体名称 # sheet.Cells(2, 2).Font.Color = RGB(0, 0, 255) # 设置字体颜色 # 不起作用 sheet2 = excel_app.Worksheets.Add() # 添加Sheet页 sheet2.Activate # 设置默认选中的sheet为sheet2 sheet3 = excel_app.Worksheets.Add() #注意,Move操作,会将被移动的表单(本例中的sheet)设置为默认选中状态,也就是说覆盖 sheet.Activate所做的变更 sheet.Move(sheet3, None) # 将sheet移动到sheet3之前 book.SaveAs(result_file_path) # 注意:结果文件路径必须是绝对路径 book.Close() # 关闭工作簿 excel_app.Quit() # 退出 if __name__ == "__main__": save_something_to_excel("D:\\codePojects\\logStatistics\\result\\result.xlsx")
了解更多API,可以查看参考连接
读取现有EXCEL
import win32com.client def read_something_from_excel(excel_file_path): excel_app = win32com.client.Dispatch("Excel.Application") excel_app.Visible = False excel_app.DisplayAlerts = False book = excel_app.Workbooks.Open(result_file_path, False, True, None, None) # 打开工作簿 # do something ... sheet = excel_app.Worksheets(1) print(sheet.name) print(sheet.Cells(1, 1).Value) book.SaveAs(result_file_path) # 注意:结果文件路径必须是绝对路径 book.Close() # 关闭工作簿 excel_app.Quit() # 退出 if __name__ == "__main__": read_something_from_excel("D:\\codePojects\\logStatistics\\result\\result.xlsx")
多线程场景下使用
import threading import win32com.client import pythoncom def save_something_to_excel(result_file_path): pythoncom.CoInitialize() excel_app = win32com.client.DispatchEx("Excel.Application") # excel_app = win32com.client.Dispatch("Excel.Application") excel_app.Visible = False excel_app.DisplayAlerts = False book = excel_app.Workbooks.Add() sheet = excel_app.Worksheets(1) sheet.name = "汇总统计" row_index = 1 for index, item in enumerate(["日期", "请求方法", "URL", "调用次数"]): sheet.Cells(row_index, index + 1).Value = item row_index += 1 book.SaveAs(result_file_path) book.Close() excel_app.Quit() pythoncom.CoUninitialize() # 释放资源 if __name__ == "__main__": for i in range(3): file_path = "D:\\codePojects\\logStatistics\\result\\result%s.xlsx" % i thread = threading.Thread(target=save_something_to_excel, args=(file_path,)) thread.start()
说明:
如果不添加以下代码行:pythoncom.CoInitialize()
会报错,如下:
pywintypes.com_error: (-2147221008, "尚未调用 CoInitialize。", None, None)建议使用
excel_app = win32com.client.DispatchEx("Excel.Application")
替代
# excel_app = win32com.client.Dispatch("Excel.Application")
实践发现,多线程的情况下,使用Dispatch
会出现报错,原因似乎是Dispatch
若发现进程已经存在的话,就不会创建新的进程。若不创建新的进程,有些操作会有冲突,可能会影响到已经打开的文件。
参考连接
https://learn.microsoft.com/zh-cn/office/vba/api/excel.font.color
https://blog.csdn.net/qq_25176745/article/details/125085819
到此这篇关于Python 基于win32com客户端实现Excel操作的详细过程的文章就介绍到这了,更多相关Python Excel操作内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
关键词:
-
Python 基于win32com客户端实现Excel操作的详细过程
2023-05-02 -
琅琊榜小说结局番外篇_琅琊榜小说结局
2023-05-02 -
【当前独家】记者:拜仁已和法兰克福谈判以引进穆阿尼,总价预计低于1亿欧
2023-05-02 -
当前热点-刘晓庆:4段婚姻无儿无女,晚年照样有依靠,她的后半生令人羡慕
2023-05-01 -
传奇辅助怎么把自动喊话去 传奇世界怎么自动喊话
2023-05-01 -
哪些古诗写了哪些传统 哪些古诗写到了传统节日和习俗?
2023-05-01 -
从足球小将到警界精英 “白发队长”收获一项重要荣誉
2023-05-01 -
天才炼药师腹黑大小姐漫画_天才炼药师腹黑大小姐 焦点速看
2023-05-01 -
【环球新视野】艺术品在线拍卖哪家好_在线拍卖艺术品的平台有哪些
2023-05-01 -
每日看点!H2O2自偶电离_自偶电离
2023-05-01 -
津巴布韦议员:美国监听联合国秘书长不可接受 当前快看
2023-05-01 -
1蒲式耳等于多少吨_蒲式耳等于多少公斤 世界头条
2023-05-01 -
A股医药股尾盘掀跌停潮,以岭药业 众生药业 特一药业等近10股集体跌停|全球热资讯
2023-05-01 -
斯诺克大师赛历届冠军是谁_斯诺克大师赛历届冠军
2023-05-01 -
全球新动态:褚玉璞像银元价格(2023年05月01日)
2023-05-01 -
华为Mate 50立减800 官方降价_环球热文
2023-05-01 -
NBA最惨横扫!恩比德或赛季报销,哈登时也命也_每日速读
2023-05-01 -
外媒评今年MSI中路Top5:Chovy位列第一 力压Faker与knight
2023-05-01 -
当前关注:每经IPO周报第107期|上周“6过3” 特创科技上会被否,渡远户外被暂缓表决,背后有何故事?
2023-05-01 -
当前速递!今日播报!为什么有的企业可以只交三险 天天时讯|环球观热点 当前热文|当前视点
2023-05-01 -
通州生态环境局:零距离纾困解难 心贴心助企发展
2023-05-01 -
4月份综合PMI产出指数为54.4% 企业生产经营延续恢复发展态势-最新
2023-05-01 -
全球微资讯!表达爱国的诗句_表达爱的诗句
2023-05-01 -
全球微速讯:福特金牛座高配_福特金牛座有哪些配置?
2023-05-01 -
当前观察:艳少的后现代生活小说免费阅读_艳少的后现代生活
2023-05-01 -
高龄产妇_关于高龄产妇简述 当前热文
2023-05-01 -
世界快资讯:本周热门科技股多数上涨能源股普涨
2023-04-30 -
蔚来五一换电量创历史新高 车主高速薅免费电池 4 万块
2023-04-30 -
环球百事通!欧洲议会议员反问欧洲:我们想做美国附庸,还是对华保持独立关系?
2023-04-30 -
多地景区发布限流公告:游客提前达到最高承载量
2023-04-30
-
守住网络直播的伦理底线
2021-12-16 -
石窟寺文化需要基于保护的“新开发”
2021-12-16 -
电影工作者不能远离生活
2021-12-16 -
提升隧道安全管控能力 智慧高速让司乘安心
2021-12-16 -
人民财评:提升消费体验,服务同样重要
2021-12-16 -
卫冕?突破?旗手?——武大靖留给北京冬奥会三大悬念
2021-12-16 -
新能源车险专属条款出台“三电”系统、起火燃烧等都可保
2021-12-16 -
美术作品中的党史 | 第97集《窗外》
2021-12-16 -
基金销售业务违规!浦发银行厦门分行等被厦门证监局责令改正
2021-12-16 -
保持稳定发展有支撑——从11月“成绩单”看中国经济走势
2021-12-16