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实现SVN的目录周期性备份实例
Jul 17 Python
Python的包管理器pip更换软件源的方法详解
Jun 20 Python
Python中文件I/O高效操作处理的技巧分享
Feb 04 Python
Python生成密码库功能示例
May 23 Python
CentOS下使用yum安装python-pip失败的完美解决方法
Aug 16 Python
Python多线程threading和multiprocessing模块实例解析
Jan 29 Python
Python多线程原理与用法实例剖析
Jan 22 Python
浅谈django url请求与数据库连接池的共享问题
Aug 29 Python
Centos7 下安装最新的python3.8
Oct 28 Python
Python 定义只读属性的实现方式
Mar 05 Python
python 爬取豆瓣网页的示例
Apr 13 Python
python面向对象版学生信息管理系统
Jun 24 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 操作调试的方法
2012/07/12 PHP
php防注入及开发安全详细解析
2013/08/09 PHP
PHP goto语句简介和使用实例
2014/03/11 PHP
destoon后台网站设置变成空白的解决方法
2014/06/21 PHP
PHP编程开发怎么提高编程效率 提高PHP编程技术
2015/11/09 PHP
PHP将整数数字转换为罗马数字实例分享
2019/03/17 PHP
laravel 实现向公共模板中传值 (view composer)
2019/10/22 PHP
ThinkPHP5.0框架实现切换数据库的方法分析
2019/10/30 PHP
二级域名或跨域共享Cookies的实现方法
2008/08/07 Javascript
用jQuery模拟页面加载进度条的实现代码
2011/12/19 Javascript
Node.js中Request模块处理HTTP协议请求的基本使用教程
2016/03/31 Javascript
jQuery获取同级元素的简单代码
2016/07/09 Javascript
通过原生JS实现为元素添加事件的方法
2016/11/23 Javascript
jQuery拖拽通过八个点改变div大小
2020/11/29 Javascript
Vue实现web分页组件详解
2017/11/28 Javascript
详解各版本React路由的跳转的方法
2018/05/10 Javascript
微信小程序日期选择器实例代码
2018/07/18 Javascript
Javascript 之封装(Package)
2018/09/14 Javascript
vue给组件传递不同的值方法
2018/09/29 Javascript
React手稿之 React-Saga的详解
2018/11/12 Javascript
jQuery无冲突模式详解
2019/01/17 jQuery
微信小程序自定义导航栏(模板化)
2019/11/15 Javascript
Python实现的爬虫功能代码
2017/06/24 Python
PyQt5利用QPainter绘制各种图形的实例
2017/10/19 Python
Python for循环中的陷阱详解
2018/07/13 Python
python使用paramiko模块通过ssh2协议对交换机进行配置的方法
2019/07/25 Python
详解Python中的分支和循环结构
2020/02/11 Python
python json.dumps中文乱码问题解决
2020/04/01 Python
解决jupyter notebook打不开无反应 浏览器未启动的问题
2020/04/10 Python
Python selenium使用autoIT上传附件过程详解
2020/05/26 Python
Allsole美国/加拿大:英国一家专门出售品牌鞋子的网站
2018/10/21 全球购物
求职简历中的自我评价分享
2013/12/08 职场文书
高一化学教学反思
2014/02/05 职场文书
小学数学教研活动总结
2014/07/01 职场文书
丧事答谢词大全
2015/09/30 职场文书
聊聊Python String型列表求最值的问题
2022/01/18 Python