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 相关文章推荐
python3.0 字典key排序
Dec 24 Python
跟老齐学Python之玩转字符串(3)
Sep 14 Python
Python中用max()方法求最大值的介绍
May 15 Python
详解Django中的过滤器
Jul 16 Python
Python协程的用法和例子详解
Sep 09 Python
python3监控CentOS磁盘空间脚本
Jun 21 Python
使用python批量化音乐文件格式转换的实例
Jan 09 Python
python文字转语音的实例代码分析
Nov 12 Python
Python命令行click参数用法解析
Dec 19 Python
TensorFlow 显存使用机制详解
Feb 03 Python
TensorFlow中tf.batch_matmul()的用法
Jun 02 Python
还在手动盖楼抽奖?教你用Python实现自动评论盖楼抽奖(一)
Jun 07 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
php使用正则表达式提取字符串中尖括号、小括号、中括号、大括号中的字符串
2020/04/05 PHP
php pdo连接数据库操作示例
2019/11/18 PHP
如何取得中文输入的真实长度?
2006/06/24 Javascript
对google个性主页的拖拽效果的js的完整注释[转]
2007/04/10 Javascript
js 实现无干扰阴影效果 简单好用(附文件下载)
2009/12/27 Javascript
Array.prototype.slice.apply的使用方法
2010/03/17 Javascript
jQuery 锚点跳转滚动条平滑滚动一句话代码
2010/04/30 Javascript
js查错流程归纳
2012/05/04 Javascript
javascript获取浏览器类型和版本的方法(js获取浏览器版本)
2014/03/13 Javascript
模拟一个类似百度google的模糊搜索下拉列表
2014/04/15 Javascript
jquery实现的导航固定效果
2014/04/28 Javascript
node.js中使用socket.io的方法
2014/12/15 Javascript
NodeJS学习笔记之Http模块
2015/01/13 NodeJs
深入理解JavaScript系列(31):设计模式之代理模式详解
2015/03/03 Javascript
javascript控制台详解
2015/06/25 Javascript
精通JavaScript的this关键字
2020/05/28 Javascript
Javascript中的arguments对象
2016/06/20 Javascript
微信小程序 教程之小程序配置
2016/10/17 Javascript
微信小程序 wxapp画布 canvas详细介绍
2016/10/31 Javascript
angular内置provider之$compileProvider详解
2017/09/27 Javascript
jQuery length 和 size()区别总结
2018/04/26 jQuery
利用jsonp解决js读取本地json跨域的问题
2018/12/11 Javascript
vue中各种通信传值方式总结
2019/02/14 Javascript
JS学习笔记之数组去重实现方法小结
2019/05/29 Javascript
JS继承定义与使用方法简单示例
2020/02/19 Javascript
在Uni中使用Vue的EventBus总线机制操作
2020/07/31 Javascript
python微信公众号开发简单流程
2018/03/23 Python
Python中常用的8种字符串操作方法
2019/05/06 Python
使用css3匹配手机屏幕横竖状态
2014/01/27 HTML / CSS
历史专业个人求职信分享
2013/12/20 职场文书
新学期开学寄语
2014/01/18 职场文书
外贸采购员岗位职责
2015/04/03 职场文书
2016年感恩父亲节活动总结
2016/04/01 职场文书
学校2016年九九重阳节活动总结
2016/04/01 职场文书
教你做个可爱的css滑动导航条
2021/06/15 HTML / CSS
总结Pyinstaller打包的高级用法
2021/06/28 Python