zoukankan      html  css  js  c++  java
  • python 操作excel

    !!!注意事项

    1. 无论是使用pandas还是xlwt,他们的操作都是不会打开excel的
    2. 如果.save所有的操作都不会生效
    3. 尽量使用后.close不然下一次没法操作
    4. 打开excel后,就没法使用pandas或者xlwt,如果使用的话会报错,说不能同时打开文件,权限禁止
    5. 可以理解pandas操作excel和打开文件操作Excel是两个不同的事情

    pandas和openpyxl

    """
    Summary:
       (1)padas dataframe生成excel
       (2)excel中增加sheet表
    """
    import sys
    import pandas as pd
    from openpyxl import load_workbook
    """
    padas dataframe生成excel
    """
    def dataFramesheet(dataframe,excelWriter):
    	# DataFrame转换成excel中的sheet表
    	dataframe.to_excel(excel_writer=excelWriter, sheet_name="info1",index=None)
    	excelWriter.save()
    	excelWriter.close()
    
    """
    excel中新增sheet表
    """
    def excelAddSheet(dataframe,excelWriter,sheet_name):
    	book = load_workbook(excelWriter.path)
    	excelWriter.book = book
    	dataframe.to_excel(excel_writer=excelWriter,sheet_name=sheet_name,index=None)
    	excelWriter.close()
    
    
    if __name__ == '__main__':
    	# excel("111")
    	# excel("222")
    	# 数据集
    	# dataSet = [
    	# 	{"姓名": "张三", "年龄": 23, "性别": "男"},
    	# 	{"姓名": "李四", "年龄": 25, "性别": "男"},
    	# 	{"姓名": "王五", "年龄": 21, "性别": "女"}
    	# ]
    	dataSet = [
    		{"": ""}
    	]
    
    	# excelPath
    	excelPath = "E:\test.xlsx"
    
    	# 生成DataFrame
    	dataframe = pd.DataFrame(dataSet)
    
    	# 创建ExcelWriter 对象
    	excelWriter = pd.ExcelWriter(excelPath, engine='openpyxl')
    
    	# #生成excel
    	dataFramesheet(dataframe,excelWriter)
    
    	# excel中增加sheet
    	excelAddSheet(dataframe, excelWriter,"11")
    
    	excelAddSheet(dataframe, excelWriter,"22")
    	win32api.ShellExecute(0, 'open', excelPath, '', '', 1)
    
    

    xlrd xlwt 和 xlutils

    xlwt负责写
    xlrd负责读
    xlutilis负责追加写入

    import xlrd
    import xlutils
    import xlwt
    
    def excel(sheet_name):
    	# 需求,没有excel时候新建一个,有的时候打开这个excel,新建sheet,sheet里写入内容
    	if not os.path.exists("E:\test.xls"):
    		workbook = xlwt.Workbook(encoding='utf-8')  # 新建工作簿
    		sheet1 = workbook.add_sheet(sheet_name, 0)  # 新建sheet
    		sheet1.write(0, 0, "姓名")  # 第1行第1列数据
    		sheet1.write(0, 1, "学号")  # 第1行第2列数据
    		sheet1.write(1, 0, "张三")  # 第2行第1列数据
    		sheet1.write(1, 1, "036")  # 第2行第2列数据
    
    		workbook.save("E:\test.xls")  # 保存
    		sheet1.write(2, 2, "张三")  # 第2行第1列数据
    		sheet1.write(2, 3, "036")  # 第2行第2列数据
    
    		workbook.save("E:\test.xls")  # 保存
    	else:
    		# workbook = xlwt.open_workbook("E:\test.xls")
    		# sheets = workbook.sheet_names()  # 获取工作簿中的所有表格
    		# sheet1 = workbook.sheet_by_name(sheets[0])  # 获取工作簿中所有表格中的的第一个表格
    		# sheet1.write(0, 0, "姓名111")  # 第1行第1列数据
    		# sheet1.write(0, 1, "学号111")  # 第1行第2列数据
    		# sheet1.write(1, 0, "张三111")  # 第2行第1列数据
    		# sheet1.write(1, 1, "036111")  # 第2行第2列数据
    		#
    		# workbook.save("E:\test.xls")  # 保存
    		# sheet1.write(2, 2, "张三111")  # 第2行第1列数据
    		# sheet1.write(2, 3, "036111")  # 第2行第2列数据
    
    		# workbook.save("E:\test.xls")  # 保存
    		oldWb = xlrd.open_workbook("E:\test.xls")  # 先打开已存在的表
    		from xlutils.copy import copy
    		newWb = copy(oldWb)  # 复制
    		newWs = newWb.get_sheet(0) # 取sheet表
    		newWs.write(2, 4, "pass") # 写入 2行4列写入pass
    		newWb.save("E:\test.xls") # 保存至result路径
    

    win32api负责通过句柄操作excel

    可以打开excel
    通过句柄切换显示excel

    # 打开截图留痕excel
    win32api.ShellExecute(0, 'open', evidence_file, '', '', 1)
    # 等待excel打开,等待时间是不是有点长
    sleep(10)
    # 获得excel临时文件的句柄
    handle = win32gui.FindWindow("XLMAIN", "Microsoft Excel - test_evidence.xls")
    # 激活并显示窗口。
    win32gui.ShowWindow(handle, win32con.SW_MAXIMIZE)
    win32gui.EnableWindow(handle, True)
    win32gui.SetForegroundWindow(handle)
    

    如何获取句柄

    通过工具WinSpy64.exe

    点击图框中位置,移动到需要获取句柄的位置

    点击tree,找到想要获取的位置双击,软件中获取class和title即是代码里的FindWindow里的两个写入变量

  • 相关阅读:
    Java+Spring Boot+Shiro前后端分离权限基础框架
    201809~201810 期推荐文章
    Spring Boot 2.0.2 教程
    201808 期推荐文章
    201807 期推荐文章
    Simple-Mult-SSM 基于Simple-SSM扩展Hessian注解的javaweb前后端分离SSM基础框架
    hexo + github 搭建博客系列教程汇总
    DockPanel与GeckoFX、ChrominumFX、CefSharp结合使用问题
    APP并非一个人在战斗,还有API—Xamarin.Android回忆录
    我正在使用Xamarin的跨平台框架—Xamarin.Android回忆录
  • 原文地址:https://www.cnblogs.com/Alice1005/p/13650227.html
Copyright © 2011-2022 走看看