Python修改Excel文件笔记
2017-12-12 12:47
357 查看
简介
平时会用到excel表格处理数据, 对于一些大量重复的机械的操作,可以用程序完成,这很符合python脚本语言的气质。 事实上,python提供了很多相关的模块, 看来很多人都偷过一样的懒, hiahia……常见模块
1. xlrd、xlwt、xlutils
xlrd只能读文件、xlwt只能新建文件、xlutils可以处理原文件(实际是在前两者之间建立管道, 讲xlrd打开的文件copy一份作为xlwt的输入和操作对象)这三个模块只能处理.xls文件
2. openpyxl、 xlsxwriter、 pyExcelerator和win32com
openpyxl :只能操作xlsx文件而不能操作xls文件, 但是可以处理原文件xlsxwriter: 只能操作xlsx文件而不能操作xls文件, 只能创建新文件
pyExcelerator和win32com 暂时没做了解 (模块太多了…… ┑( ̄Д  ̄)┍)
常见问题笔记
我只用了xlrd、xlwt和xlutils, 所以暂时先记录相关的使用一般操作
工作薄、sheet的新建\加载\保存, 单元格的读写, 这类文章很多, 不造轮子了:
http://blog.csdn.net/tianzhu123/article/details/7225809
https://xlwt.readthedocs.io/en/latest/api.html
http://xlutils.readthedocs.io/en/latest/index.html
注意:在修改原文件时,首先使用xlrd读取文件,此时要设置formatting_info=True not yet implemented ,确保打开原文件时保留原格式
def __init__(self, excelFile): u""" 提供错题列的第一个cell的坐标(startRow+1 就是填写评论的列) :param startRow: 起始行号 :param startCol: 起始列号 """ self.filePath = excelFile self.rb = open_workbook(excelFile, formatting_info=True) # excel文件句柄 self.wb = copy(self.rb) # self.wr = self.wb.get_sheet(0) # excel文件中sheet句柄 pass
单元格格式相关操作
主要是借助xlwt.XFStyle(虽然是xlwt带有的格式配置,但是xlutils仍然同样使用
) , 下面贴出它的构造函数, 单元格格式也就是围绕这几个方面来设置的:
class XFStyle(object): def __init__(self): self.num_format_str = 'General' self.font = Formatting.Font() self.alignment = Formatting.Alignment() self.borders = Formatting.Borders() self.pattern = Formatting.Pattern() self.protection = Formatting.Protection()
具体的细节追踪代码就可以了,这里简单解释下:
font: 字体颜色、字体大小、单元格列宽、加粗、斜体、阴影、下划线、编码等等…
alignment: 对齐方式(水平方向、 垂直方向、 旋转、 自动换行:wrap 等等)
borders: 边框粗细、有无、颜色
patterns: 单元格底色,上层颜色(back/fore color)
protection: 是否锁单元格
简易的代码演示:
def setFont(self, fontName=u"宋体", fontHeight=11, align=xlwt.Alignment.HORZ_LEFT, color="black"): """ :param fontName: 字体,默认"宋体" :param fontHeight: 字号, 该参数的值等于字号*20 :param align: 字符位置,具体 :param color: 字符颜色 :return: """ style = xlwt.XFStyle() aligment = xlwt.Alignment() aligment.horz = align aligment.vert = xlwt.Alignment.VERT_CENTER aligment.wrap = xlwt.Alignment.WRAP_AT_RIGHT font = xlwt.Font() font.name = fontName font.colour_index = xlwt.Style.colour_map[color] font.height = fontHeight style.font = font style.alignment = aligment return style
详细的代码演示可以参考这里
单元格数值的类型的判断
判断Python输入是否为数字
设置str为字符串
if str.isdigit(): # 为True表示输入的所有字符都是数字,否则,不是全部为数字
str.isalnum() 所有字符都是数字或者字母
str.isalpha() 所有字符都是字母
str.isdigit() 所有字符都是数字
str.islower() 所有字符都是小写
str.isupper() 所有字符都是大写
str.istitle() 所有单词都是首字母大写,像标题
str.isspace() 所有字符都是空白字符、\t、\n、\r
上述的主要是针对整型的数字,但是对于浮点数来说就不适用了,那么浮点数怎么判断呢,
try: f = float(str) exception ValueError: print("输入的不是数字!")
插入图片
xlwt 只能插入bmp格式图片,但是这类图片普遍比较大,一定要做的话xlsxwriter 可以解决,但是后者只能新建文件,不能修改原文件(可以先把原文件内容读出,再写入新建的文件中)
# 图片格式转换成bmp path = os.path.abspath("满分.jpg") tmpImg = Image.open(path) # print tmpImg.mode tmpImg = tmpImg.convert("RGB") tmpImg.save(os.path.splitext(path)[0] + ".bmp") # 插入图片 try: self.wr.insert_bitmap("满分.bmp", 19, 3, 20, 20, 0.2, 0.2) except Exception as e: print e print traceback.format_exc() pass
其中,关于insert_bitmap()函数:
insert_bitmap(img, x, y, x1, y1, scale_x=0.8, scale_y=1)
img表示要插入的图像地址,
x表示行
y表示列
x1表示相对原来位置向下偏移的像素
y1表示相对原来位置向右偏移的像素
scale_x表示相对原图宽的比例
scale_y表示相对原图高的比例
合并单元格写入
write_merge(x, x + h, y, w + y, string, sytle)
x表示行,y表示列,w表示跨列个数,h表示跨行个数,string表示要写入的单元格内容,style表示单元格样式。
注意,x,y,w,h,都是以0开始计算的。
拓展
poenpyxl: 处理xlsx的,可以修改原文件, 暂时没用到,回头用一用再表(^__^) 嘻嘻……大家有兴趣的话可以先参考以下链接:
http://openpyxl.readthedocs.io/en/default/formatting.html
https://www.cnblogs.com/anpengapple/p/6399304.html?utm_source=itdadao&utm_medium=referral
相关文章推荐
- python 通过函数无返回的修改数据结构,在函数外部,数据结构也可被修改
- python 批量修改图片大小
- 修改sublime text2 默认指向的python 版本
- python 批量修改/替换数据的实例
- 流畅的python第十章序列的修改,散列和切片学习记录
- 简单文件操作python 修改文件指定行的方法
- python 随机远程主机修改密码
- 用python修改文本内容
- python:xml模块用法-xml处理、修改、删除
- 修改Python IDLE代码配色及语法高亮主题
- 【Python】修改文件并立即写回到原始位置(inplace读写)
- Python之自动化修改软件包版本号&日期
- python修改搜索路径
- Python修改字符串的大小写
- Python pip常用命令和源地址修改
- python的增加、删除、修改文档代码如下
- Python学习笔记(27)-创建与修改excel文档
- Python学习-创建修改XML
- python脚本在不中断运行的情况下,修改循环间隔
- python 使用装饰器模式 保证带有默认值的参数不被修改默认值