python 使用xlsxwriter循环向excel中插入数据和图片的操作


Posted in Python onJanuary 01, 2021

写入Excel中后有显示第一列客户款号总库存这些,开始写在第12行第一列开始写入,一行写入5个,然后再隔12行,再写入下边的数据,图片需要对应客户款号在Excel写入图片,类似下面的格式

python 使用xlsxwriter循环向excel中插入数据和图片的操作

python 使用xlsxwriter循环向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 使用xlsxwriter循环向excel中插入数据和图片的操作

当然还有合并单元格,设置单元格格式,以及处理图片的操作没写,有时间再来补充!

补充: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')  #保存表格

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。如有错误或未考虑完全的地方,望不吝赐教。

Python 相关文章推荐
python中MySQLdb模块用法实例
Nov 10 Python
利用Python和OpenCV库将URL转换为OpenCV格式的方法
Mar 27 Python
python实现文件快照加密保护的方法
Jun 30 Python
分享几道你可能遇到的python面试题
Jul 24 Python
使用tensorflow实现AlexNet
Nov 20 Python
Python利用字典将两个通讯录文本合并为一个文本实例
Jan 16 Python
Python中的类与类型示例详解
Jul 10 Python
python pygame实现球球大作战
Nov 25 Python
Python3 A*寻路算法实现方式
Dec 24 Python
利用python实现逐步回归
Feb 24 Python
基于python实现简单网页服务器代码实例
Sep 14 Python
Python Pandas list列表数据列拆分成多行的方法实现
Dec 14 Python
python安装mysql的依赖包mysql-python操作
Jan 01 #Python
python UDF 实现对csv批量md5加密操作
Jan 01 #Python
安装python依赖包psycopg2来调用postgresql的操作
Jan 01 #Python
python matlab库简单用法讲解
Dec 31 #Python
Pytorch1.5.1版本安装的方法步骤
Dec 31 #Python
python爬虫基础之urllib的使用
Dec 31 #Python
python opencv实现直线检测并测出倾斜角度(附源码+注释)
Dec 31 #Python
You might like
无线电广播与收音机发展的历史回眸
2021/03/02 无线电
PHP批量生成缩略图的代码
2008/07/19 PHP
10 个经典PHP函数
2013/10/17 PHP
php bootstrap实现简单登录
2016/03/08 PHP
让你的PHP7更快之Hugepage用法分析
2016/05/31 PHP
找到了一篇jQuery与Prototype并存的冲突的解决方法
2007/08/29 Javascript
基于jQuery架构javascript基础体系
2011/01/01 Javascript
jquery 实现表单验证功能代码(简洁)
2012/07/03 Javascript
动态添加option及createElement使用示例
2014/01/26 Javascript
如何改进javascript代码的性能
2015/04/02 Javascript
jQuery实现仿新浪微博浮动的消息提示框(可智能定位)
2015/10/10 Javascript
正则表达式(语法篇推荐)
2016/06/24 Javascript
浅析JavaScript中break、continue和return的区别
2016/11/30 Javascript
js实现随机抽选效果、随机抽选红色球效果
2017/01/13 Javascript
javascript 删除数组元素和清空数组的简单方法
2017/02/24 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图和饼图的组合图效果示例【附demo源码下载】
2017/03/09 Javascript
利用PM2部署node.js项目的方法教程
2017/05/10 Javascript
页面间固定参数,通过cookie传值的实现方法
2017/05/31 Javascript
Vue实现搜索结果高亮显示关键字
2019/05/28 Javascript
node运行js获得输出的三种方式示例详解
2020/07/02 Javascript
vue打包静态资源后显示空白及static文件路径报错的解决
2020/09/02 Javascript
[01:17:55]VGJ.T vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/20 DOTA
Python如何读取MySQL数据库表数据
2017/03/11 Python
Python序列循环移位的3种方法推荐
2018/04/09 Python
python 判断矩阵中每行非零个数的方法
2019/01/26 Python
关于pycharm中pip版本10.0无法使用的解决办法
2019/10/10 Python
python 的numpy库中的mean()函数用法介绍
2020/03/03 Python
python3 简单实现组合设计模式
2020/07/02 Python
党员个人思想汇报
2013/12/28 职场文书
优秀小学生家长评语
2014/01/30 职场文书
幼儿园园长新年寄语2015
2014/12/08 职场文书
巾帼文明岗汇报材料
2014/12/24 职场文书
订货会邀请函
2015/01/31 职场文书
后勤个人工作总结
2015/02/28 职场文书
撤诉状格式范本
2015/05/19 职场文书
婚礼伴郎致辞
2015/07/28 职场文书