一、前言

关于Python的xlrd、xlwt模块的使用,推介另一位博客主的博文:https://www.cnblogs.com/zhoujie/p/python18.html

这篇里面有详细介绍这两个模块的基本用法。

以下是关于我运用xlrd、xlwt模块的一个实例。需求如下:

需求是用宏去做的,但是因为时间比较紧急,我用了1天去“研究”怎么用宏去写,发现作为一个VBA入门者,比较难短时间学习并解决这个问题,因为VBA的可读性比较差的缘故吧。

于是我选择用Python去实现。


二、主体

这个需求还算比较简单,主要是分为“读”和“写”两部分。

(一)读取部分

从Excel文件“测试题.xls”里面的“表格数据1”,“表格数据2”,“数据透视表”三个sheet中提取区域和各区域的店铺,并要求同一区域内的店铺名称不重复。

需求也很简单,就是“区域”和“店铺名称”两个元素进行去重和读取。

1.读取思路

1.1读取范围

读取范围主要是从“表格数据1”,“表格数据2”,“数据透视表”三个sheet中提取区域和各区域的店铺,如下:

三个表都是从A1,B1或者A2,B2开始,但是表的末尾有些其他文字注释,于是我用的判断条件设为是否中文和是否为空值。

#构造一个函数判断是否中文
def is_Chinese(word):
for ch in word:
if '\u4e00' <= ch <= '\u9fff':
return True
return False

1.2去重判断

读取到的数据需要一个临时的“容器”,打算利用单个区域和店铺放到一个元组里面,然后把所有的元组放到一个列表里面。

然后将每个新元组和列表里面的元组对比,看是否已经存在于列表中,从而达到去重的目的。

def read_excel():
# 打开文件
workbook = xlrd.open_workbook(r'D:\安装包\测试题.xls') #写一个循环体,筛选出不重复的区域和店铺
#将涉及到区域和店铺的三个sheet中,不重复的区域和店铺名称写入元组内并存于一个列表内
sheet_name = ['表格数据1','表格数据2','数据透视表']
tup1 = []
for j in range(3):
sheet_source = workbook.sheet_by_name(sheet_name[j])
nrows = sheet_source.nrows
for i in range(nrows):
if is_Chinese(sheet_source.cell(i,0).value) == False and sheet_source.cell(i,0).value != "":
a = (sheet_source.cell(i,0).value,sheet_source.cell(i,1).value)
if a not in tup1 :
tup1.append(a)
else:
pass
else:
pass

读取完数据,按照它的需求,是要弹出一个提示框的

#python弹出窗口,提示“读取完成!”
msg.showinfo("Excel_Reading","读取已经完成!")

1.3统计店铺数量

“容器”tup1列表里面,放的是原始的数据,需要写个循环,去统计不同区域内的店铺数量。

    #利用将元组转为字典,并统计各个区域的店铺数量
dict1 = {}
for i in tup1:
if i[0] not in dict1.keys():
dict1[i[0]] = 1
else:
dict1[i[0]] += 1

读取部分完成。完整代码如下:

import xlrd
import xlwt
import tkinter.messagebox as msg def is_Chinese(word):
for ch in word:
if '\u4e00' <= ch <= '\u9fff':
return True
return False #读取数据
def read_excel():
# 打开文件
workbook = xlrd.open_workbook(r'D:\安装包\测试题.xls') #写一个循环体,筛选出不重复的区域和店铺
#将涉及到区域和店铺的三个sheet中,不重复的区域和店铺名称写入元组内并存于一个列表内
sheet_name = ['表格数据1','表格数据2','数据透视表']
tup1 = []
for j in range(3):
sheet_source = workbook.sheet_by_name(sheet_name[j])
nrows = sheet_source.nrows
for i in range(nrows):
if is_Chinese(sheet_source.cell(i,0).value) == False and sheet_source.cell(i,0).value != "":
a = (sheet_source.cell(i,0).value,sheet_source.cell(i,1).value)
if a not in tup1 :
tup1.append(a)
else:
pass
else:
pass #python弹出窗口,提示“读取完成!”
msg.showinfo("Excel_Reading","读取已经完成!") #利用将元组转为字典,并统计各个区域的店铺数量
dict1 = {}
for i in tup1:
if i[0] not in dict1.keys():
dict1[i[0]] = 1
else:
dict1[i[0]] += 1
return (dict1)

