479|5

553

帖子

3

TA的资源

纯净的硅(初级)

楼主
 

书籍《Python编程快速上手(第2版)》阅读心得7、处理Excel表格 [复制链接]

本帖最后由 xinmeng_wit 于 2024-5-30 20:51 编辑

本次来学习利用python处理excel文件相关的知识。

excel是我们日常工作中用的最多的文件了,使用python来处理excel将会极大地提高工作效率,本次的内容非常的重要。

 

Python中处理excel文件需要安装第三方库openpyxl,应该还有其它的处理excel的库,但是本次学习使用的是openpyxl库。

因为是第三方库,所有使用之前需要进行一个安装,安装方式就不再叙述了,与其它库的安装方法一样。

 

首先来学习一下Excel文件的写入操作,该操作包括Excel文件的创建和保存,sheet的创建和删除,sheet的重命名。

例子如下:

import openpyxl

wb = openpyxl.Workbook()   # 创建一个新的Excel工作簿
print(wb.sheetnames)       # 打印sheet名
sheet = wb.active          # 激活sheet
print(sheet.title)         # 打印sheet名
sheet.title = 'Sheet_name' # 修改sheet名
print(wb.sheetnames)       # 打印sheet名

wb.create_sheet()          # 创建一个新的sheet
print(wb.sheetnames)       # 打印sheet名

wb.create_sheet(index=0, title='First sheet')   # 在最前面创建一个新的sheet
print(wb.sheetnames)       # 打印sheet名

wb.create_sheet(index=2, title='Middle sheet')   # 在index为2的地方创建一个新的sheet
print(wb.sheetnames)       # 打印sheet名

del wb['Sheet_name']       # 删除名字为Sheet_name的sheet
print(wb.sheetnames)       # 打印sheet名

sheet = wb['First sheet']  # 选取sheet
sheet['A1'] = 'Hello World!'# 向A1单元格中写入内容
print(sheet['A1'].value)   # 打印单元格的内容

#保存Excel工作簿
wb.save('D:Python\\Excel create and write test.xlsx')

运行结果:

 

打开生成的Excel create and write test.xlsx文件,查看里面的sheet和单元格内容:

 

 

接下来,再来看看Excel的读取操作。

访问单元格可以通过sheet加上下标的方式,还可以通过cell方法来进行访问。

另外,还可以获取多个连续单元格的对象,还可以获取同一行的所有单元格。

还有比较高级的设置字体大小,使用公式和设置行高和列宽等。

如下例子,展示了如何使用这些方法。

import openpyxl
from openpyxl.styles import Font

wb = openpyxl.load_workbook('D:Python\\Excel read test.xlsx')   # 打开一个已经存在的excel表格
print(wb.sheetnames)       # 打印sheet名
sheet = wb['Sheet']        # 选取sheet
print(sheet['A2'].value)   # 打印单元格的内容
cell = sheet['A2']
# 获取单元格的行,列和值
print('Row: %s, Column: %s is %s' % (cell.row, cell.column, cell.value))
# 获取单元格的位置信息和值
print('Cell %s is %s' % (cell.coordinate, cell.value))

# 可以通过cell()方法来获取单元格的内容
print('Cell %s is %s' % (cell.coordinate, sheet.cell(row=2, column=1).value))

# 获取sheet的行数和列数
print('Row number is %s, Column number is %s' % (sheet.max_row, sheet.max_column))

# 获取A2到C35这个矩形区域的所有单元格,并转换为元组
content = tuple(sheet['A2':'C35'])

#打印A2~C35所有单元格的内容
for row in sheet['A2':'C35']:
    for cell in row:
        print(cell.coordinate, cell.value)
    print('---END OF ROW---')

# 创建一个字体
italic24Font = Font(size=24, italic=True)
# 应用字体到A2单元格
sheet['A2'].font = italic24Font

#使用公式SUM来进行单元格自动求和
sheet['D3'] = '=SUM(C2:C3)'

# 设置行高和列宽
sheet.row_dimensions[5].height = 70
sheet.column_dimensions['C'].width = 20

wb.save('D:Python\\Excel read test.xlsx')

运行结果:

