关于python:13用-Python-读写-Excel-文件

9次阅读

共计 3700 个字符,预计需要花费 10 分钟才能阅读完成。

在以前,商业剖析对应的英文单词是 Business Analysis,大家用的剖析工具是 Excel,起初数据量大了,Excel 应酬不过去了(Excel 最大反对行数为 1048576 行),人们开始转向 python 和 R 这样的剖析工具了

XlsxWriter xlrd&xlwt OpenPyXL Microsoft Excel API
介绍 能够创立 Excel 2007 或更高版本的 XLSX 文件 即 python-excel,含 xlrd、xlwt 和 xlutils 三大模块,别离提供读、写和其余性能 能够读写 Excel 2007 XLSX 和 XLSM 文件 间接通过 COM 组件与 Microsoft Excel 过程通信,调用其各种性能实现对 Excel 文件的操作
批改 ⚠️
.xls
.xlsx ⚠️
大文件
性能 个别 超强
速度 超慢
零碎 无限度 无限度 无限度 Windows + Excel
应用场景 要创立 XLSX 文件 <br/> 不须要读取已有文件 <br/> <br/> 须要实现比较复杂的性能 <br/> 数据量可能会很大 <br/> 须要跨平台 要读取 XLS 或 XLSX 文件 <br/> 要生成 XLS 文件 <br/> 须要的性能不太简单 <br/> 须要跨平台 要解决 XLSX 文件 <br/> 须要批改已有文件,或者在写入过程中须要一直批改 <br/> 须要的性能比较复杂 <br/> 数据量可能会很大 <br/> 须要跨平台 须要解决各种文件格式 <br/> 须要用到特地简单的性能 <br/> 在批改文件时,不心愿对原有信息造成任何意外毁坏 <br/> 数据量很小,或者违心期待 <br/> 仅在 Windows 中应用

XlsxWriter

Xlsx 是 python 用来结构 xlsx 文件的模块,能够向 excel2007+ 中写 text,numbers,formulas 公式以及 hyperlinks 超链接。

能够实现 xlsx 文件的自动化结构,包含:合并单元格,制作 excel 图表等性能:

1. 长处

一、性能比拟强

相对而言,这是除 Excel 本身之外性能最强的工具了。比方我就用到了它提供的:字体设置、前景色背景色、border 设置、视图缩放(zoom)、单元格合并、autofilter、freeze panes、公式、data validation、单元格正文、行高和列宽设置等等。

二、反对大文件写入

如果数据量十分大,能够启用 constant memory 模式,这是一种程序写入模式,失去一行数据就立即写入一行,而不会把所有的数据都放弃在内存中。

2. 毛病

一、不反对读取和批改

作者并没有打算做一个 XlsxReader 来提供读取操作。不能读取,也就无从批改了。它只能用来创立新的文件。我是利用 xlrd 把须要的信息读入后,用 XlsxWriter 创立全新的文件。

另外,即便是创立到一半 Excel 文件,也是无奈读取曾经创立进去的内容的(信息应该在,然而并没有相应的接口)。因为它的次要办法是 write 而不是 set。当你在某个单元格写入数据后,除非你本人保留了相干的内容,否则还是没有方法读出曾经写入的信息。从这个角度看,你无奈做到读出 -> 批改 -> 写回,只能是写入 -> 写入 -> 写入。

二、不反对 XLS 文件

XLS 是 Office 2013 或更早版本所应用的格局,是一种二进制格局的文件。XLSX 则是用一系列 XML 文件组成的(最初的 X 代表了 XML)一个压缩包。如果非要创立低版本的 XLS 文件,就请移步 xlwt 吧。

三、临时不反对透视表(Pivot Table)

3. 基本操作办法
  • 创立 excel 文件
import xlsxwriter

f = xlsxwriter.Workbook()    # 创立 excel 文件
  • 创立工作表
worksheet1 = f.add_worksheet('操作日志')  # 括号内为工作表表名
  • 增加工作表款式

款式有很多属性,更多具体款式请参考官网文档 https://xlsxwriter.readthedocs.io。