(二)写入部分

需要新建一个Excel,创建一个叫“总表”的sheet,写入标题、表头,以及根据上述的read_excel函数返回的字典,写入内容。

1、样式部分

因为写入函数.write()里面有多个参数是用来设定你写入内容的样式的,所以这里做一个函数,把需要设定的参数做一个封包。

def set_style(height,bold=False):
style = xlwt.XFStyle() # 初始化样式 font = xlwt.Font() # 为样式创建字体
font.name = 'Times New Roman'
font.bold = bold
font.color_index = 4
font.height = height
style.font = font alignment = xlwt.Alignment()# 为样式创建居中方式
alignment.horz = xlwt.Alignment.HORZ_CENTER
style.alignment = alignment borders = xlwt.Borders() # 为样式创建边框
borders.left = xlwt.Borders.MEDIUM
borders.right = xlwt.Borders.MEDIUM
borders.top = xlwt.Borders.MEDIUM
borders.bottom = xlwt.Borders.MEDIUM borders.left_colour = 0x40 # 边框上色
borders.right_colour = 0x40
borders.top_colour = 0x40
borders.bottom_colour = 0x40
style.borders = borders return style

2、写入excel

def write_excel(**dd): #两个**代表输入一个字典作为参数
f = xlwt.Workbook() #创建工作簿 '''
创建第一个sheet:
sheet1
'''
sheet1 = f.add_sheet(u'总表',cell_overwrite_ok=True) #创建sheet sheet1.col(1).width = 256 * 20 #调整列宽,256是一个固定的单位 row1 = [u'区域',u'店铺数量(家)'] #生成标题
sheet1.write_merge(0,0,0,1,u'总表',set_style(300,True)) #生成第二行表头
for i in range(0,len(row1)):
sheet1.write(1,i,row1[i],set_style(220,True)) #写入数据
i = 2
for a,b in dd.items():
if b>=10: #将店铺数量大于10的数据,写入Excel
sheet1.write(i,0,a,set_style(220))
sheet1.write(i,1,b,set_style(220))
i +=1
else:
pass f.save('总表.xlsx') #保存文件,文件会保存在此Python脚本所在的文件夹内。

最后执行:

write_excel(**read_excel())

效果图:


总结

应该说Python的xlrd、xlwt模块对于Excel的数据读取和写入非常简易方便。但是在使用xlwt时,存在一个问题,就是它无法直接对现有的Excel工作表进行写入,只能新开一个Excel。或者将现有Excel复制一个副本,另存为。

Python(xlrd、xlwt模块)操作Excel实例(一)的更多相关文章

  1. Python使用xlwt模块 操作Excel文件

    导出Excel文件     1. 使用xlwt模块 import xlwt import xlwt    # 导入xlwt # 新建一个excel文件 file = xlwt.Workbook() # ...

  2. Python xlrd xlwt 读取写入Excel.

    import xlrd import xlwt #读取 xlrd.Book.encoding = "gbk" wb = xlrd.open_workbook(filename='s ...

  3. xlwt 模块 操作excel

    1.xlwt 基本用法 import xlwt #1 新建文件 new_file = open('test.xls', 'w') new_file.close() #2 创建工作簿 wookbook ...

  4. Python使用openpyxl模块操作Excel表格

    ''' Excel文件三个对象 workbook: 工作簿,一个excel文件包含多个sheet. sheet:工作表,一个workbook有多个,表名识别,如"sheet1",& ...

  5. Python中xlrd和xlwt模块读写Excel的方法

    本文主要介绍可操作excel文件的xlrd.xlwt模块.其中xlrd模块实现对excel文件内容读取,xlwt模块实现对excel文件的写入. 着重掌握读取操作,因为实际工作中读取excel用得比较 ...

  6. Python如何读写Excel文件-使用xlrd/xlwt模块

    时间: 2020-08-18 整理: qiyuan 安装和导入 1.模块介绍 在 python 中使用 xlrd/xlwt 和 openpyxl 模块可以对Excel电子表格(xls.xlsx文件)进 ...

  7. 用Python的pandas框架操作Excel文件中的数据教程

    用Python的pandas框架操作Excel文件中的数据教程 本文的目的,是向您展示如何使用pandas 来执行一些常见的Excel任务.有些例子比较琐碎,但我觉得展示这些简单的东西与那些你可以在其 ...

  8. C#开发中使用Npoi操作excel实例代码

    C#开发中使用Npoi操作excel实例代码 出处:西西整理 作者:西西 日期:2012/11/16 9:35:50 [大 中 小] 评论: 0 | 我要发表看法 Npoi 是什么? 1.整个Exce ...

  9. Python使用cx_Oracle模块操作Oracle数据库--通过sql语句和存储操作

    https://www.jb51.net/article/125160.htm?utm_medium=referral  Python使用cx_Oracle调用Oracle存储过程的方法示例 http ...

