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使用datetime模块计算各种时间间隔的方法
Mar 24 Python
Python中下划线的使用方法
Mar 27 Python
Python脚本暴力破解栅栏密码
Oct 19 Python
python 实现自动远程登陆scp文件实例代码
Mar 13 Python
Python 实现域名解析为ip的方法
Feb 14 Python
python的常见矩阵运算(小结)
Aug 07 Python
python3获取url文件大小示例代码
Sep 18 Python
使用turtle绘制五角星、分形树
Oct 06 Python
python使用 cx_Oracle 模块进行查询操作示例
Nov 28 Python
Python使用Numpy模块读取文件并绘制图片
May 13 Python
基于Python爬取51cto博客页面信息过程解析
Aug 25 Python
pytorch显存一直变大的解决方案
Apr 08 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.ini不生效问题解决方法(上传大于8M的文件)
2013/06/14 PHP
用PHP代码给图片加水印
2015/07/01 PHP
PHP微信PC二维码登陆的实现思路
2017/07/13 PHP
根据地区不同显示时间的javascript代码
2007/08/13 Javascript
javascript OFFICE控件测试代码
2009/12/08 Javascript
JQuery为textarea添加maxlength属性的代码
2010/04/07 Javascript
jQuery getJSON 处理json数据的代码
2010/07/26 Javascript
Javascript实现飞动广告效果的方法
2015/05/25 Javascript
jquery采用oop模式class类的使用示例
2016/01/22 Javascript
解析Node.js异常处理中domain模块的使用方法
2016/02/16 Javascript
jquery实现的回旋滚动效果完整实例【附demo源码下载】
2016/09/20 Javascript
jQuery插件echarts实现的去掉X轴、Y轴和网格线效果示例【附demo源码下载】
2017/03/04 Javascript
vue2.0父子组件间通信的实现方法
2017/04/19 Javascript
Three.js实现绘制字体模型示例代码
2017/09/26 Javascript
基于input动态模糊查询的实现方法
2017/12/12 Javascript
基于javascript的拖拽类封装详解
2019/04/19 Javascript
[07:20]2018DOTA2国际邀请赛寻真——逐梦Mineski
2018/08/10 DOTA
python获取指定目录下所有文件名列表的方法
2015/05/20 Python
Python基于回溯法子集树模板解决马踏棋盘问题示例
2017/09/11 Python
深入理解Python 关于supper 的 用法和原理
2018/02/28 Python
python安装模块如何通过setup.py安装(超简单)
2018/05/05 Python
对python中执行DOS命令的3种方法总结
2018/05/12 Python
python 实时得到cpu和内存的使用情况方法
2018/06/11 Python
解决 jupyter notebook 回车换两行问题
2020/04/15 Python
python unichr函数知识点总结
2020/12/16 Python
关于webview适配H5上传照片或者视频文件的方法
2020/11/04 HTML / CSS
Fanatics英国官网:美国体育电商
2018/11/06 全球购物
美国最大的在线生存商店:Survival Frog
2020/12/13 全球购物
全陪导游欢迎词
2014/01/17 职场文书
病媒生物防治方案
2014/05/13 职场文书
新闻报道策划方案
2014/06/11 职场文书
经济类毕业生求职信
2014/06/26 职场文书
2014年向国旗敬礼活动总结
2014/09/27 职场文书
自主招生推荐信怎么写
2015/03/26 职场文书
酒店收银员岗位职责
2015/04/07 职场文书
公司员工宿舍管理制度
2015/08/07 职场文书