python 使用xlsxwriter循环向excel中插入数据和图片的操作
作者:读童话的狼 发布时间:2023-01-30 15:08:47
标签:python,xlsxwriter,excel,数据,图片
写入Excel中后有显示第一列客户款号总库存这些,开始写在第12行第一列开始写入,一行写入5个,然后再隔12行,再写入下边的数据,图片需要对应客户款号在Excel写入图片,类似下面的格式
import xlsxwriter
import os
#以空字符填充缺失值,不然写入数据会报错
data.fillna('',inplace=True)
#创建一个新Excel文件并添加一个工作表。
workbook = xlsxwriter.Workbook('images.xlsx')
worksheet = workbook.add_worksheet()
# # 加宽第2列,,根据图片缩放大小进行调整。
worksheet.set_column('B:B', 20)
worksheet.set_column('D:D', 20)
worksheet.set_column('F:F', 20)
worksheet.set_column('H:H', 20)
##写入数据和图片
for i in range(len(data)):
for j in range(4):
worksheet.write(i//5*16+j+12,i%5*2 ,['客户款号','总库存','零售数量','前一周'][j])
worksheet.write(i//5*16+j+12,i%5*2+1 ,data.iloc[i,0::].values[j])
#插入图片,insert_image(位置行,位置列,文件名,缩放比例)
if data.iloc[i,0::].values[0]+'.jpg' not in os.listdir('.\img\\'):
print(i,'找不到',data.iloc[i,0::].values[0]+'.jpg')
else:
worksheet.insert_image(i//5*16,i%5*2+1,'img/'+data.iloc[i,0::].values[0]+'.jpg',{'x_scale': 0.1, 'y_scale': 0.12})
print(i,'写入成功!')
i+=1
workbook.close()
0 写入成功!
1 写入成功!
2 找不到 N038400237.jpg
3 找不到 N038400301.jpg
4 找不到 N039400310.jpg
5 找不到 N038400552.jpg
6 写入成功!
7 找不到 N038401101.jpg
8 找不到 N039400105.jpg
9 找不到 N039400219.jpg
效果如下:
当然还有合并单元格,设置单元格格式,以及处理图片的操作没写,有时间再来补充!
补充:python对excel表格处理需要导入相关的库:
(1)、操作xls格式的表格文件:
读取:xlrd
写入:xlwt
修改(追加写入):xlutils
(2)、操作xlsx格式的表格文件:
读取/写入:openpyxl
*如果用操作xls的方法去写入xlsx文件,会导致文件损坏无法打开;反之一样。
(一)、操作xls格式表格
1、读取excel表格数据
import xlrd #从excle里读数据
import xlwt #创建新的表格写入数据
import xlutils #往已有表格中追加数据
class IOExcel(object):
def __init__(self,file):
self.file = file
def get_sheet(self,sheetname):
excelfile=xlrd.open_workbook(self.file)
self.sheet = excelfile.sheet_by_name(sheetname)
return self.sheet
#获取第*行的数据
def get_rowData(self,row):
cols = self.sheet.ncols #获取sheet页有多少列
Cells = []
for i in range(0,cols):
Cells.append(self.sheet.cell(row,i).value)
return Cells
2、创建表格写入数据
def write_excel(self,sheet_name, value):
index = len(value) # 获取需要写入数据的行数
workbook = xlwt.Workbook() # 新建一个工作簿
sheet = workbook.add_sheet(sheet_name) # 在工作簿中新建一个表格
for i in range(0, index):
for j in range(0, len(value[i])):
sheet.write(i, j, value[i][j]) #向表格中写入数据(对应的行和列)
workbook.save(self.file) # 保存工作簿
3、向已存在表格中追加数据
def write_excel_xls_append(self,value):
index = len(value) # 获取需要写入数据的行数
workbook = xlrd.open_workbook(self.file) # 打开工作簿
sheets = workbook.sheet_names() # 获取工作簿中的所有表格
worksheet = workbook.sheet_by_name(sheets[0]) # 获取工作簿中所有表格中的的第一个表格
rows_old = worksheet.nrows # 获取表格中已存在的数据的行数
new_workbook = copy(workbook) # 将xlrd对象拷贝转化为xlwt对象
new_worksheet = new_workbook.get_sheet(0) # 获取转化后工作簿中的第一个表格
for i in range(0, index):
for j in range(0, len(value[i])):
new_worksheet.write(i+rows_old, j, value[i][j]) # 追加写入数据,注意是从i+rows_old行开始写入
new_workbook.save(self.file) # 保存工作簿
(二)、操作xlsx格式表格
wb = openpyxl.Workbook() #创建一个新的excel
we = wb.create_sheet('第二页',0) #修改sheet页的名字;设置插入sheet页的位置,默认在上一页后面( 初始创建的excel是只有一个默认sheet页的,所以设置位置的值大于1效果都一样,都是在默认sheet页的后面接着)
# we.title = '你好' # 修改sheet页的名字
#操作单元格
we['A1']=123124
we['B2']='你好'
print(we.cell(1,2,'123123').value) #设置cell的行号和列号和值,返回cell的值
wb.save('C:\\Users\\t_ful\\PycharmProjects\\test\\element\\t.xlsx') #保存表格
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。
来源:https://blog.csdn.net/fffsolomon/article/details/111594237


猜你喜欢
- css的流行导致了标签的流行,很直观,看起来很清爽。流行的一部分,还有很多种功能强大且美观的导航。。。1. Change.org2. N.D
- (下面的代码原来我想用折叠的代码的,但是在google里面老是添加不了折叠的代码,所以就整屏的贴出来了,望大家不要见外。) 朋友的比较好的存
- 你是不是在学习python的时候在使用虚拟机系统进行开发,来回切换很是不方便,那么今天给大家推荐一个pycharm强大的功能。接下来我们利用
- 例子一def filter(self, record): """Our custom
- 基础知识# 在Linux操作系统下,Python3的默认环境编码变为了utf-8编码,所以在编写代码的时候,字符串大部分都是以utf-8处理
- 本文讲解了一个使用XML技术上传文件的例子,使用该方法没有传统方法中的种种限制。 这个例子讲述了如何使用MSXML3.0和ADO Strea
- 2.1数据的爬取代码:import pandas as pddata=pd.read_csv("example_data.csv&
- oracle mysql 中的“不等于“ <> != ^= is notoracleoracle中的
- 引言最近python语言大火,除了在科学计算领域python有用武之地之外,在游戏、后台等方面,python也大放异彩,本篇博文将按照正规的
- 1.1 简介深层神经网络一般都需要大量的训练数据才能获得比较理想的结果。在数据量有限的情况下,可以通过数据增强(Data Augmentat
- 1、实现目标Golang 使用excelize 导出表格到浏览器下载或者保存到本地。后续导入的话也会写到这里2、使用的库go get git
- Numpy是什么很简单,Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy、matplotlib一起使用。
- 自己写了一下,适用而已,不太好,应该还能优化。先自己记录一下。不说废话了,直接贴代码最好:/* * 获得时间差,时间格式为 年-月
- 先由exp把数据卸出到文件系统, 产生一个.dmp文件, 然后必要时再由imp将数据装入数据库. 对于一般中小型数据库来说, 全数据库的ex
- 1. 列表使用sum, 如下代码,对1维列表和二维列表,numpy.sum(a)都能将列表a中的所有元素求和并返回,a.sum()用法是非法
- 最近社会猪可是火遍了大江南北,不蹭下热度可对不起它。见过手画的佩奇,见过用代码画的吗?没有?那就来看我大显身手。用python的turtle
- laravel 实现短信验证码功能,搜索资料发现比较流行的有两个包:一个是laravel sms 地址 https://gith
- 最常见的XML数据类型有:Element, Attribute,Comment, Text. &nbs
- 在许多语言中,你可以轻松地将任何数据类型转换为字符串,只需将其与字符串连接,或者使用类型转换表达式即可。但是,如果你在Go中尝试执行似乎很明
- 近日,朋友写一个关于成绩管理的系统,其中遇到一个小问题。如果按照SQLSERVER的ORDER 排序时,比如遇到两个100分,结果必然是名次