IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 值得收藏,Python 操作 Excel 报表自动化指南(中) -> 正文阅读

[系统运维]值得收藏,Python 操作 Excel 报表自动化指南(中)

4.6 数据结构

1.一维数据

python的列表,可以和Excel中的行列进行数据交换,python中的一维列表,在Excel中默认为一行数据。

import?xlwings?as?xw

sht=xw.sheets.active

#?将1,2,3分别写入了A1,B1,C1单元格中
sht.range('A1').value=[1,2,3]

#?将A1,B1,C1单元格的值存入list1列表中
list1=sht.range('A1:C1').value

#?将1,2,3分别写入了A1,A2,A3单元格中
sht.range('A1').options(transpose=True).value=[1,2,3]

#?将A1,A2,A3单元格中值存入list1列表中
list1=sht.range('A1:A3').value

2.二维数据

python的二维列表,可以转换为Excel中的行列。二维列表,即列表中的元素还是列表。在Excel中,二维列表中的列表元素,代表Excel表格中的一列。例如:

#?将a1,a2,a3输入第一列,b1,b2,b3输入第二列
list1=[[‘a1’,'a2','a3'],['b1','b2','b3']]
sht.range('A1').value=list1

图片

#?将A1:B3的值赋给二维列表list1
list1=sht.range('A1:B3').value

3.Excel中区域的选取表格

#?选取第一列
rng=sht.?range('A1').expand('down')
rng.value=['a1','a2','a3']

图片

想看更多视频教程课加任姐姐VX,免费领取哦

#?选取第一行
rng=sht.range('A1').expand('right')
rng=['a1','b1']

图片

#?选取表格
rng.sht.range('A1').expand('table')
rng.value=[[‘a1’,'a2','a3'],['b1','b2','b3']]

图片

4.7 xlwings生成图表

import?xlwings?as?xw
app?=?xw.App()
wb?=?app.books.active
sht?=?wb.sheets.active

chart?=?sht.charts.add(100,?10)??# 100, 10?为图表放置的位置坐标。以像素为单位。
chart.set_source_data(sht.range('A1').expand())??#?参数为表格中的数据区域。
# chart.chart_type = i ??????????????#?用来设置图表类型,具体参数件下面详细说明。
chart.api[1].ChartTitle.Text?=?i??????????#?用来设置图表的标题。

示例代码:

import?xlwings?as?xw
app?=?xw.App()
wb?=?app.books.active
sht?=?wb.sheets.active
#?生成图表的数据
sht.range('A1').value?=?[['时间',?'数量'],?['1日',?2],?['2日',?1],?['3日',?3]
?????????????,?['4日',?4],?['5日',?5],?['6日',?6]]
"""图表类型参数,被注释的那几个,无法生成对应的图表"""
dic?=?{
??'3d_area':?-4098,
??'3d_area_stacked':?78,
??'3d_area_stacked_100':?79,
??'3d_bar_clustered':?60,
??'3d_bar_stacked':?61,
??'3d_bar_stacked_100':?62,
??'3d_column':?-4100,
??'3d_column_clustered':?54,
??'3d_column_stacked':?55,
??'3d_column_stacked_100':?56,
??'3d_line':?-4101,
??'3d_pie':?-4102,
??'3d_pie_exploded':?70,
??'area':?1,
??'area_stacked':?76,
??'area_stacked_100':?77,
??'bar_clustered':?57,
??'bar_of_pie':?71,
??'bar_stacked':?58,
??'bar_stacked_100':?59,
??'bubble':?15,
??'bubble_3d_effect':?87,
??'column_clustered':?51,
??'column_stacked':?52,
??'column_stacked_100':?53,
??'cone_bar_clustered':?102,
??'cone_bar_stacked':?103,
??'cone_bar_stacked_100':?104,
??'cone_col':?105,
??'cone_col_clustered':?99,
??'cone_col_stacked':?100,
??'cone_col_stacked_100':?101,
??'cylinder_bar_clustered':?95,
??'cylinder_bar_stacked':?96,
??'cylinder_bar_stacked_100':?97,
??'cylinder_col':?98,
??'cylinder_col_clustered':?92,
??'cylinder_col_stacked':?93,
??'cylinder_col_stacked_100':?94,
??'doughnut':?-4120,
??'doughnut_exploded':?80,
??'line':?4,
??'line_markers':?65,
??'line_markers_stacked':?66,
??'line_markers_stacked_100':?67,
??'line_stacked':?63,
??'line_stacked_100':?64,
??'pie':?5,
??'pie_exploded':?69,
??'pie_of_pie':?68,
??'pyramid_bar_clustered':?109,
??'pyramid_bar_stacked':?110,
??'pyramid_bar_stacked_100':?111,
??'pyramid_col':?112,
??'pyramid_col_clustered':?106,
??'pyramid_col_stacked':?107,
??'pyramid_col_stacked_100':?108,
??'radar':?-4151,
??'radar_filled':?82,
??'radar_markers':?81,
??#?'stock_hlc':?88,
??#?'stock_ohlc':?89,
??#?'stock_vhlc':?90,
??#?'stock_vohlc':?91,
??#?'surface':?83,
??#?'surface_top_view':?85,
??#?'surface_top_view_wireframe':?86,
??#?'surface_wireframe':?84,
??'xy_scatter':?-4169,
??'xy_scatter_lines':?74,
??'xy_scatter_lines_no_markers':?75,
??'xy_scatter_smooth':?72,
??'xy_scatter_smooth_no_markers':?73
}
w?=?385
h?=?241
n?=?0
x?=?100
y?=?10
for?i?in?dic.keys():
??xx?=?x?+?n?%?3*w??#?用来生成图表放置的x坐标。
??yy?=?y?+?n//3*h???#?用来生成图表放置的y坐标。
??chart?=?sht.charts.add(xx,?yy)
??chart.set_source_data(sht.range('A1').expand())
??chart.chart_type?=?i
??chart.api[1].ChartTitle.Text?=?i
??n?+=?1
wb.save('chart_图表')
wb.close()
app.quit()

效果如下:

图片

图片

图片

图片

图片

4.8 实战训练

1. xlwings 新建 Excel 文档

图片

程序示例:

#?3.4.2?xlwings?新建?Excle?文档
def?fun3_4_2():
????"""
????visible
??? Ture:可见excel
??? False:不可见excel

????add_book
????True:打开excel并且新建工作簿
??? False:不新建工作簿
????"""
????app?=?xw.App(visible=True,?add_book=False)

????#?新建工作簿?(如果不接下一条代码的话,Excel只会一闪而过,卖个萌就走了)
????wb?=?app.books.add()

????#?保存工作簿
????wb.save('example.xlsx')

????#?退出工作簿
????wb.close()

????#?退出Excel
????app.quit()

执行程序后文件夹增加了“example.xlsx”:

图片

此时表格是空的:

图片

2. xlwings 打开已存在的 Excel 文档

现有表格长这样:

图片

运行程序:

#?3.4.3?xlwings?打开已存在的Excel文件
def?fun3_4_3():
????#?新建Excle 默认设置:程序可见,只打开不新建工作薄,屏幕更新关闭
????app?=?xw.App(visible=True,?add_book=False)
????app.display_alerts?=?False
????app.screen_updating?=?False

????#?打开已存在的Excel文件
????wb=app.books.open('./3_4?xlwings?修改操作练习.xlsx')

????#?保存工作簿
????wb.save('example_2.xlsx')

????#?退出工作簿
????wb.close()

????#?退出Excel
????app.quit()

生成新的表格:

图片

内容如下:

图片

3. xlwings 读写 Excel

程序示例:

#??3.4.4?xlwings读写?Excel
def?fun3_4_4():
????#?新建Excle 默认设置:程序可见,只打开不新建工作薄,屏幕更新关闭
????app?=?xw.App(visible=True,?add_book=False)
????app.display_alerts?=?False
????app.screen_updating?=?False

