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高并发异步服务器核心库forkcore使用方法
Nov 26 Python
用Python操作字符串之rindex()方法的使用
May 19 Python
Python列出一个文件夹及其子目录的所有文件
Jun 30 Python
使用Python的Tornado框架实现一个Web端图书展示页面
Jul 11 Python
一个Python最简单的接口自动化框架
Jan 02 Python
python实现百万答题自动百度搜索答案
Jan 16 Python
Python模块文件结构代码详解
Feb 03 Python
python:print格式化输出到文件的实例
May 14 Python
python使用pipeline批量读写redis的方法
Feb 18 Python
python爬取微信公众号文章的方法
Feb 26 Python
Python 如何实现数据库表结构同步
Sep 29 Python
Python进程间的通信之语法学习
Apr 11 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 flv视频时间获取函数
2010/06/29 PHP
PHP正则表达式之定界符和原子介绍
2012/10/05 PHP
基于PHP选项与信息函数的使用详解
2013/05/10 PHP
php中{}大括号是什么意思
2013/12/01 PHP
php实现的mongodb操作类实例
2015/04/03 PHP
PHP操作XML中XPath的应用示例
2019/07/04 PHP
使用JQuery和s3captche实现一个水果名字的验证
2009/08/14 Javascript
JQuery 确定css方框模型(盒模型Box Model)
2010/01/22 Javascript
js注意img图片的onerror事件的分析
2011/01/01 Javascript
简单几行JS Code实现IE邮件转发新浪微博
2013/07/03 Javascript
Jquery实现Div上下移动示例
2014/04/23 Javascript
javascript中expression的用法整理
2014/05/13 Javascript
全面兼容的javascript时间格式化函数(比较实用)
2014/05/14 Javascript
使用HTML5+Boostrap打造简单的音乐播放器
2016/08/05 Javascript
Javascript中常见的逻辑题和解决方法
2016/09/17 Javascript
Nodejs实现短信验证码功能
2017/02/09 NodeJs
Angular 4.x 路由快速入门学习
2017/05/03 Javascript
element表格翻页第2页从1开始编号(后端从0开始分页)
2019/12/10 Javascript
jquery实现上传图片功能
2020/06/29 jQuery
JavaScript实现世界各地时间显示
2020/09/07 Javascript
[59:59]EG vs IG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[01:00:10]完美世界DOTA2联赛PWL S2 FTD vs Inki 第二场 11.21
2020/11/24 DOTA
Python3基础之list列表实例解析
2014/08/13 Python
对python-3-print重定向输出的几种方法总结
2018/05/11 Python
Python中pip更新和三方插件安装说明
2018/07/08 Python
python 计算平均平方误差(MSE)的实例
2019/06/29 Python
pymysql 开启调试模式的实现
2019/09/24 Python
Python实现二叉树的最小深度的两种方法
2019/09/30 Python
PyTorch学习:动态图和静态图的例子
2020/01/06 Python
CSS3实现水平居中、垂直居中、水平垂直居中的实例代码
2020/02/27 HTML / CSS
Html5 Canvas实现图片标记、缩放、移动和保存历史状态功能 (附转换公式)
2020/03/18 HTML / CSS
乐高瑞士官方商店:LEGO CH
2020/08/16 全球购物
个人收入证明模板
2014/09/18 职场文书
2014房屋登记授权委托书
2014/10/13 职场文书
怎样写好工作计划
2019/04/10 职场文书
MySQL库表太大怎么办? 数据库分库分表项目实践
2022/04/11 MySQL