Python使用xlsxwriter循环向Excel插入数据与图片的完整实现
本文详细介绍如何使用Python的xlsxwriter库,通过循环逻辑将客户款号、库存等数据按特定格式写入Excel,并自动关联插入对应图片。文章涵盖xls与xlsx格式库的区别、常见操作类库对比,以及xls/xlsx的具体读写代码示例,帮助开发者高效处理Excel自动化任务。
在Excel文件中,第一列显示客户款号及总库存信息。数据从第12行第1列开始写入,每行写入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
最终生成的Excel效果如下图所示:

此外,文中未涉及合并单元格、设置单元格格式及图片处理等细节操作,后续如有时间将补充相关内容。
补充说明:Python处理Excel表格需导入相应的第三方库,具体分类如下:
(1)、针对xls格式表格文件的操作:
读取操作使用库:xlrd
写入操作使用库:xlwt
修改(追加写入)操作使用库:xlutils
(2)、针对xlsx格式表格文件的操作:
读取与写入操作均使用库:openpyxl
注意:若使用处理xls格式的库去写入xlsx文件,会导致文件损坏无法打开;反之,使用处理xlsx的库去操作xls文件同样会导致错误。
(一)、操作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') #保存表格
以上为个人经验分享,旨在提供参考。如有错误或未考虑周全之处,欢迎指正。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













