python操作excel让工作自动化


Posted in Python onAugust 09, 2019

某局某领导给了3只excel文件,一只里面有4个sheet需要处理,一个sheet有250+列,算下来总共有3000+列需要手动反复插入、删除列、拷贝、求和,所以给了4天的时间要完成。

我不愿意做大量简单而且又是重复性工作,看了看3只表格的格式基本一样,于是我用python写了30行代码完成了这个“艰巨”任务。

0x01

用python操作excel需要安装xlrd、xlwt(或者其他的模块也行)。

读取excel文件:workbook = xlrd.open_workbook('filename.xlsx')

获取所有表名:sheet_names = workbook.sheet_names()

通过索引顺序获取一个工作表:sheet0 = workbook.sheets()[0] || sheet1 = workbook.sheet_by_index(1)

通过名称获取一个工作表:sheet3= data.sheet_by_name(u'sheetname')

获取表的行、列大小:rows = sheet.nrows || cols = sheet.ncols

获取指定行、列的值:col0_value = sheet.col_valsue(0) || row0_value = sheet.row_values(0)

创建工作对象:wk = xlwt.Workbook(encoding='utf-8')

添加sheet对象:sheet0 = wk.add_sheet(sheetname,cell_overwrite=True)

将值写入单元格:sheet0.write(row,col,value)

保存文件:wk.save('filename.xls')

0x02

# coding=utf-8
import xlrd
import xlwt
 
workbook = xlrd.open_workbook('2014年排放量.xlsx')
sheet_names = workbook.sheet_names()
 
 
#通过索引顺序获取一个工作表
sheet0 = workbook.sheets()[0]
sheet1 = workbook.sheet_by_index(1)
sheet2 = workbook.sheet_by_index(2)
sheet3 = workbook.sheet_by_index(3)
sheet4 = workbook.sheet_by_index(4)
sheet5 = workbook.sheet_by_index(5)
sheet6 = workbook.sheet_by_index(6)
sheet7 = workbook.sheet_by_index(7)
sheet8 = workbook.sheet_by_index(8)
#通过名称获取一个工作表
#table = data.sheet_by_name(u'Sheet1')
 
#获取多少行、列
sht0_rows = sheet0.nrows
sht0_cols = sheet0.ncols
 
#获取指定单元格的值
temp = sheet0.cell(0,2)
 
#获取指定行、列的值
temp_col0 = sheet0.col_values(0)
temp_row0 = sheet0.row_values(0)
temp_col1 = sheet0.col_values(1)
temp_row1 = sheet0.row_values(1)
 
#需要204个单元格 一共tb0_rows个 减去前两个
 
'''
for i in range(204/6):#循环34次
 for j in temp_row:
  j[2:8]
'''
 
 
#print(tb0_rows,tb0_cols,temp,temp_row,temp_row[2:8],temp_col)
 
#取选定工作范围
#print(temp_row[2:206])
 
wk = xlwt.Workbook(encoding='utf-8')
wk_lst = []#创建sheet列表
for shtname in sheet_names:
 #print(shtname)
 wk_lst.append(wk.add_sheet(shtname,cell_overwrite_ok=True))
#print(len(wk_lst))
 
'''测试插入表格
for c in range(len(temp_col0)):
 wk_lst[0].write(c,0,temp_col0[c])
 #print(temp_col[c])
'''
 
#需要读的sheet列表
xlrd_sheet_list = [sheet0,sheet1,sheet2,sheet3]
 
for tm in range(len(wk_lst)):
 if tm<4:
  '''1. 创建样表'''
  for x in range(2):
   #print('----------x:',x)
   temp_col = sheet0.col_values(x)
   for c in range(len(temp_col)):
    #print('--------c:',c)
    #print(temp_col[c])
    wk_lst[tm].write(c,x,temp_col[c])
  temp_row = sheet0.row_values(0)
  for r in range(len(temp_row)-2):
   #print(tm,len(temp_row))
   wk_lst[tm].write(0,r+2,temp_row[r+2])
  
  '''2. 写入工作区域'''
  for r in range(2,13):#创建工作行
   tmp_row = xlrd_sheet_list[tm].row_values(r)
   w = tmp_row[2:206] # 切片获取该行工作列
   #print(len(w) / 6)
   x = 0
   for i in range(int(len(w) / 6)):
    sum_pf = round(w[0 + x] + w[1 + x] + w[2 + x] + w[3 + x] + w[4 + x] + w[5 + x], 2)
    wk_lst[tm].write(r,2+x,sum_pf)
    print(sum_pf)
    x += 6
   print("----------------------------------------r:",r,2+x,sum_pf)
  #for i in range(2,13):
  # print(i)
  
wk.save('nb.xls')
 