????#?打开已存在的Excel文件
????wb=app.books.open('./3_4?xlwings?修改操作练习.xlsx')

????#?获取sheet对象
????print(wb.sheets)
????sheet?=?wb.sheets[0]
????#?sheet?=?wb.sheets["sheet1"]

????#?读取Excel信息
????cellB1_value?=?sheet.range('B1').value
????print("单元格B1内容为:",cellB1_value)

????#?清除单元格内容和格式
????sheet.range('A1').clear()

????#?写入单元格
????sheet.range('A1').value?=?"xlwings写入"

????#?保存工作簿
????wb.save('example_3.xlsx')

????#?退出工作簿
????wb.close()

????#?退出Excel
????app.quit()

执行效果:

图片

图片

?想看更多视频教程课加任姐姐VX,免费领取哦

5. Python openpyxl 读取 写入 修改 操作Excel

在openpyxl中,主要用到三个概念:Workbooks,Sheets,Cells。

  • Workbook就是一个excel工作表;

  • Sheet是工作表中的一张表页;

  • Cell就是简单的一个格。

openpyxl就是围绕着这三个概念进行的,不管读写都是“三板斧”:打开Workbook,定位Sheet,操作Cell。

官方文档:https://openpyxl.readthedocs.io/en/stable/

官方示例:

from?openpyxl?import?Workbook
wb?=?Workbook()

#?grab?the?active?worksheet
ws?=?wb.active

#?Data?can?be?assigned?directly?to?cells
ws['A1']?=?42

#?Rows?can?also?be?appended
ws.append([1,?2,?3])

#?Python?types?will?automatically?be?converted
import?datetime
ws['A2']?=?datetime.datetime.now()

#?Save?the?file
wb.save("sample.xlsx")

5.1 openpyxl 基本操作

1.安装

pip?install?openpyxl

因为我已经安装,所以提示如下信息:

图片

2.打开文件

(1)新建

from??openpyxl?import??Workbook?
#?实例化
wb?=?Workbook()
#?激活?worksheet
ws?=?wb.active

(2)打开已有

from?openpyxl??import?load_workbook

wb?=?load_workbook('文件名称.xlsx')

3.写入数据

#?方式一:数据可以直接分配到单元格中(可以输入公式)
ws['A1']?=?42
#?方式二:可以附加行,从第一列开始附加(从最下方空白处,最左开始)(可以输入多行)
ws.append([1,?2,?3])
#?方式三:Python 类型会被自动转换
ws['A3']?=?datetime.datetime.now().strftime("%Y-%m-%d")

4.创建表(sheet)

#?方式一:插入到最后(default)
ws1?=?wb.create_sheet("Mysheet")?
#?方式二:插入到最开始的位置
ws2?=?wb.create_sheet("Mysheet",?0)

5.选择表(sheet)

#?sheet?名称可以作为?key?进行索引
>>>?ws3?=?wb["New?Title"]
>>>?ws4?=?wb.get_sheet_by_name("New?Title")
>>>?ws?is?ws3?is?ws4
True

6.查看表名(sheet)

#?显示所有表名
>>>?print(wb.sheetnames)
['Sheet2',?'New?Title',??'Sheet1']
#?遍历所有表
>>>?for?sheet?in??wb:
...?????print(sheet.title)

7.访问单元格(cell)

(1)单个单元格访问

#?方法一
>>>?c?=?ws['A4']
#?方法二:row 行;column 列
>>>?d?=?ws.cell(row=4,?column=2,?value=10)
#?方法三:只要访问就创建
>>>?for?i?in??range(1,101):
...?????????for?j?in?range(1,101):
...????????????ws.cell(row=i,?column=j)

(2)多个单元格访问

