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的框架下的web app的详细教程
Apr 30 Python
python访问类中docstring注释的实现方法
May 04 Python
在Python中操作字典之clear()方法的使用
May 21 Python
5个很好的Python面试题问题答案及分析
Jan 19 Python
python 简单照相机调用系统摄像头实现方法 pygame
Aug 03 Python
Python发展简史 Python来历
May 14 Python
Django框架创建mysql连接与使用示例
Jul 29 Python
使用django和vue进行数据交互的方法步骤
Nov 11 Python
Python Selenium安装及环境配置的实现
Mar 17 Python
Scrapy模拟登录赶集网的实现代码
Jul 07 Python
Django中和时区相关的安全问题详解
Oct 12 Python
详解Scrapy Redis入门实战
Nov 18 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
mysql 的 like 问题,超强毕杀记!!!
2007/01/18 PHP
php下的权限算法的实现
2007/04/28 PHP
数据库中排序的对比及使用条件详解
2012/02/23 PHP
php ajax数据传输和响应方法
2018/08/21 PHP
PHP实现浏览器格式化显示XML的方法示例
2019/01/22 PHP
js 数组的for循环到底应该怎么写?
2010/05/31 Javascript
jquery 添加节点的几种方法介绍
2013/09/04 Javascript
javaScript实现浮点数转十六进制字符
2013/10/29 Javascript
JQuery获取与设置HTML元素的内容或文本的实现代码
2014/06/20 Javascript
JavaScript的代码编写格式规范指南
2015/12/07 Javascript
JavaScript中的prototype原型学习指南
2016/05/09 Javascript
jquery实现图片列表鼠标移入微动
2016/12/01 Javascript
canvas实现流星雨的背景效果
2017/01/13 Javascript
Angular企业级开发——MVC之控制器详解
2017/02/20 Javascript
vue+iview+less+echarts实战项目总结
2018/02/22 Javascript
vue的过滤器filter实例详解
2018/09/17 Javascript
Vue的编码技巧与规范使用详解
2019/08/28 Javascript
微信小程序 导入图标实现过程详解
2019/10/11 Javascript
详解vue v-model
2020/08/31 Javascript
Openlayers+EasyUI Tree动态实现图层控制
2020/09/28 Javascript
python爬虫入门教程之糗百图片爬虫代码分享
2014/09/02 Python
Python 处理图片像素点的实例
2019/01/08 Python
Python实现微信消息防撤回功能的实例代码
2019/04/29 Python
python deque模块简单使用代码实例
2020/03/12 Python
python 使用三引号时容易犯的小错误
2020/10/21 Python
Python调用高德API实现批量地址转经纬度并写入表格的功能
2021/01/12 Python
纯css3制作煽动翅膀的蝴蝶的示例
2018/04/23 HTML / CSS
车间班组长的职责
2013/12/13 职场文书
高三体育教学反思
2014/01/29 职场文书
关爱留守儿童标语
2014/06/18 职场文书
岗位说明书标准范本
2014/07/30 职场文书
稽核岗位职责
2015/02/10 职场文书
2015年乡镇科普工作总结
2015/05/13 职场文书
《雷雨》教学反思
2016/02/20 职场文书
管理者日常工作必备:22条企业管理流程模板!
2019/07/12 职场文书
为什么 Nginx 比 Apache 更牛逼
2021/03/31 Servers