['Sheet']
房地产开发投资(亿元)
Row: 2, Column: 1 is 房地产开发投资(亿元)
Cell A2 is 房地产开发投资(亿元)
Cell A2 is 房地产开发投资(亿元)
Row number is 35, Column number is 3
A2 房地产开发投资(亿元)
B2 22082
C2 -9.5
---END OF ROW---
A3  其中:住宅
B3 16585
C3 -10.5
---END OF ROW---
A4     办公楼
B4 990
C4 -0.4
---END OF ROW---
A5     商业营业用房
B5 1597
C5 -10.5
---END OF ROW---
A6 房屋施工面积(万平方米)
B6 678501
C6 -11.1
---END OF ROW---
A7  其中:住宅
B7 474580
C7 -11.7
---END OF ROW---
A8     办公楼
B8 28114
C8 -8.6
---END OF ROW---
A9     商业营业用房
B9 59247
C9 -11.8
---END OF ROW---
A10 房屋新开工面积(万平方米)
B10 17283
C10 -27.8
---END OF ROW---
A11  其中:住宅
B11 12534
C11 -28.7
---END OF ROW---
A12     办公楼
B12 546
C12 -10.9
---END OF ROW---
A13     商业营业用房
B13 1043
C13 -32.8
---END OF ROW---
A14 房屋竣工面积(万平方米)
B14 15259
C14 -20.7
---END OF ROW---
A15  其中:住宅
B15 11148
C15 -21.9
---END OF ROW---
A16     办公楼
B16 448
C16 -6.8
---END OF ROW---
A17     商业营业用房
B17 1103
C17 -23.6
---END OF ROW---
A18 新建商品房销售面积(万平方米)
B18 22668
C18 -19.4
---END OF ROW---
A19  其中:住宅
B19 18942
C19 -23.4
---END OF ROW---
A20     办公楼
B20 581
C20 11.9
---END OF ROW---
A21     商业营业用房
B21 1378
C21 4.8
---END OF ROW---
A22 新建商品房销售额(亿元)
B22 21355
C22 -27.6
---END OF ROW---
A23  其中:住宅
B23 18523
C23 -30.7
---END OF ROW---
A24     办公楼
B24 759
C24 6.3
---END OF ROW---
A25     商业营业用房
B25 1386
C25 1.5
---END OF ROW---
A26 商品房待售面积(万平方米)
B26 74833
C26 15.6
---END OF ROW---
A27  其中:住宅
B27 39458
C27 23.9
---END OF ROW---
A28     办公楼
B28 5204
C28 11.1
---END OF ROW---
A29     商业营业用房
B29 14246
C29 1.5
---END OF ROW---
A30 房地产开发企业本年到位资金(亿元)
B30 25689
C30 -26
---END OF ROW---
A31  其中:国内贷款
B31 4554
C31 -9.1
---END OF ROW---
A32     利用外资
B32 7
C32 -11.9
---END OF ROW---
A33     自筹资金
B33 8681
C33 -14.6
---END OF ROW---
A34     定金及预收款
B34 7435
C34 -37.5
---END OF ROW---
A35     个人按揭贷款
B35 3643
C35 None
---END OF ROW---

 

 

最后再来看以下如何利用Python在excel中画图表。

画图表也比较简单,格式相对比较固定。

先用openpyxl.chart.Reference选定数据,再用openpyxl.chart.Series定义一个series对象,再定义chart对象

指定chart标题,append插入chart,最后设置chart的起始位置就可以了。

import openpyxl
import openpyxl.chart
import openpyxl.chart.series

# 创建一个工作簿
wb = openpyxl.Workbook()
sheet = wb.active
# 向表中填入一些数据
for i in range(1,11):
    sheet['A' + str(i)] = i

# 选定要画图的原始数据
refObj = openpyxl.chart.Reference(sheet, min_col=1, min_row=1, max_col=1, max_row=10)
# 定义series对象
seriesObj = openpyxl.chart.Series(refObj, title='First series')
# 定义chart对象
charObj = openpyxl.chart.BarChart()
# 设置chart的标题
charObj.title = 'My chart'
# 插入chart
charObj.append(seriesObj)
# 设置chart的起始位置
sheet.add_chart(charObj, 'C5')
# 保存
wb.save('D:Python\\Excel chart test.xlsx')

 

运行完成后,打开execl看看画好的chart,如下:

 

画出的chart还是比较漂亮的,同时,也可以选择其它类型的chart,比如折线图,散点图和饼状图等等。

最新回复

嗯,看起来很牛逼的样子啊,先下载下来了。等有时间了,好好研究研究哈。   详情 回复 发表于 2024-6-7 21:49
点赞 关注(1)
 
 

回复
举报

7095

帖子

11

TA的资源

版主

沙发
 

openpyxl这个库非常的强大呀!

如果是图表,可以试试pychart!

点评

好的,感谢大佬,哪天有空试试  详情 回复 发表于 2024-6-1 20:24
 
 
 

回复

6585

帖子

9

TA的资源

版主

板凳
 

继续学习文件处理,我刚给无文本文件进行简单操作

点评

加油加油,一起学习  详情 回复 发表于 2024-6-1 20:24
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 
 
 

回复

553

帖子

3

TA的资源

纯净的硅(初级)

4
 
lugl4313820 发表于 2024-6-1 11:50 openpyxl这个库非常的强大呀! 如果是图表,可以试试pychart!

好的,感谢大佬,哪天有空试试

 
 
 

回复

553

帖子

3

TA的资源

纯净的硅(初级)

5
 
秦天qintian0303 发表于 2024-6-1 15:24 继续学习文件处理,我刚给无文本文件进行简单操作

加油加油,一起学习

 
 
 

回复

43

帖子

0

TA的资源

一粒金砂(中级)

6
 

嗯,看起来很牛逼的样子啊,先下载下来了。等有时间了,好好研究研究哈。

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表