作者:星安果

来源:AirPython

前面谈到python 处理 Excel 文件最常见的两种方式,即:xlrd/xlwt、openpyxl。其中,xlrd/xlwt 这一组合,xlrd 可以负责读取数据,而 xlwt 则负责写入数据,缺点是不支持 xlsx。openpyxl 同时支持对 Excel 文档的读取、写入操作,缺点是不支持 xls。本篇文章将继续聊聊python 操作 Excel 文档的其他几种方式。

xlsxwriter

xlsxwriter 主要用于将数据、图表写入到 Excel 文件中,可以配置使用较小的内存快速写入数据。

它的缺点是:无法读取、修改已有的 Excel 文件;如果需要读取修改 Excel 文件,只能搭配其他依赖库使用,比如:xlrd。

首先安装 xlsxwriter 的依赖包:

# 安装依赖包pip3 install xlsxwriter

xlsxwriter 提供了 Workbook(filename) 方法,用于创建一个工作簿对象。使用工作簿对象的 add_worksheet(sheet_name) 函数,就可以在工作簿中创建 Sheet 了。

def create_workbook_and_worksheet(filename, worksheet_names):    """    创建工作簿和Sheet    :param filename: 文件名称    :param worksheet_names: sheet名称列表    :return:    """    wb = xlsxwriter.Workbook(filename)    sheets = []    # 新增sheet    for worksheet_name in worksheet_names:        sheets.append(wb.add_worksheet(worksheet_name))    return wb, sheets

接着,就可以往某个 Sheet 单元格中写入数据了。如果需要定制单元格的样式,比如:字体大小、字体、颜色、背景、是否加粗等,可以使用工作簿对象的 add_format() 方法创建一个样式。

def create_format_styles(wb, format_stuyles):    """    创建一个样式,包含:字体大小、字体、颜色、背景、是否加粗等    :param wb:    :param format_stuyles:    :return:    """    return wb.add_format(format_stuyles)# 单元格字体样式self.title_style = {'bold': True, 'bg_color': '#B0C4DE', 'font_size': 10,'font_name': 'Microsoft yahei'}# 创建标题字体样式title_font_style = create_format_styles(self.wb, self.title_style)

Sheet 对象的 write(...) 函数用于向单元格中写入数据,参数包含:行索引、列索引、值、字体样式等。需要注意的是,默认 xlsxwriter 的行索引、列索引都是从 0 开始,即: 0 代表第一行。

写入数据的同时配置单元格样式的写法如下:

def write_to_cell(sheet, row_index, column_index, value, format_styles=None):    """    往单元格中写入数据    :param row_index: 行索引,1:第一行    :param column_index: 列索引,1:第一列    :param format_styles 字体样式    :return:    """    if row_index 

xlsxwriter 同样支持在单元格中插入图片,包含:本地图片和网络图片。

使用的方法是:insert_image();

参数包含:单元格行索引(索引从 0 开始)、单元格列索引、图片文件、可选参数(图片位置、缩放、url 超链接、image_data 图片字节流等)。

以插入一张网络图片为例。首先,定义一个图片展示可选参数,指定图片的缩放比、url 超链接。

def create_image_options(x_offset=0, y_offset=0, x_scale=1, y_scale=1, url=None, tip=None, image_data=None,                         positioning=None):    """    插入图片的参数配置    包含:偏移量、缩放比、网络图片链接、超链接、悬停提示灯    :param x_offset:    :param y_offset:    :param x_scale:    :param y_scale:    :param url:    :param tip:    :param image_data:    :param positioning:    :return:    """    image_options = {        'x_offset': x_offset,        'y_offset': y_offset,        'x_scale': x_scale,        'y_scale': y_scale,        'url': url,        'tip': tip,        'image_data': image_data,        'positioning': positioning,    }    return image_optionsimage_options = create_image_options(x_scale=0.5, y_scale=0.5, url='https://www.jianshu.com/u/f3b476549169')