bold = f.add_format({
        'bold':  True,  # 字体加粗
        'border': 1,  # 单元格边框宽度
        'align': 'left',  # 程度对齐形式
        'valign': 'vcenter',  # 垂直对齐形式
        'fg_color': '#F4B084',  # 单元格背景色彩
        'text_wrap': True,  # 是否主动换行
    })
  • 写入单个单元格数据
//row: 行,col:列,data: 要写入的数据, bold: 单元格的款式
worksheet1.write(row, col, data, bold)
  • 写入一整行,一整列
// A1: 从 A1 单元格开始插入数据,按行插入,data: 要写入的数据(格局为一个列表 ), bold: 单元格的款式
worksheet1.write_row(“A1”,data,bold)

// A1: 从 A1 单元格开始插入数据,按列插入,data: 要写入的数据(格局为一个列表 ), bold: 单元格的款式
worksheet1.write_column(“A1”,data,bold)
  • 插入图片
// 第一个参数是插入的起始单元格,第二个参数是图片你文件的绝对路径
worksheet1.insert_image('A1','f:\\1.jpg')
  • 写入超链接
worksheet1.write_url(row, col, "internal:%s!A1" % ("要关联的工作表表名"), string="超链接显示的名字")
  • 插入图表
workbook.add_chartsheet(type="")参数中的 type 指的是图表类型,图表类型示例如下:[area:面积图,bar:条形图,column:直方图,doughnut:环状图,line:折线图,pie:饼状图,scatter:散点图,radar:雷达图,stock: 箱线图]
  • 取得以后 excel 文件的所有工作表
workbook.worksheets()

workbook.worksheets() 用于取得当前工作簿中的所有工作表,这个函数的存在便当了对于工作表的循环操作,如果你想在当前工作簿的所有工作表的 A1 单元格中输出一个字符创‘Hello xlsxwriter’,那么这个命令就派上用场了。

  • 敞开 excel 文件
workbook.close()

这个命令是应用 xlsxwriter 操作 Excel 的最初一条命令,肯定要记得敞开文件。

参考 https://www.jianshu.com/nb/32…

案例

import xlsxwriter

# 新建 excel 表
workbook = xlsxwriter.Workbook('D:/hello.xlsx')

# 新建 sheet(sheet 的名称为 "sheet1")worksheet = workbook.add_worksheet()

# 定义表头内容
Title = ['实例 ID', '实例配置', '实例名', '地区', '平安组', 'EIP']

# 定义题目格局
merge_format = workbook.add_format({
    'bold': True,
    'border': 1,
    'align': 'center',
    'valign': 'vcenter',
    'fg_color': '#E0FFFF'
})

# 定义表头格局
title_format = workbook.add_format({
    'bold': True,
    'border': 1,
    'align': 'center',
    'valign': 'vcenter',
    'fg_color': '#87CEFF'
})

# 定义内容格局
data_format = workbook.add_format({
    'border': 1,
    'align': 'center',
    'valign': 'vcenter',
    'fg_color': '#EED8AE'
})

# 拟数据
data = [['i-1', '1C1G', 'demo1', '上海', 'sg-1', '172.20.2.10'],
        ['i-2', '1C1G', 'demo2', '郑州', 'sg-2', '172.20.2.11'],
        ['i-3', '1C1G', 'demo3', '北京', 'sg-3', '172.20.2.12']]

# 合并 A1 - F1 单元格作为题目,传入参数:1:合并单元格,2:题目文字,3:题目格局
worksheet.merge_range('A1:F1', 'ECS 信息表', merge_format)

# 设置列宽,指定 A - F 的列宽为 25
worksheet.set_column('A:F', 25)

# 设置行号,指定行数,高度,A1 为 0,A2 为 1,以此类推
worksheet.set_row(0, 60)

# write_row,写行,传入参数:1:行,2:内容,3:格局
worksheet.write_row('A2', Title, title_format)
i = 3
for ECS in data:
    worksheet.write_row('A' + str(i), ECS, data_format)
    i += 1

# 将 excel 文件保留敞开,如果没有这一行运行代码会报错
workbook.close()

在线练习:https://www.520mg.com/it

正文完
 0