文章目录

    • 系列目录
  • 原项目地址
    • 第24课:用Python读写Excel文件-1
      • Excel简介
      • 安装
      • 读Excel文件(行列索引从`0`开始)
      • 写Excel文件
        • 调整单元格样式(背景,字体,对齐、虚线边框、列宽行高、添加公式)
          • 表头单元格的背景色修改
          • 表头设置指定的字体
          • 表头垂直居中对齐
          • 表头加上黄色的虚线边框
          • 调整单元格的宽度(列宽)和表头的高度(行高)
        • 公式计算及修改已有数据的工作表代码示例
    • 第25课:用Python读写Excel文件-2
      • Excel简介
        • 安装
      • 读取Excel文件(行列索引从`1`开始)
      • 写Excel文件
        • 调整样式(对齐、边框线条、行高和列宽,字体)和公式计算
      • 生成统计图表
    • TIPS1:openpyxl只读与只写模式
      • 只读模式
        • 警告
        • 实际工作表尺寸调整
      • 只写模式
        • 请注意
    • TIPS2:openpyxl图表
      • 根据最新数据刷新透视表

系列目录

Python|Git remote|hosts|PyCharm常用快捷键|变量转换|命名|类型|运算符|分支|调整tab|循环|语言基础50课:学习记录(1)-项目简介及变量、条件及循环
Python|list|切片|列表的运算符、比较及遍历|生成式|元素位置和次数|元素排序和反转|sort() 方法|嵌套的列表|语言基础50课:学习记录(2)-常用数据结构之列表
Python|元组|字符串|语言基础50课:学习记录(3)-常用数据结构之元组及字符串相关
Python|集合|运算|哈希码|语言基础50课:学习记录(4)-常用数据结构之集合
Python|字典|函数和模块|应用及进阶|分数符号(Latex)|String库|operator库|处理数据三步骤|语言基础50课:学习记录(5)-常用数据结构之字典、函数和模块应用及进阶
Python|装饰器|执行时间|递归|动态属性|静态方法和类|继承和多态|isinstance类型判断|溢出|“魔法”方法|语言基础50课:学习记录(6)-函数的高级应用、面向对象编程、进阶及应用
Python|base64|collections|hashlib|heapq|itertools|random|os.path|uuid|文件|异常|JSON|API|CSV|语言基础50课:学习7
Python|xlwt|xlrd|调整单元格样式(背景,字体,对齐、虚线边框、列宽行高、添加公式)|xlutils|openpyxl|只读与只写|图表|语言基础50课:学习(8)
Python|python-docx|python-pptx|Pillow|smtplib|螺丝帽短信网关|正则表达式的应用|语言基础50课:学习(9)
Python|http|Chrome Developer Tools|Postman|HTTPie|builtwith库|python-whois库|爬虫及解析|语言基础50课:学习(10)
Python|线程和进程|阻塞|非阻塞|同步|异步|生成器和协程|资源竞争|进程间通信|aiohttp库|daemon属性值详解|语言基础50课:学习(11)
Python|并发编程|爬虫|单线程|多线程|异步I/O|360图片|Selenium及JavaScript|Scrapy框架|BOM 和 DOM 操作简介|语言基础50课:学习(12)
Python|MySQL概述|Windows-Linux-macOS安装|MySQL 基本命令|获取帮助|SQL注释|语言基础50课:学习(13)
Python|SQL详解之DDL|DML|DQL|DCL|索引|视图、函数和过程|JSON类型|窗口函数|接入MySQL|清屏|正则表达式|executemany|语言基础50课:学习(14)

原项目地址