接着,将网络图片转为字节流:

from io import BytesIOimport ssldef get_image_data_from_network(url):    """    获取网络图片字节流    :param url: 图片地址    :return:    """    ssl._create_default_https_context = ssl._create_unverified_context    # 获取网络图片的字节流    image_data = BytesIO(urlopen(url).read())    return image_data

最后,将图片插入到单元格中:

def insert_network_image(sheet, row_index, column_index, url, filepath, image_options=None):    """    插入网络图片    :param sheet:    :param row_index:    :param column_index:    :param url:    :param filepath:    :param image_options:    :return:    """    if row_index 

使用 set_column() 方法可以设置列宽,和 openpyxl 类似,有 2 种使用方式,分别是:字符串索引、列索引数字索引。

def set_column_width(sheet, index_start, index_end, width):    """    设置列宽    :param sheet:    :param index_start: 开始位置,从1开始    :param index_end: 结束位置    :param width: 宽度    :return:    """    # 方式二选一    # self.current_sheet.set_column('A:C', width)    # 默认0代表第一列    sheet.set_column(index_start - 1, index_end - 1, width)# 设置列宽度# 设置第1列到第3列的宽度为:100set_column_width(self.current_sheet, 1, 3, 100)

行高使用 set_row() 方法,传入行索引和高度即可。

def set_row_height(sheet, row_index, height):    """    设置行高    :param sheet:    :param row_index: 行索引,从1开始    :param height:    :return:    """    sheet.set_row(row_index - 1, height)# 设置行高set_row_height(self.current_sheet, 1, 50)set_row_height(self.current_sheet, 2, 100)

写入数据完毕之后,将工作簿关闭,文件会自动保存到本地。

def teardown(self):    # 写入文件,并关闭文件    self.wb.close()

xlsxwriter 还支持插入图表,比如:条形图、柱状图、雷达图等,受限于篇幅,这部分内容就不展开说明了。

其他方式

还有一种比较常见的方式是:xlwings。xlwings 是一款开源免费的依赖库,同时支持 Excel 文件的读取、写入、修改。它功能非常强大,还可以和 Matplotlib、Numpy 和 Pandas 无缝连接,支持读写 Numpy、Pandas 数据类型;同时,xlwings 可以直接调用 Excel 文件中 VBA 程序。

需要注意的是,xlwings 依赖于 Microsoft Excel 软件,所以使用 WPS 的用户建议直接使用 openpyxl。

另外,还有一个操作 Excel 比较强大的方式,即:Pywin32。其中,Pywin32 相当于调用 Win 下的系统 API 来操作 Excel 文件。

优点是:可以处理复杂图表的数据表;

缺点也非常明显,包含:速度慢、占用 CPU 高,仅支持 Win 系统。

最后

综合发现,xlrd/xlwt、openpyxl、xlsxwriter 基本上可以满足大部分的日常 Excel 文档操作。