#?通过切片
>>>?cell_range?=?ws['A1':'C2']
#?通过行(列)
>>>?colC?=?ws['C']
>>>?col_range?=?ws['C:D']
>>>?row10?=?ws[10]
>>>?row_range?=?ws[5:10]
#?通过指定范围(行?→?行)
>>>?for?row?in??ws.iter_rows(min_row=1,?max_col=3,?max_row=2):
...????for?cell?in??row:
...????????print(cell)
<Cell?Sheet1.A1>
<Cell?Sheet1.B1>
<Cell?Sheet1.C1>
<Cell?Sheet1.A2>
<Cell?Sheet1.B2>
<Cell?Sheet1.C2>?
#?通过指定范围(列?→?列)
>>>?for?row?in??ws.iter_rows(min_row=1,?max_col=3,?max_row=2):
...????for?cell?in??row:
...????????print(cell)
<Cell?Sheet1.A1>
<Cell?Sheet1.B1>
<Cell?Sheet1.C1>
<Cell?Sheet1.A2>
<Cell?Sheet1.B2>
<Cell?Sheet1.C2>
#?遍历所有?方法一
>>>?ws?=?wb.active
>>>?ws['C9']?=?'hello?world'
>>>?tuple(ws.rows)
((<Cell?Sheet.A1>,?<Cell?Sheet.B1>,?<Cell?Sheet.C1>),
(<Cell?Sheet.A2>,?<Cell?Sheet.B2>,?<Cell?Sheet.C2>),
...
(<Cell?Sheet.A8>,?<Cell?Sheet.B8>,?<Cell?Sheet.C8>),
(<Cell?Sheet.A9>,?<Cell?Sheet.B9>,?<Cell?Sheet.C9>))
#?遍历所有?方法二
>>>?tuple(ws.columns)
((<Cell?Sheet.A1>,
<Cell?Sheet.A2>,
<Cell?Sheet.A3>,
...
<Cell?Sheet.B7>,
<Cell?Sheet.B8>,
<Cell?Sheet.B9>),
(<Cell?Sheet.C1>,
...
<Cell?Sheet.C8>,
<Cell?Sheet.C9>))

8.保存数据

wb.save('文件名称.xlsx')

9.其它

(1)改变sheet标签按钮颜色

ws.sheet_properties.tabColor?=?"1072BA"?#?色值为RGB16进制值

(2)获取最大行,最大列

#?获得最大列和最大行
print(sheet.max_row)
print(sheet.max_column)

(3)获取每一行每一列

  • sheet.rows为生成器, 里面是每一行的数据,每一行又由一个tuple包裹。

  • sheet.columns类似,不过里面是每个tuple是每一列的单元格。

#?因为按行,所以返回A1,?B1,?C1这样的顺序
for?row?in?sheet.rows:
????for?cell?in?row:
????????print(cell.value)

#?A1,?A2,?A3这样的顺序
for?column?in?sheet.columns:
????for?cell?in?column:
????????print(cell.value)

(4)根据数字得到字母,根据字母得到数字

from?openpyxl.utils?import?get_column_letter,?column_index_from_string

#?根据列的数字返回字母
print(get_column_letter(2))??#?B
#?根据字母返回列的数字
print(column_index_from_string('D'))??#?4

(5)删除工作表

#?方式一
wb.remove(sheet)
#?方式二
del?wb[sheet]

(6)矩阵置换

rows?=?[
????['Number',?'data1',?'data2'],
????[2,?40,?30],
????[3,?40,?25],
????[4,?50,?30],
????[5,?30,?10],
????[6,?25,?5],
????[7,?50,?10]]

list(zip(*rows))

#?out
[('Number',?2,?3,?4,?5,?6,?7),
?('data1',?40,?40,?50,?30,?25,?50),
?('data2',?30,?25,?30,?10,?5,?10)]

#?注意?方法会舍弃缺少数据的列(行)
rows?=?[
????['Number',?'data1',?'data2'],
????[2,?40??????],????#?这里少一个数据
????[3,?40,?25],
????[4,?50,?30],
????[5,?30,?10],
????[6,?25,?5],
????[7,?50,?10],
]
#?out
[('Number',?2,?3,?4,?5,?6,?7),?('data1',?40,?40,?50,?30,?25,?50)]

?想看更多视频教程课加任姐姐VX,免费领取哦

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-11-16 19:14:17  更:2021-11-16 19:14:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 0:25:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码