任务简述:

表1是一个简单的数据表,共有110行,25列。第1行是表头,例如“负责人”、“事项”、“期限”等。 第2行——第110行是对应的数据,如“张三”、“搬砖头”、“3天”。

想要做的表(表2)是110个表格(就像个人简历一样,放在了一个excel文件中),每个表格共9行,都有固定的格式,如“姓名”“事项”“期限”等,数据与表1一样,但格式与顺序不同,是按个人分类的。

目前的任务就是从表1复制出相应的数据,填到表2里面。如果手工复制粘贴,共计110x25=2750个数据,简直累哭。

所以使用Python写了一段程序,借助xlrd模块(用来读取表1) xlwt模块(用来生成表2)来完成此项工作。

因为涉及行数判断(1-9行是第一个表,10-18行是第二个表,19-27行是第三个表……),按说用switch-case语句是最合适不过的,但是Python里面没有这个控制语句,用字典(dict)也可以完成这种流程控制,但不很熟悉。为了迅速完成任务,就直接用了if-else语句来操作了(导致的结果就是多达8个的if-else的嵌套…)

所以贴上此段匆匆写出的粗陋代码,如果有好的取代switch-case语句的方法,还望诸位不吝赐教。

# -*- coding: cp936 -*-
import xlrd
import xlwt xls1=xlrd.open_workbook("d:\\xls\\1.xls")
mysheet1=xls1.sheet_by_name("Sheet1")#找到名为Sheet1的工作表。区分大小写
print("表1共有 %d 行, %d 列。"%(mysheet1.nrows,mysheet1.ncols)) xls2=xlwt.Workbook()
mysheet2= xls2.add_sheet('SheetB')#建立2号xls,并往sheetB里面写入数据 #获取表1的表头
titlelist=mysheet1.row_values(0) #每行的操作.生成110个分表
title0='xxxxx事项分表'
titlex='xxxx流程图(xxxx)'
mysheet2.write(0,0,title0.decode('gbk'))
mysheet2.write(0,8,titlex.decode('gbk'))
for x in range(0,110):#表1 共有110行数据
titlelist1=mysheet1.row_values(x+1)#每一次循环都得到第x+1行数据。
x=x*9
print x
for row in range(x+1,x+9):#每9行为一组 所以上一行的x乘以了9。
if row==x+1:#如果是 每组 的第一行
for i in range(0,3):#【此处填写第 x+1行(也就是每组的第一行) 的实际列数】
mysheet2.write(row,i*2,titlelist[i])#偶数列写入表头数据
mysheet2.write(row,i*2+1,titlelist1[i])#奇数列写入表1的第x+1行的数据
else:
if row==x+2:#如果是 每组 的第二行
mysheet2.write(row,0,titlelist[3])#因为第二行只有两个格子,不用循环,只写第0列和第1列
mysheet2.write(row,1,titlelist1[3])
else:
if row==x+3:#如果是 每组 的第三行
mysheet2.write(row,0,titlelist[4])#第三行也只有两个空,不用循环,只写第0列和第1列
mysheet2.write(row,1,titlelist1[4]) else:
if row==x+4:
for i in range(0,4):
mysheet2.write(row,i*2,titlelist[i+5])
mysheet2.write(row,i*2+1,titlelist1[i+5])
else:
if row==x+5:
for i in range(0,4):
mysheet2.write(row,i*2,titlelist[i+9])#每写一次,列数向后推4。如5,9,13,17,21…
mysheet2.write(row,i*2+1,titlelist1[i+9])#因为“for i in range(0,4):”,一次写4个列
else:
if row==x+6:
for i in range(0,4):
mysheet2.write(row,i*2,titlelist[i+13])
mysheet2.write(row,i*2+1,titlelist1[i+13])
else:
if row==x+7:
for i in range(0,4):
mysheet2.write(row,i*2,titlelist[i+17])
mysheet2.write(row,i*2+1,titlelist1[i+17])
else:
if row==x+8:
for i in range(0,4):#如果是 每组 的第八行
mysheet2.write(row,i*2,titlelist[i+21])#每写一次,列数向后推4。如5,9,13,17,21…
mysheet2.write(row,i*2+1,titlelist1[i+21]) xls2.save('auto.xls') #将填充后的结果保存为auto.xls