Python-Core-50-Courses(https://hub.fastgit.org/jackfrued/Python-Core-50-Courses.git)

第24课:用Python读写Excel文件-1

Excel简介

Python操作Excel需要三方库的支持,如果要兼容Excel 2007以前的版本,也就是xls格式的Excel文件,可以使用三方库xlrdxlwt,前者用于读Excel文件,后者用于写Excel文件。如果使用较新版本的Excel,即操作xlsx格式的Excel文件,可以使用openpyxl库,当然这个库不仅仅可以操作Excel,还可以操作其他基于Office Open XML的电子表格文件。

安装

pip install xlwt xlrd xlutils

读Excel文件(行列索引从0开始)

例如在当前文件夹下有一个名为“阿里巴巴2020年股票数据.xls”的Excel文件,如果想读取并显示该文件的内容,可以通过如下所示的代码来完成。

import xlrd# 使用xlrd模块的open_workbook函数打开指定Excel文件并获得Book对象(工作簿)
wb = xlrd.open_workbook('阿里巴巴2020年股票数据.xls')
# 通过Book对象的sheet_names方法可以获取所有表单名称
sheetnames = wb.sheet_names()
print(sheetnames) #['股票数据', 'Sheet3']
# 通过指定的表单名称获取Sheet对象(工作表)
sheet = wb.sheet_by_name(sheetnames[0])
# 通过Sheet对象的nrows和ncols属性获取表单的行数和列数
print(sheet.nrows, sheet.ncols) #表的行数:255,列数:7
for row in range(sheet.nrows):for col in range(sheet.ncols):# 通过Sheet对象的cell方法获取指定Cell对象(单元格)# 通过Cell对象的value属性获取单元格中的值value = sheet.cell(row, col).value# 对除首行外的其他行进行数据格式化处理if row > 0:# 第1列的xldate类型先转成元组再格式化为“年月日”的格式if col == 0:# xldate_as_tuple函数的第二个参数只有0和1两个取值# 其中0代表以1900-01-01为基准的日期,1代表以1904-01-01为基准的日期value = xlrd.xldate_as_tuple(value, 0)value = f'{value[0]}年{value[1]:>02d}月{value[2]:>02d}日'# 其他列的number类型处理成小数点后保留两位有效数字的浮点数else:if isinstance(value,float):value = f'{value:.2f}'print(value, end='\t')print()
# Date  High    Low Open    Close   Volume  Adj Close
# 2019年12月31日   213.64  210.73  212.00  212.10  6773600.00  212.10
# 2020年01月02日   219.98  216.54  216.60  219.77  15873500.00 219.77
# 获取最后一个单元格的数据类型,从0,0开始
# 0 - 空值,1 - 字符串,2 - 数字,3 - 日期,4 - 布尔,5 - 错误
last_cell_type = sheet.cell_type(sheet.nrows - 1, sheet.ncols - 1)
print(last_cell_type) #2
# 获取第一行的值(列表)
print(sheet.row_values(0)) #['Date', 'High', 'Low', 'Open', 'Close', 'Volume', 'Adj Close']
# 获取指定行指定列范围的数据(列表list),以[类型:value1,类型:value2,.....]的形式显示
# 第一个参数代表行索引(索引3,第4行),第二个和第三个参数代表列的开始索引(含)和结束(不含)索引
print(sheet.row_slice(3, 0, 5))
#[xldate:43833.0, number:218.2030029296875, number:216.0099945068359, number:216.3500061035156, number:217.0]

提示:上面代码中使用的Excel文件“阿里巴巴2020年股票数据.xls”可以通过后面的百度云盘地址进行获取。链接:https://pan.baidu.com/s/1rQujl5RQn9R7PadB2Z5g_g 提取码:e7b4。

更多见:官方文档。

写Excel文件

写入Excel文件可以通过xlwt 模块的Workbook类创建工作簿对象,通过工作簿对象的add_sheet方法可以添加工作表,通过工作表对象的write方法可以向指定单元格中写入数据,最后通过工作簿对象的save方法将工作簿写入到指定的文件或内存中。下面的代码实现了将5个学生3门课程的考试成绩写入Excel文件的操作。

import random
import xlwtstudent_names = ['关羽', '张飞', '赵云', '马超', '黄忠']
scores = [[random.randrange(50, 101) for _ in range(3)] for _ in range(5)]
#[[93, 86, 52], [92, 94, 72], [83, 58, 76], [55, 96, 92], [84, 85, 91]]
# 创建工作簿对象(Workbook)
wb = xlwt.Workbook()
# 创建工作表对象(Worksheet)
sheet = wb.add_sheet('一年级二班')
# 原始表头数据
titles = ('姓名', '语文', '数学', '英语')
for index, title in enumerate(titles):sheet.write(0, index, title)
#在此插入首行单元格格式修改代码
# (默认情况下该单元格没有数据才能修改)
#如需调整背景颜色,需注释掉原始表头数据段:
#格式设置代码段开始
# header_style = xlwt.XFStyle()
# pattern = xlwt.Pattern()
# pattern.pattern = xlwt.Pattern.SOLID_PATTERN
# # 0 - 黑色、1 - 白色、2 - 红色、3 - 绿色、4 - 蓝色、5 - 黄色、6 - 粉色、7 - 青色
# pattern.pattern_fore_colour = 5
# header_style.pattern = pattern
# titles = ('姓名', '语文', '数学', '英语')
# for index, title in enumerate(titles):
#     sheet.write(0, index, title, header_style)
#格式设置代码段结束
# 将学生姓名和考试成绩写入单元格
for row in range(len(scores)):sheet.write(row + 1, 0, student_names[row])for col in range(len(scores[row])):sheet.write(row + 1, col + 1, scores[row][col])
# 保存Excel工作簿
wb.save('考试成绩表.xls') #重新执行,会直接覆盖源文件

调整单元格样式(背景,字体,对齐、虚线边框、列宽行高、添加公式)

表头单元格的背景色修改

在写Excel文件时,我们还可以为单元格设置样式,主要包括字体(Font)、对齐方式(Alignment)、边框(Border)和背景(Background)的设置,xlwt对这几项设置都封装了对应的类来支持。要设置单元格样式需要首先创建一个XFStyle对象,再通过该对象的属性对字体、对齐方式、边框等进行设定,例如在上面的例子中,如果希望将表头单元格的背景色修改为黄色,可以按照如下的方式进行操作。

#格式设置代码段开始
header_style = xlwt.XFStyle()
pattern = xlwt.Pattern()
pattern.pattern = xlwt.Pattern.SOLID_PATTERN
# 0 - 黑色、1 - 白色、2 - 红色、3 - 绿色、4 - 蓝色、5 - 黄色、6 - 粉色、7 - 青色
pattern.pattern_fore_colour = 5
header_style.pattern = pattern
titles = ('姓名', '语文', '数学', '英语')
for index, title in enumerate(titles):sheet.write(0, index, title, header_style)
#格式设置代码段结束
表头设置指定的字体

如果希望为表头设置指定的字体,可以使用Font类并添加如下所示的代码。

font = xlwt.Font()
# 字体名称
font.name = '华文楷体'
# 字体大小(20是基准单位,18表示18px)
font.height = 20 * 18
# 是否使用粗体
font.bold = True
# 是否使用斜体
font.italic = False
# 字体颜色
font.colour_index = 1
header_style.font = font

注意:上面代码中指定的字体名(font.name)应当是本地系统有的字体,例如在我的电脑上有名为“华文楷体”的字体。

表头垂直居中对齐

如果希望表头垂直居中对齐,可以使用下面的代码进行设置。

align = xlwt.Alignment()
# 垂直方向的对齐方式
align.vert = xlwt.Alignment.VERT_CENTER
# 水平方向的对齐方式
align.horz = xlwt.Alignment.HORZ_CENTER
header_style.alignment = align
表头加上黄色的虚线边框

如果希望给表头加上黄色的虚线边框,可以使用下面的代码来设置。

borders = xlwt.Borders()
props = (('top', 'top_colour'), ('right', 'right_colour'),('bottom', 'bottom_colour'), ('left', 'left_colour')
)
# 通过循环对四个方向的边框样式及颜色进行设定
for position, color in props:# 使用setattr内置函数动态给对象指定的属性赋值setattr(borders, position, xlwt.Borders.DASHED)setattr(borders, color, 5)
header_style.borders = borders
调整单元格的宽度(列宽)和表头的高度(行高)

如果要调整单元格的宽度(列宽)和表头的高度(行高),可以按照下面的代码进行操作。

# 设置行高为40px
sheet.row(0).set_style(xlwt.easyxf(f'font:height {20 * 40}'))
titles = ('姓名', '语文', '数学', '英语')
for index, title in enumerate(titles):# 设置列宽为200pxsheet.col(index).width = 20 * 200# 设置单元格的数据和样式sheet.write(0, index, title, header_style)

公式计算及修改已有数据的工作表代码示例

注意:修改已有数据的工作表需要先copy生成新的workbook对象,再进行写入操作,最后保存

对于前面打开的“阿里巴巴2020年股票数据.xls”文件,如果要统计全年收盘价(Close字段)的平均值以及全年交易量(Volume字段)的总和,可以使用Excel的公式计算即可。我们可以先使用xlrd读取Excel文件夹,然后通过xlutils三方库提供的copy函数将读取到的Excel文件转成Workbook对象进行写操作,在调用write方法时,可以将一个Formula对象写入单元格。

实现公式计算的代码如下所示。

import xlrd
import xlwt
from xlutils.copy import copywb_for_read = xlrd.open_workbook('阿里巴巴2020年股票数据.xls')
sheet1 = wb_for_read.sheet_by_index(0)
nrows, ncols = sheet1.nrows, sheet1.ncols
wb_for_write = copy(wb_for_read)
sheet2 = wb_for_write.get_sheet(0)
sheet2.write(nrows, 4, xlwt.Formula(f'average(E2:E{nrows})'))
sheet2.write(nrows, 6, xlwt.Formula(f'sum(G2:G{nrows})'))
wb_for_write.save('阿里巴巴2020年股票数据汇总.xls')

说明:上面的代码有一些小瑕疵,有兴趣的读者可以自行探索并思考如何解决。

第25课:用Python读写Excel文件-2

Excel简介

基于三方库openpyxl如何进行Excel文件操作。

安装

pip install openpyxl

openpyxl的优点在于,当我们打开一个Excel文件后,既可以对它进行读操作,又可以对它进行写操作,而且在操作的便捷性上是优于xlwtxlrd的。此外,如果要进行样式编辑和公式计算,使用openpyxl也远比上一个章节我们讲解的方式更为简单,而且openpyxl还支持数据透视和插入图表等操作,功能非常强大。有一点需要再次强调,openpyxl并不支持操作Office 2007以前版本的Excel文件。

读取Excel文件(行列索引从1开始)

例如在当前文件夹下有一个名为“阿里巴巴2020年股票数据.xlsx”的Excel文件,如果想读取并显示该文件的内容,可以通过如下所示的代码来完成。

import datetime
import openpyxl
import locale #由于文档中存在中文字符的原因报错,故添加locale。
locale.setlocale(locale.LC_CTYPE,'chinese')# 加载一个工作簿 ---> Workbook
wb = openpyxl.load_workbook('阿里巴巴2020年股票数据.xlsx')
# 获取工作表的名字
print(wb.sheetnames) #['股票数据', 'Sheet2', 'Sheet3']
# 获取工作表 ---> Worksheet
sheet = wb.worksheets[0]
# 获得单元格的范围
print(sheet.dimensions) #返回str类型,如:A1:G255
# 获得行数和列数
print(sheet.max_row, sheet.max_column) #255 7# 获取指定单元格的值
print(sheet.cell(3, 3).value)
print(sheet['C3'].value)
print(sheet['G255'].value)# 获取多个单元格(嵌套元组)
print(sheet['A2:C5'])
#((<Cell '股票数据'.A2>, <Cell '股票数据'.B2>, <Cell '股票数据'.C2>), (<Cell '股票数据'.A3>, <Cell '股票数据'.B3>, <Cell '股票数据'.C3>), (<Cell '股票数据'.A4>, <Cell '股票数据'.B4>, <Cell '股票数据'.C4>), (<Cell '股票数据'.A5>, <Cell '股票数据'.B5>, <Cell '股票数据'.C5>))# 除首行外的读取所有单元格的数据
for row_ch in range(2, sheet.max_row + 1):for col_ch in 'ABCDEFG':value = sheet[f'{col_ch}{row_ch}'].valueif type(value) == datetime.datetime:print(value.strftime('%Y年%m月%d日'), end='\t')elif type(value) == int:print(f'{value:<10d}', end='\t')elif type(value) == float:print(f'{value:.4f}', end='\t')else:print(value, end='\t')print()
# 2019年12月31日   213.6400    210.7300    212         212.1000    6773600     212.1000
# 2020年01月02日   219.9800    216.5400    216.6000    219.7700    15873500    219.7700
# 2020年01月03日   218.2030    216.0100    216.3500    217         8604500     217

提示:上面代码中使用的Excel文件“阿里巴巴2020年股票数据.xlsx”可以通过后面的百度云盘地址进行获取。链接:https://pan.baidu.com/s/1rQujl5RQn9R7PadB2Z5g_g 提取码:e7b4。

需要提醒大家一点,openpyxl获取指定的单元格有两种方式,一种是通过cell方法,需要注意,该方法的行索引和列索引都是从1开始的,这是为了照顾用惯了Excel的人的习惯;另一种是通过索引运算,通过指定单元格的坐标,例如C3G255,也可以取得对应的单元格,再通过单元格对象的value属性,就可以获取到单元格的值。通过上面的代码,相信大家还注意到了,可以通过类似sheet['A2:C5']sheet['A2':'C5']这样的切片操作获取多个单元格,该操作将返回嵌套的元组,相当于获取到了多行多列。

写Excel文件

下面我们使用openpyxl来进行写Excel操作。

import randomimport openpyxl# 第一步:创建工作簿(Workbook)
wb = openpyxl.Workbook()# 第二步:添加工作表(Worksheet)
sheet = wb.active
sheet.title = '期末成绩'titles = ('姓名', '语文', '数学', '英语')
for col_index, title in enumerate(titles):sheet.cell(1, col_index + 1, title)names = ('关羽', '张飞', '赵云', '马超', '黄忠')
for row_index, name in enumerate(names):sheet.cell(row_index + 2, 1, name)for col_index in range(2, 5):sheet.cell(row_index + 2, col_index, random.randrange(50, 101))# 第四步:保存工作簿
wb.save('考试成绩表.xlsx')

调整样式(对齐、边框线条、行高和列宽,字体)和公式计算

在使用openpyxl操作Excel时,如果要调整单元格的样式,可以直接通过单元格对象(Cell对象)的属性进行操作。单元格对象的属性包括字体(font)、对齐(alignment)、边框(border)等,具体的可以参考openpyxl的官方文档。在使用openpyxl时,如果需要做公式计算,可以完全按照Excel中的操作方式来进行,具体的代码如下所示。

import openpyxl
from openpyxl.styles import Font, Alignment, Border, Side# 对齐方式
alignment = Alignment(horizontal='center', vertical='center')
# 边框线条
side = Side(color='ff7f50', style='mediumDashed')wb = openpyxl.load_workbook('考试成绩表.xlsx')
sheet = wb.worksheets[0]# 调整行高和列宽
sheet.row_dimensions[1].height = 30
sheet.column_dimensions['E'].width = 120sheet['E1'] = '平均分'
# 设置字体
sheet.cell(1, 5).font = Font(size=18, bold=True, color='ff1493', name='华文楷体')
# 设置对齐方式
sheet.cell(1, 5).alignment = alignment
# 设置单元格边框
sheet.cell(1, 5).border = Border(left=side, top=side, right=side, bottom=side)
for i in range(2, 7):# 公式计算每个学生的平均分sheet[f'E{i}'] = f'=average(B{i}:D{i})'sheet.cell(i, 5).font = Font(size=12, color='4169e1', italic=True)sheet.cell(i, 5).alignment = alignmentwb.save('考试成绩表.xlsx')

生成统计图表

通过openpyxl库,可以直接向Excel中插入统计图表,具体的做法跟在Excel中插入图表大体一致。我们可以创建指定类型的图表对象,然后通过该对象的属性对图表进行设置。当然,最为重要的是为图表绑定数据,即横轴代表什么,纵轴代表什么,具体的数值是多少。最后,可以将图表对象添加到表单中,具体的代码如下所示。

from openpyxl import Workbook
from openpyxl.chart import BarChart, Referencewb = Workbook(write_only=True)
# 与普通工作簿不同,新创建的只写工作簿不包含任何工作表;必须使用:func:create_sheet()方法来创建工作表。
# 在只写工作簿中,只能使用以下:func:append()方法来添加行。不能在任意位置使用:func:cell()或者:func:iter_rows()方法写入(或读取)单元格。
# 它可以导出无限量的数据(甚至超过Excel的实际处理能力),同时将内存使用量控制在10Mb以下。
# 只写工作簿只能保存一次。之后,每次尝试保存工作簿或使用append()附加到现有工作表时都会引发一个:class:openpyxl.utils.exceptions.WorkbookAlreadySaved异常。
# 在单元格数据之前出现在文件中的所有内容都必须在添加单元格之前创建,因为它必须在单元格之前写入文件。例如,应在添加单元格之前设置freeze_panes冻结窗口。
sheet = wb.create_sheet()rows = [('类别', '销售A组', '销售B组'),('手机', 40, 30),('平板', 50, 60),('笔记本', 80, 70),('外围设备', 20, 10),
]# 向表单中添加行
for row in rows:sheet.append(row)# 创建图表对象
chart = BarChart()
chart.type = 'col'
chart.style = 10
# 设置图表的标题
chart.title = '销售统计图'
# 设置图表纵轴的标题
chart.y_axis.title = '销量'
# 设置图表横轴的标题
chart.x_axis.title = '商品类别'
# 设置数据的范围
data = Reference(sheet, min_col=2, min_row=1, max_row=5, max_col=3)
# 设置分类的范围
cats = Reference(sheet, min_col=1, min_row=2, max_row=5)
# 给图表添加数据
chart.add_data(data, titles_from_data=True)
# 给图表设置分类
chart.set_categories(cats)
chart.shape = 4
# 将图表添加到表单指定的单元格中
sheet.add_chart(chart, 'A10')wb.save('demo.xlsx')

运行上面的代码,打开生成的Excel文件,效果如下图所示。

TIPS1:openpyxl只读与只写模式

引自:openpyxl3.0官方文档(4)——只读和只写两种优化模式(https://www.jianshu.com/p/103e9e1d587d)

只读模式

有时,您需要打开或编写非常大的XLSX文件,而openpyxl中的常用方式将无法处理。幸运的是,有两种模式使您能够以固定或接近固定的内存消耗读取和写入无限的数据量。
简介:class:openpyxl.worksheet._read_only.ReadOnlyWorksheet:

from openpyxl import load_workbook
wb = load_workbook(filename='large_file.xlsx', read_only=True)
ws = wb['big_data']for row in ws.rows:for cell in row:print(cell.value)

警告

:class:openpyxl.worksheet._read_only.ReadOnlyWorksheet是只读的
返回的单元格类型不是:class:openpyxl.cell.cell.Cell,而是:class:openpyxl.cell._read_only.ReadOnlyCell。

实际工作表尺寸调整

只读模式依赖于创建文件的应用程序和库所提供有关工作表的正确信息,特别是其中已使用部分信息,即尺寸。有些应用程序设置尺寸信息不正确。您可以使用ws.calculate_dimension()来检查该信息。如果返回一个错误范围,简单地重置max_row和max_column属性就可以使用该文件:

ws.reset_dimensions()

只写模式

在write- only模式下,openpyxl.worksheet.worksheet.Worksheet已被一个更快的替代项替换,:class:openpyxl.worksheet._write_only.WriteOnlyWorksheet。如果要转储大量数据,请确保已安装lxml库。

>>> from openpyxl import Workbook>>> wb = Workbook(write_only=True)>>> ws = wb.create_sheet()>>>>>> # now we'll fill it with 100 rows x 200 columns>>>>>> for irow in range(100):...     ws.append(['%d' % i for i in range(200)])>>> # save the file>>> wb.save('new_big_file.xlsx')

如果单元格包含样式或注释信息,请使用:func:openpyxl.cell.WriteOnlyCell

>>> from openpyxl import Workbook>>> wb = Workbook(write_only = True)>>> ws = wb.create_sheet()>>> from openpyxl.cell import WriteOnlyCell>>> from openpyxl.comments import Comment>>> from openpyxl.styles import Font>>> cell = WriteOnlyCell(ws, value="hello world")>>> cell.font = Font(name='Courier', size=36)>>> cell.comment = Comment(text="A comment", author="Author's Name")>>> ws.append([cell, 3.14, None])>>> wb.save('write_only_file.xlsx')

这将创建一个只有一张工作表的只写工作簿,并附加一个包含3个单元格的行:一个具有自定义字体和注释的文本单元格、一个浮点数单元格和一个空单元格(将被丢弃)。

请注意

与普通工作簿不同,新创建的只写工作簿不包含任何工作表;必须使用:func:create_sheet()方法来创建工作表。
在只写工作簿中,只能使用以下:func:append()方法来添加行。不能在任意位置使用:func:cell()或者:func:iter_rows()方法写入(或读取)单元格。
它可以导出无限量的数据(甚至超过Excel的实际处理能力),同时将内存使用量控制在10Mb以下。
只写工作簿只能保存一次。之后,每次尝试保存工作簿或使用append()附加到现有工作表时都会引发一个:class:openpyxl.utils.exceptions.WorkbookAlreadySaved异常。
在单元格数据之前出现在文件中的所有内容都必须在添加单元格之前创建,因为它必须在单元格之前写入文件。例如,应在添加单元格之前设置freeze_panes冻结窗口。

TIPS2:openpyxl图表

引自:Python自动化办公:openpyxl绘制图表(https://blog.csdn.net/qq_45464895/article/details/123124436)

根据最新数据刷新透视表

from openpyxl import load_workbook # 导入模块
wb = load_workbook("数据.xlsx") # 打开已有数据透视表的工作薄
ws = wb["Sheet1"] # 选择工作表Sheet1ws['B2'] = 182  # B2单元格数据增加100,改成182pivot = ws._pivots[0]  # 选择第一个透视表
pivot.cache.refreshOnLoad = True # 根据最新数据刷新透视表
wb.save('实例.xlsx')

Python|xlwt|xlrd|调整单元格样式(背景,字体,对齐、虚线边框、列宽行高、添加公式)|xlutils|openpyxl|只读与只写|图表|语言基础50课:学习(8)相关推荐

  1. Python|SQL详解之DDL|DML|DQL|DCL|索引|视图、函数和过程|JSON类型|窗口函数|接入MySQL|清屏|正则表达式|executemany|语言基础50课:学习(14)

    文章目录 系列目录 原项目地址 第41课:SQL详解之DDL 建库建表 删除表和修改表 第42课:SQL详解之DML insert操作 delete 操作 update 操作 完整的数据 第43课:S ...

  2. Python|Git remote|hosts|PyCharm常用快捷键|变量转换|命名|类型|运算符|分支|调整tab|循环|语言基础50课:学习记录(1)-项目简介及变量、条件及循环

    目录 系列目录 均引自原项目地址: Python语言基础50课简介及相关网址 修改 hosts 文件 解决 GitHub 上图片无法显示 视频资源 Python语言基础50课代码等文件资源 表1. P ...

  3. Python|线程和进程|阻塞|非阻塞|同步|异步|生成器和协程|资源竞争|进程间通信|aiohttp库|daemon属性值详解|语言基础50课:学习(11)

    文章目录 系列目录 原项目地址 第34课:Python中的并发编程-1 线程和进程 多线程编程 使用 Thread 类创建线程对象 继承 Thread 类自定义线程 使用线程池 守护线程 资源竞争 G ...

  4. Python|http|Chrome Developer Tools|Postman|HTTPie|builtwith库|python-whois库|爬虫及解析|语言基础50课:学习(10)

    文章目录 系列目录 原项目地址 第31课:网络数据采集概述 爬虫的应用领域 爬虫合法性探讨 Robots协议 超文本传输协议(HTTP) 相关工具(Chrome Developer Tools.Pos ...

  5. Python|并发编程|爬虫|单线程|多线程|异步I/O|360图片|Selenium及JavaScript|Scrapy框架|BOM 和 DOM 操作简介|语言基础50课:学习(12)

    文章目录 系列目录 原项目地址 第37课:并发编程在爬虫中的应用 单线程版本 多线程版本 异步I/O版本 总结 第38课:抓取网页动态内容 Selenium 介绍 使用Selenium 加载页面 查找 ...

  6. Python|装饰器|执行时间|递归|动态属性|静态方法和类|继承和多态|isinstance类型判断|溢出|“魔法”方法|语言基础50课:学习记录(6)-函数的高级应用、面向对象编程、进阶及应用

    文章目录 系列目录 原项目地址: 第16课:函数的高级应用 装饰器(记录执行时间的例子) 递归调用 简单的总结 第17课:面向对象编程入门 类和对象 定义类 创建和使用对象 初始化方法 打印对象 面向 ...

  7. python 设置excel单元格式,Python xlwt设置excel单元格字体及格式

    Python xlwt设置excel单元格字体及格式 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  Python xlwt设置excel单元格字体及格式.txt  ...

  8. python全套完整教程-Python语言基础50课 全套完整版(含doc版)

    Python 语言基础 50 课是一套新的简单的给新手小白Python入门教程,由于之前发布的Python学习项目Python-100-Days对初学者来说上手还是有一定难度,而且很多小伙伴希望能够有 ...

  9. Python xlwt设置excel单元格字体及格式

    本文根据自己初学经验编写的使用xlwt模块设置单元格的一些基本样式,如设置单元格的背景颜色,下框线,字体,字体的颜色,设置列宽行高,插入简单的图片,详细程序如下: #!/usr/bin/env pyt ...

最新文章

  1. Python中的and和or
  2. Git.之.最小化配置
  3. ERRORS: ?: (admin.E408) 'django.contrib.auth.middleware.AuthenticationMiddleware' must be in MIDDLEW
  4. hadoop环境安装及简单Map-Reduce示例
  5. 恭喜您被选为CSDN插件内测用户:点此领取福利
  6. android pm命令用法
  7. 阅读之大量数据访问机器的架构优化
  8. 物联网工程-监控箱、配电箱内接线、出线及布线安装规范设计
  9. 群晖室开虚拟机安装于服务器,VMware Workstation安装群晖服务器
  10. 判断丑数python_263. 丑数(Python)
  11. IIS 发布网站无法显示CSS、背景及图片文件---另一个思路--终极方案
  12. 技术胖TypeScript图文视频教程
  13. mysql 单表数据量多大_MySQL单表到底可以多大
  14. 未知USB设备(设备描述符请求失败)终于解决。网上查到的所有方法我都试过了,全部失败。我的成功方法就是调整“电源选项”
  15. 计算机对无人机专业的发展前景,无人机应用专业就业前景大好! 2019年4月1日,人力资源社会保...
  16. itoa函数和atoi函数的实现和用法
  17. 值得一看的电脑教程下载
  18. 今天,就让坏得很的糟老头子来告诉你顺序表的基操,零基础也可get!
  19. 新手搭建个人博客--详细步骤
  20. 微信小程序云开发支付

热门文章

  1. 面经-软件测试面试常见面试题全套合集系列unittest框架面试题 pytest框架面试题 性能测试面试题 4-4
  2. 云呐|企业需要什么比较好的固定资产管理软件
  3. 一个很简单的JavaMVC架构的二手车交易系统
  4. 2020中国公共信用数字化市场白皮书发布(附PDF全文)
  5. springIOC和AOP
  6. Air780E模块AT开发简介
  7. python 获取文本框内容_如何在python中单击按钮时获取文本框中的文本?
  8. TunePat Netflix Video Downloader for Mac(Netflix视频下载器)
  9. Django----将后端数据展示在前端页面(展示用户列表及详情页)
  10. fzu2082 过路费