excel设置行高_聊聊python 办公自动化之 Excel(下)相关推荐

  1. excel 图片转url_最全总结 | 聊聊 Python 办公自动化之 Excel(下)

    聊聊 Python 数据处理全家桶(Memca 篇) 点击上方"AirPython",选择"加为星标" 第一时间关注 Python 技术干货! 1. 前言 前面 ...

  2. python自动化办公 51cto_聊聊 Python 办公自动化之一 Excel

    本文转载自微信公众号「AirPython」,作者星安果.转载本文请联系AirPython公众号. 1. 前言 在我们日常工作中,经常会使用 Word.Excel.PPT.PDF 等办公软件 但是,经常 ...

  3. excel设置行高_手把手教你用wps表格excel制作田字格书法练习字帖

    自己给孩子量身定制一个吧,跟着香哥走,手把手教你用wps表格excel制作田字格书法练习字帖,咱用的软件是wps表格. 第一步:设置列宽和行高,都为36磅. 第二步:选中四个方格,右键单击,在弹出的菜 ...

  4. python利用pandas合并excel表格代码_利用Python pandas对Excel进行合并的方法示例

    前言 在网上找了很多Python处理Excel的方法和代码,都不是很尽人意,所以自己综合网上各位大佬的方法,自己进行了优化,具体的代码如下. 博主也是新手一枚,代码肯定有很多需要优化的地方,欢迎各位大 ...

  5. python对excel数据统计_用 python实现简单EXCEL数据统计

    原博文 2016-11-24 23:06 − 任务: 用python时间简单的统计任务-统计男性和女性分别有多少人. 用到的物料:xlrd 它的作用-读取excel表数据 代码: import xlr ...

  6. python可以用于excel计算吗_你好Python!再见Excel?

    现在很多行业,都离不开Excel: 做财务的,要用Excel做报表: 做物流的,会用Excel来跟踪订单情况: 做HR的,会用Excel算工资: 做运营的,会用Excel记录数据做分析. 不知道你有没 ...

  7. 随机数写excel java代码_基于python实现在excel中读取与生成随机数写入excel中

    搜索热词 具体要求是:在一份已知的excel表格中读取学生的学号与姓名,再将这些数据放到新的excel表中的第一列与第二列,最后再生成随机数作为学生的考试成绩. 首先要用到的数据库有:xlwt,xlr ...

  8. python docx 字体大小_聊聊python办公自动化之Word(上)

    作者:星安果

  9. python如何生成excel文件夹_用python脚本通过excel生成文件夹树结构

    大概这样写标题是对的吧... 目标: 通过excel目录结构文档生成文件夹树结构. 也就是: 通过下面的excel 生成下面的文档树结构: 方法: 1.分析:一般文档结构都是事先构思好.可以在txt文 ...

  10. python2读取excel中文处理_用python + openpyxl处理excel(07+)文档 + 一些中文处理的技巧...

    最近要帮做RA的老姐写个合并excel工作表的脚本--源数据是4000+个excel 工作表,分布在9个xlsm文件里,文件内容是中英文混杂的一些数据,需要从每张表中提取需要的部分,分门别类合并到多个 ...

最新文章

  1. 本人CCNP、OCP MCSA 证书寻求挂靠
  2. mac 开启多个eclipse QQ
  3. Unable to locate Attribute with the the given name [] on this ManagedType[com.XXX]
  4. 如何选择合适的Web安全网关?
  5. java 创建文件夹_VS Code用来开发JAVA项目真香
  6. eol python_乱记 EOL(End of Line)在windows和linux不同导致的Python问题
  7. Linux 文件IO管理 - POSIX
  8. Visio2016安装
  9. QQ音乐会员QMC格式批量在线转换为MP3格式
  10. dialog 弹窗关闭事件
  11. WIN10 + Ubuntu18.04 双系统安装教程(新机)
  12. 时态的重建--适合理工直男的钟平老师逻辑英语学习笔记
  13. Nginx的http_access_module模块
  14. 华为高清会议摄像机预置位的使用方法
  15. 移动游戏的新推广模式
  16. pentaho使用步骤简介
  17. GOF23设计模式之适配器模式
  18. 专访李开复:人类已打开潘多拉盒子,封堵AI变革只会徒劳
  19. T46 Keithley 2612如何输出高电压?
  20. 踩坑篇,多达21页的,超级详细的Oracle安装和配置教程,没有之一

热门文章

  1. TensorFlow之saved_model使用笔记
  2. 笔记本电脑插入耳机只能外放,耳机没声音
  3. caml library
  4. 地图瓦片坐标系定义及计算原理
  5. 简单实现RPC/RMI框架
  6. Error: Cound not create the Java Virtual Machine. Error: A fatal exception has occurred. Program wil
  7. 学计算机专业工作总结,计算机专业学生个人实习工作总结范文
  8. MySQL 导入数据 时间数据 不准确 解决办法
  9. 解析:Python就业方向有哪些?
  10. Vue路由SPA介绍