'''#测试创建excel文件
wkt = xlwt.Workbook()
ws = wkt.add_sheet('CO')
ws.write(0,0,'1')
wkt.save('fuck.xls')
'''
 
'''
#临时注释 一会儿放开
for r in range(2,13):#创建工作行
 tmp_row = sheet0.row_values(r)
 w = tmp_row[2:206] # 切片获取该行工作列
 #print(len(w) / 6)
 x = 0
 y = 0
 for i in range(int(len(w) / 6)):
  #wk_lst[0].write(2+)
  print(round(w[0 + x] + w[1 + x] + w[2 + x] + w[3 + x] + w[4 + x] + w[5 + x], 2))
  x += 6
 print("----------------------------------------",r)
'''
 
'''#测试切片 相加
w = temp_row[2:206]#切片获取
print(len(w)/6)
x=0
for i in range(int(len(w)/6)):
 print(round(w[0+x]+w[1+x]+w[2+x]+w[3+x]+w[4+x]+w[5+x],2))
 x+=6
'''

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python生成器(Generator)详解
Apr 13 Python
Python3 适合初学者学习的银行账户登录系统实例
Aug 08 Python
Windows下安装Django框架的方法简明教程
Mar 28 Python
对python制作自己的数据集实例讲解
Dec 12 Python
解决Django生产环境无法加载静态文件问题的解决
Apr 23 Python
django使用haystack调用Elasticsearch实现索引搜索
Jul 24 Python
Python列表的切片实例讲解
Aug 20 Python
基于python进行抽样分布描述及实践详解
Sep 02 Python
Python selenium自动化测试模型图解
Apr 15 Python
使用python-cv2实现视频的分解与合成的示例代码
Oct 26 Python
python3 re返回形式总结
Nov 20 Python
python使用pygame创建精灵Sprite
Apr 06 Python
python笔记_将循环内容在一行输出的方法
Aug 08 #Python
python中的列表与元组的使用
Aug 08 #Python
详解python中的数据类型和控制流
Aug 08 #Python
python爬虫selenium和phantomJs使用方法解析
Aug 08 #Python
Python2和3字符编码的区别知识点整理
Aug 08 #Python
Python编程中类与类的关系详解
Aug 08 #Python
python os.fork() 循环输出方法
Aug 08 #Python
You might like
ThinkPHP3.1新特性之内容解析输出详解
2014/06/19 PHP
php实现的XML操作(读取)封装类完整实例
2017/02/23 PHP
PHP使用文件锁解决高并发问题示例
2018/03/29 PHP
jqPlot jquery的页面图表绘制工具
2009/07/25 Javascript
Array栈方法和队列方法的特点说明
2014/01/24 Javascript
JavaScript中的console.trace()函数介绍
2014/12/29 Javascript
超赞的动手创建JavaScript框架的详细教程
2015/06/30 Javascript
使用Chart.js图表库制作漂亮的响应式表单
2015/10/28 Javascript
JavaScript仿商城实现图片广告轮播实例代码
2016/02/06 Javascript
JS实现1000以内被3或5整除的数字之和
2016/02/18 Javascript
jQuery Easyui datagrid/treegrid 清空数据
2016/07/09 Javascript
纯js实现手风琴效果代码
2020/04/17 Javascript
从零学习node.js之详解异步控制工具async(八)
2017/02/27 Javascript
探索Vue高阶组件的使用
2018/01/08 Javascript
详解React 服务端渲染方案完美的解决方案
2018/12/14 Javascript
vue接入腾讯防水墙代码
2019/05/07 Javascript
前端Electron新手入门教程详解
2019/06/21 Javascript
原生js实现点击轮播切换图片
2020/02/11 Javascript
vue v-model的用法解析
2020/10/19 Javascript
Python判断文件和文件夹是否存在的方法
2015/05/21 Python
关于python的list相关知识(推荐)
2017/08/30 Python
python3.6+opencv3.4实现鼠标交互查看图片像素
2018/02/26 Python
详解django中使用定时任务的方法
2018/09/27 Python
用python写PDF转换器的实现
2020/10/29 Python
Python实现一个论文下载器的过程
2021/01/18 Python
Oracle中delete,truncate和drop的区别
2016/05/05 面试题
室内设计专业个人的自我评价
2013/12/18 职场文书
读群众路线心得体会
2014/03/07 职场文书
詹天佑教学反思
2014/04/30 职场文书
体育教育毕业生自荐信
2014/06/29 职场文书
国庆宣传标语
2014/06/30 职场文书
2015年大学班长个人工作总结
2015/04/24 职场文书
校车安全管理责任书
2015/05/11 职场文书
童年读书笔记
2015/06/26 职场文书
培训心得体会怎么写
2016/01/25 职场文书
go语言使用Casbin实现角色的权限控制
2021/06/26 Golang