Python操作Execl 实现自动化填表的更多相关文章

  1. python操作execl学习笔记(一)

    本节只记录关于execl的读操作: execl 内容及格式 python3 #!/usr/bin/env python #-*- coding:utf-8 -*- import xlrd import ...

  2. python 操作execl文件

    http://www.jb51.net/article/60510.htm import xlrdimport xlwt # 打开文件   workbook = xlrd.open_workbook( ...

  3. 【Selenium01篇】python+selenium实现Web自动化:搭建环境,Selenium原理,定位元素以及浏览器常规操作!

    一.前言 最近问我自动化的人确实有点多,个人突发奇想:想从0开始讲解python+selenium实现Web自动化测试,请关注博客持续更新! 二.话不多说,直接开干,开始搭建自动化测试环境 这里以前在 ...

  4. 【Selenium02篇】python+selenium实现Web自动化:鼠标操作和键盘操作!

    一.前言 最近问我自动化的人确实有点多,个人突发奇想:想从0开始讲解python+selenium实现Web自动化测试,请关注博客持续更新! 这是python+selenium实现Web自动化第二篇博 ...

  5. 【Selenium04篇】python+selenium实现Web自动化:文件上传,Cookie操作,调用 JavaScript,窗口截图

    一.前言 最近问我自动化的人确实有点多,个人突发奇想:想从0开始讲解python+selenium实现Web自动化测试,请关注博客持续更新! 这是python+selenium实现Web自动化第四篇博 ...

  6. 【python+selenium的web自动化】- 元素的常用操作详解(一)

    如果想从头学起selenium,可以去看看这个系列的文章哦! https://www.cnblogs.com/miki-peng/category/1942527.html ​ 本篇主要内容:1.元素 ...

  7. Python自动化运维之17、Python操作 Memcache、Redis、RabbitMQ

    一.Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的 ...

  8. Python自动化开发 - Python操作Memcached、Redis、RabbitMQ

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载. 它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速 ...

  9. Python自动化开发 - Python操作MySQL

    本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy 一.pymysql pymsql是Python中操作MySQL的模块,其使用方法和mysq ...

随机推荐

  1. pat 甲级 1064. Complete Binary Search Tree (30)

    1064. Complete Binary Search Tree (30) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHE ...

  2. CodeForces Round #402 (Div.2) A-E

    2017.2.26 CF D2 402 这次状态还算能忍吧……一路不紧不慢切了前ABC(不紧不慢已经是在作死了),卡在D,然后跑去看E和F——卧槽怎么还有F,早知道前面做快点了…… F看了看,不会,弃 ...

  3. aspx生成静态页面html 例子

    原文发布时间为:2009-07-26 -- 来源于本人的百度文章 [由搬家工具导入] using System;using System.Data;using System.Configuration ...

  4. case when then else 详解

    原文发布时间为:2008-10-15 -- 来源于本人的百度文章 [由搬家工具导入] sql语句判断方法之一 Case具有两种格式。简单Case函数和Case搜索函数。 --简单Case函数 CASE ...

  5. bq25890 ship mode

    Precondition 此是以 evb board 來做實驗的. 沒接 Vbus 僅接 i2c ,仍可以 讀寫 i2c register,但是 adc 似乎不能 working, evb board ...

  6. 更新到xcode10以后出现几个无奈的问题,谨已此篇告诫广大ioser升级请慎重

    1.第一次用xcode 10 archive的时候遇到的电脑卡死不动的问题,期间鼠标键盘通通都动不了,只能强制关机来解决,于是又进行了一次可还是遇到相同的问题,无奈之下只能等待,大约20分钟左右(20 ...

  7. Atom打开大文件卡死的问题替代方案

    无解,本身是网页的框架,所以直接换回ST或者Notepad++吧.

  8. PHP实现RabbitMQ的Publish/Subscribe

    <?php /** * Created by PhpStorm. * User: 豆腐居士 * Date: 2018/5/30 * Time: 上午11:01 */ class AqiTask ...

  9. Poj2826 An Easy Problem

    呵呵哒.WA了无数次,一开始想的办法最终发现都有缺陷.首先需要知道: 1)线段不相交,一定面积为0 2)有一条线段与X轴平行,面积一定为0 3)线段相交,但是能接水的三角形上面线段把下面的线段完全覆盖 ...

  10. git设置远程仓库地址

    方法有三种: 1.修改命令:git remote set-url origin [url] 2.先删除后添加: git remote rm origin git remote add origin [ ...