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 生成不重复的随机数的代码
May 15 Python
python批量导出导入MySQL用户的方法
Nov 15 Python
Python中unittest模块做UT(单元测试)使用实例
Jun 12 Python
python cx_Oracle模块的安装和使用详细介绍
Feb 13 Python
Python实现的排列组合计算操作示例
Oct 13 Python
python方向键控制上下左右代码
Jan 20 Python
python批量解压zip文件的方法
Aug 20 Python
Python标准库json模块和pickle模块使用详解
Mar 10 Python
Python中格式化字符串的四种实现
May 26 Python
使用Keras实现Tensor的相乘和相加代码
Jun 18 Python
解决Django响应JsonResponse返回json格式数据报错问题
Aug 09 Python
Pycharm连接gitlab实现过程图解
Sep 01 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
用PHP和ACCESS写聊天室(五)
2006/10/09 PHP
菜鸟学PHP之Smarty入门
2007/01/04 PHP
自己前几天写的无限分类类
2007/02/14 PHP
php实现图片添加水印功能
2014/02/13 PHP
php获取百度收录、百度热词及百度快照的方法
2015/04/02 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
2017/12/21 PHP
JS URL传中文参数引发的乱码问题
2009/09/02 Javascript
javascript实现上传图片并预览的效果实现代码
2011/04/11 Javascript
window.event快达到全浏览器支持了,以后使用就方便了
2011/11/30 Javascript
js前台判断开始时间是否小于结束时间
2012/02/23 Javascript
jquery 获取自定义属性(attr和prop)的实现代码
2012/06/27 Javascript
getComputedStyle与currentStyle获取样式(style/class)
2013/03/19 Javascript
为jQuery添加Webkit的触摸的方法分享
2014/02/02 Javascript
在JS中解析HTML字符串示例代码
2014/04/16 Javascript
使用jquery实现鼠标滑过弹出更多相关信息层附源码下载
2015/11/23 Javascript
关于Javascript回调函数的一个妙用
2016/08/29 Javascript
JavaScript重定向URL参数的两种方法小结
2016/10/19 Javascript
详解React开发必不可少的eslint配置
2018/02/05 Javascript
layer的prompt弹出框,点击回车,触发确定事件的方法
2019/09/06 Javascript
微信小程序跨页面数据传递事件响应实现过程解析
2019/12/19 Javascript
vue-iview动态新增和删除的方法
2020/06/17 Javascript
[00:58]PWL开团时刻DAY5——十人开雾0换5
2020/11/04 DOTA
Python多进程池 multiprocessing Pool用法示例
2018/09/07 Python
python3实现字符串操作的实例代码
2019/04/16 Python
使用Python将Exception异常错误堆栈信息写入日志文件
2020/04/08 Python
使用python创建生成动态链接库dll的方法
2020/05/09 Python
django序列化时使用外键的真实值操作
2020/07/15 Python
食堂标语大全
2014/06/11 职场文书
教师个人读书活动总结
2014/07/08 职场文书
教师学习八项规定六项禁令思想汇报
2014/09/27 职场文书
欢迎词范文
2015/01/27 职场文书
安全员岗位职责
2015/02/10 职场文书
2015年环境整治工作总结
2015/05/22 职场文书
承兑汇票延期证明
2015/06/23 职场文书
考试后的感想
2015/08/07 职场文书
Python 详解通过Scrapy框架实现爬取CSDN全站热榜标题热词流程
2021/11/11 Python