openpyxl库操作excel表格
1.打开excel表格
import openpyxl # 导入模块wb = openpyxl.load_workbook('ce.xlsx') # 打开对应ce.xlsx文档
wb = openpyxl.load_workbook('ce.xlsx', data_only=True) # data_only=True可以读取excel公式的值sheet = wb['Sheet1'] # 指定名称
sheet = wb.worksheets[0] # 读取第一张表单A=sheet["B7"].value # 读取单元格值
sheet['A1'] = 'Hello world!' # 写入单元格值wb.save('ce.xlsx') # 对需要保存写入内容的workbook
wb.close() # 对程序中只读的workbook
2.新建excel表
from openpyxl import Workbookwb = Workbook()
TT = wb.active
TT.title = 'Sheet1'
# TT2 = wb.create_sheet("Sheet2", 1) # 位置顺序,0代表最前,1,2,3代表位置TT['A1'] = '111'
# TT2['A1'] = '222'wb.save('张志萍-线下客户-冯博文-X.X云途.xlsx') # 将新建的表格,命名后保存
读取表单
1.读取制定表单
sheet = wb['Sheet1'] # 指定表单名称
2.(推荐)以按顺序读取表单
sheet = wb.worksheets[0] # 读取第一张表单
sheet = wb.worksheets[1] # 读取第二张表单
3.获得excel下所有的表单
all_sheet = wb.sheetnames
print(all_sheet)>> ['Sheet12', '士大夫']
判断表单最大行数,结束位置:
sheet.max_row将为您提供工作表中最大的行数.sheet.max_column最大列数
从openpyxl 2.4版本开始,您还可以访问各个行和列,并使用它们的长度来回答问题.
len(ws[‘A’])
aa = sheet.max_row
print(aa)
>> 23
bb = sheet.max_column
print(bb)
>> 40
print(len(sheet['A']))
>> 23
推荐多方法断点最大长度和10次空值
jx_10 = 0
jz_10 = 0
ji = 4
while True:num = sheet["A{}".format(ji)].valuesku = sheet["D{}".format(ji)].valueprint(f"{one_file}:{sku}:{num}")hebing = (one_file, sku, num)self.max_list.append(hebing)# 判断1:出现10次无内容空格,将打断读取if num == None and sku == None:jx_10 += 1if jx_10 == 10:break# 判断2:出现10次_-,将打断读取if sku == "_-":jz_10 += 1if jz_10 == 10:break# 判断3:openpyxl给出的最大行数if ji == max_ji:print('---打断该循环:{}'.format(ji))breakji += 1
读取excel表格图片和把图片保存到excel表中
读取excel表格图片保存到本地
存在的问题1:图片【左上角】必须在单元格里,不要压到边框,右下角超出边框不受影响。(技巧将左上角移入框内即可),若出现:多张图左上角都在一个相同单元格内,则只读取最上层的一张图片
存在的问题2:
由于原始数据中存在照片未采集的记录,但是提取到的数据中这些记录都有对应的照片,原来image_loader = SheetImageLoader(ws)每次读完不会清空字典,所以就会把上一个文件中对应行的照片读取到当前文件的这一行,经过搜索查找发现是openpyxl-image-loader的问题,相关issues地址:images should not be static variable of SheetImageLoader 。所以在每次循环结束将image_loader 清空即可,添加这行代码:
image_loader._images.clear() # 循环读取多个excel记得加清空字典
from openpyxl import load_workbook
from openpyxl_image_loader import SheetImageLoaderpath = r'D:\python_code\订单分拣系统' # Excel文件路径
saveDir = "D:\python_code\订单分拣系统\\tu" # 图片存储路径wb = load_workbook(path + '\蒋春-线下-3.11 - 副本.xlsx') # Excel文件名ws = wb.worksheets[0] # 读取第一张表单image_loader = SheetImageLoader(ws)
num = ws.max_row # 总行数,我也不知道为什么是row
print(num)for i in range(4, num+1): # 从第2行开始,总行数要+1try:image = image_loader.get('B'+str(i)) # C列的图片image.show()# ws['Z{}'.format(i)] = image# ws.add_image(image, 'Z{}'.format(i))image.save(saveDir + str(i) + ".jpg") # 以Ai为名,存图片Ci# 排除没有图片,或图片超出单元格的情况except ValueError:print("caonm这一行没有图片:", i)wb.save(path + '\蒋春-线下-3.11 - 副本.xlsx') # 将新建的表格,命名后保存'''
测试
image=image_loader.get('C2') # 提取C2中的图片
image.show()
'''
把图保存到excel表中
from openpyxl import Workbook, load_workbook
from openpyxl.drawing.image import Image# wb = Workbook()
wb = load_workbook('蒋春-线下-3.11 - 副本.xlsx') # Excel文件名
sheet = wb.active# 设置文字图片单元格的行高列宽
column_width = 12.25
row_height = 80.10sheet.column_dimensions['Z'].width = column_width # 修改列D的列宽
sheet.row_dimensions[6].height = row_height # 修改行3的行高img = Image('tu7.jpg')
newsize = (90, 90)
img.width, img.height = newsize # 这两个属性分别是对应添加图片的宽高sheet.add_image(img, 'Z4')wb.save('蒋春-线下-3.11 - 副本.xlsx') # 将新建的表格,命名后保存
常规技巧写法:
1.以数值选择表单
sheet = wb.worksheets[0] # 读取第一张表单2.多处打断点,执行完成运行
max_ji = sheet.max_row # 最大行数jx_10 = 0
jz_10 = 0
ji = 4
while True:num = sheet["A{}".format(ji)].valuesku = sheet["D{}".format(ji)].value# 判断1:出现10次无内容空格,将打断读取if num == None and sku == None:jx_10 += 1if jx_10 == 10:break# 判断2:出现10次_-,将打断读取if sku == "_-":jz_10 += 1if jz_10 == 10:break# 判断3:openpyxl给出的最大行数if ji == max_ji:print('---打断该循环:{}'.format(ji))breakji += 1
解决无法读取xls
import win32com.client as win32fname = "D:\python_code\订单分拣系统\合并ts\龙-3.10刘-散单.xls"
# fname = "合并ts\龙-3.10刘-散单.xls"
excel = win32.gencache.EnsureDispatch('Excel.Application')
wb = excel.Workbooks.Open(fname)wb.SaveAs(fname+"x", FileFormat=51) # FileFormat = 51 is for .xlsx extension
wb.Close() # FileFormat = 56 is for .xls extension
excel.Application.Quit() # 后缀名的大小写不通配,需按实际修改:xls,或XLS
openpyxl生成的带有公式的表格,再次读取公式为None解决方案:
在生成的代码下写解决代码,在源头解决该问题
from win32com.client import Dispatchdef just_open(filename):xlApp = Dispatch("Excel.Application")xlApp.Visible = FalsexlBook = xlApp.Workbooks.Open(filename)xlBook.Save()xlBook.Close()'--- filename路径要求绝对路径,不然会报错 ---'
filename = "D:\python_code\裁片图归类\Test\张志萍-线下客户-冯博文-4.14云途.xlsx"
just_open(filename)
openpyxl库操作excel表格相关推荐
- Python3-excel文档操作(四):利用openpyxl库处理excel表格:将数据进行可视化展示在Excel中
1.简介: openpyxl不仅提供了将数据一行列的形式对应到Excel表格中,以及相关的添加,删除,获取等操作: 还提供了将数据进行图形化展示的相关组件(类),使得数据图形化在excel表格中的展示 ...
- Python3-excel文档操作(一):利用openpyxl库处理excel表格:excel表格的创建和数据的写入和读取excel
1. 简介 在最初处理excel表格时,我用的是xlwt和wlrd,表格后缀是.xls.但是,在处理时发现,一个sheet的记录长度如果超过65535,就写入不进去了. 后来,就采用openpyxl库 ...
- Python使用openpyxl库操作Excel之(一)创建并保存一个Excel文件
①安装openpyxl库 打开cmd,输入 pip install openpyxl 命令即可. ②创建并保存一个Excel文件 import openpyxl #生成一个 Workbook 的实例化 ...
- Python使用openpyxl库操作Excel之(二)访问已有的Excel文件
①指定路径打开Excel文件 使用openpyxl.load_workbook()方法来访问文件,括号内参数为文件的指定路径. 运行结果: <class 'openpyxl.workbook.w ...
- 使用openpyxl去操作Excel表格
对表格的数据写操作: from openpyxl import Workbook wb=Workbook()w1=wb.create_sheet('index',0) # w1["E4&qu ...
- qt 使用 xlsx库操作excel表格(代码准确性未验证)
Demo: #include"xlsxdocument.h"#include "xlsxformat.h" #include "xlsxcellran ...
- python openpyxl操作Excel表格
原创:未经允许不得转载,转载需标明出处 打算分为两个部分: 第一部分为:操作Excel表格 第二部分为:操作Excel图表 现在发布为第一部分内容 在最近的项目中的使用到了提取Android帧率日志, ...
- C#底层库--操作Excel帮助类(读取、导出表格)
系列文章 C#底层库–记录日志帮助类 本文链接:https://blog.csdn.net/youcheng_ge/article/details/124187709 C#底层库–MySQL脚本自动构 ...
- 新技能 | 使用python代码来高效操作Excel表格 (文末赠书5本)
新技能 | 使用python代码来高效操作Excel表格 (文末赠书5本) 在日常学习和工作中,少不了要跟Excel表格打交道.而我们作为程序猿,深知代码编程给人带来的便捷性,那我们怎么样使用代码来操 ...
最新文章
- CSharpGL(42)借助帧缓存实现渲染到纹理(RenderToTexture)
- java 复制Map对象(深拷贝与浅拷贝)
- java笔试题大全带答案_java笔试题大全带答案(经典11题)
- 已知相关系数求解联合分布律
- 卸载Microsoft Edge浏览器
- HDU2122 Ice_cream’s world III 【最小生成树】
- 最全5G手机芯片简史
- 小甲鱼C++快速入门学习笔记
- 智能指针的标准之争:Boost vs. Loki (转)
- CAD快速打印(批量打印)PDF/DWF/JPG/PNG\EPS/PLT:任意尺寸、纯命令
- 短视频处理LanSoEditor-SDK之抠图和动画设计
- 计算机基础- -认识内存
- Android系统设置settings应用学习(二)--源代码解析
- 大工2021年11月份《电气制图与CAD》课程设计离线作业
- oracle查询员工员工部门领导领导部门,oracle多表查询之经典面试题
- RTK固定解什么意思
- 台积电1nm,有新进展
- VQA系列论文(三)
- mysql副本集_mongodb分片+副本集总览
- 单片微型计算机实验指导,《单片微型计算机与接口技术》实验指导书..doc