随机推荐

  1. IIS 身份验证

    IIS 支持以下身份验证模式: 匿名.如果不需要对客户端进行身份验证(或者使用自定义身份验证机制,如窗体身份验证),则可将 IIS 配置为允许匿名访问.在该事件中,IIS 创建一个 Windows 令 ...

  2. ArcGIS坐标转换

    我忘了怎么设置坐标系了- 定义投影ArcCatalog设置?  -arctoolbox好像都可以   感觉不用想的那么复杂]直接定义投影就行了  选这一个吗  这个就行了'  然后?  应该是先定义成 ...

  3. 编写高质量代码改善C#程序的157个建议——建议29:区别LINQ查询中的IEnumerable<T>和IQueryable<T>

    建议29:区别LINQ查询中的IEnumerable<T>和IQueryable<T> LINQ查询一共提供了两类扩展方法,在System.Linq命名空间下,有两个静态类:E ...

  4. C#中Winform程序中如何实现多维表头【不通过第三方报表程序】

    问题:C#中Winform程序中如何实现多维表头. 在网上搜了很多方法,大多数方法对于我这种新手,看的都不是很懂.最后在新浪博客看到了一篇比较易懂的文章:[DataGridView二维表头与合并单元格 ...

  5. shell-脚本-作用是发现前10个最占用磁盘空间的文件

    #!/bin/bash## 这个脚本的作用是发现前10个最占用磁盘空间的文件################定义这个脚本的全区变量##################################C ...

  6. spring 学习(四): spring 的 jdbcTemplate 操作

    spring 学习(四): spring 的 jdbcTemplate 操作 spring 针对 javaee 的每一层,都提供了相应的解决技术,jdbcTemplate 的主要操作在 dao 层. ...

  7. loj #6235. 区间素数个数

    #6235. 区间素数个数 题目描述 求 1∼n 1\sim n1∼n 之间素数个数. 输入格式 一行一个数 n nn . 输出格式 一行一个数,表示答案. 样例 样例输入 10 样例输出 4 样例解 ...

  8. DOM操作技术之动态脚本与动态样式(兼容版)

    动态脚本 使用<script>元素可以向页面中插入Javascript代码,一种方式是通过其src特性包含外部文件,另一种方式就是用这个元素本身来包含代码. 而我们要说的动态脚本,指的是在 ...

  9. CF138D World of Darkraft

    $ \color{#0066ff}{ 题目描述 }$ n*m的格子,每个格子有字符'L','R',X',初始可以选择所有格子. 当选了 'L'的格子时,当前格子左下右上这条线上所有点不能选; 当选了 ...

  10. How to: Create a Business Model in the XPO Data Model Designer

    How to: Create a Business Model in the XPO Data Model Designer This topic provides step-by-step inst ...