Excel文档的读取(3)

我们继续观察"销售订单数据"这张工作表。这张表里的每一行其实就是一个订单。
下一步,我们需要在工作表里,逐行去判断哪些订单商品是"火龙果可乐",并把对应的订单总价添加到当月售卖总金额里。
此处,我们需要用到行数据的遍历。

遍历orderSheet中所有的行数据,并使用print输出到终端

在遍历工作表之前,定义一个变量colaSold用来表示当月"火龙果可乐"的销售金额

刚才我们使用行遍历读取出了工作表中的每一行数据。
接下来,我们需要在行遍历中逐行去判断哪些订单商品是"火龙果可乐",并把对应的订单总价添加到当月售卖总金额里。
首先我们定义一个变量colaSold,用来表示当月"火龙果可乐"的销售金额,并赋值为0。

导入openpyxl模块

import openpyxl

读取工作目录里名为"2019年1月销售订单.xlsx"的工作簿并赋值给变量wb

wb = openpyxl.load_workbook("2019年1月销售订单.xlsx", data_only=True)

通过工作簿对象wb获取名为"销售订单数据"的工作表对象,并赋值给变量orderSheet

orderSheet = wb"销售订单数据"

定义一个变量colaSold用来表示本月"火龙果可乐"的销售金额,并赋值为0

colaSold = 0

遍历工作表的所有行数据

for rowData in orderSheet.rows:

print(rowData)

接下来,我们需要让程序判断表单中每一行的订单商品名是否为"火龙果可乐"。如果是,就逐一把销售金额添加到colaSold变量里。
通过观察"销售订单数据"工作表,我们知道商品名对应的是第C列。 


通过前面的学习可以发现,行遍历的输出结果,是由单元格对象组成的元组。
在元组中要定位到具体的列不能使用列号"C",而需要用++索引++ 。 我们可以通过肉眼观察,来确定商品名的列"C"是第3列,所以索引是2。
获取每一行商品名的代码如下:productName = rowData2.value

如果要定位的列数字比较大,比如订单的总价在第M列,通过肉眼观察来确定索引略显繁琐。
这时,可以使用函数:openpyxl.utils.cell.column_index_from_string(),来获取列号对应的数字,比如传入参数"E"就会获取到数字5,表示"E"列是第5列。这个数字++减一++ 即可得到对应的索引。因为索引是从0开始的,所以需要减一。

获取每一行订单总价的代码如下:

导入openpyxl模块

import openpyxl

添加data_only=True打开工作簿,获取公式计算后的值

wb = openpyxl.load_workbook("2019年1月销售订单.xlsx", data_only=True)

通过工作簿对象wb获取名为"销售订单数据"的工作表对象,并赋值给变量orderSheet

orderSheet = wb"销售订单数据"

定义一个变量colaSold用来表示本月"火龙果可乐"的销售金额

colaSold = 0

遍历工作表的所有行数据

for rowData in orderSheet.rows:

通过索引2获取第3列数据,也就是商品名

productName = rowData2.value

获取订单总价M列的索引总和,这里之所以-1是因为需要将表头去除

priceIndex = openpyxl.utils.cell.column_index_from_string("M") - 1

price = rowDatapriceIndex.value

输出价格

print(price)

导入openpyxl模块

import openpyxl

使用openpyxl.load_workbook()函数读取工作目录里名为"2019年10月销售订单.xlsx"的工作簿并赋值给变量wb

记得添加data_only=True参数打开工作簿,获取公式计算后的值

wb = openpyxl.load_workbook("2019年10月销售订单.xlsx", data_only=True)

通过工作簿对象wb获取名为"销售订单数据"的工作表对象,并赋值给变量orderSheet

orderSheet = wb"销售订单数据"

定义一个变量chipsSold用来表示本月"榴莲味薯片"的销售金额

chipsSold = 0

遍历工作表的所有行数据

for rowData in orderSheet.rows:

获取这一行的商品名赋值给变量productName

商品名C列是第3列,索引也就是2,记得添加.value读取单元格的值

productName = rowData2.value

获取订单总价I列的索引

priceIndex = openpyxl.utils.cell.column_index_from_string("I") - 1

根据索引获取本行订单总价并赋值给变量price

price = rowDatapriceIndex.value

判断productName是否是"榴莲味薯片",如果是,就逐个添加到本月销售额(chipsSold)里

if productName == "榴莲味薯片":

chipsSold = chipsSold + price

打印出本月销售额,格式为:2019年10月榴莲味薯片销售额为{销售总额}元

print(f"2019年10月榴莲味薯片销售额为{chipsSold}元")

在明天的课程中,我们将继续完成剩下的2个步骤:

  1. 重复执行今天学到的方法,计算出所有12个月的销售额。

  2. 找出这12个月里销售额的最大值,然后锁定其对应的月份。

最终解决阿珍的问题:

"火龙果可乐"哪个月份的销售额最高?

相关推荐
计算机魔术师7 分钟前
Anthropic官方插件被「寄生」,背后是同一类攻击又来了
前端
染指11109 分钟前
162.Agent-LangGraph-检查点的作用
人工智能·python·langchain·agents
Wang's Blog23 分钟前
Java 项目实战:交友项目 - 联系人列表
java·开发语言·交友
我命由我1234528 分钟前
访客系统形式(有用户概念、无用户概念)
java·开发语言·前端·javascript·python·产品运营·产品经理
key_3_feng43 分钟前
评估与对齐:Agent 自我进化的护栏
前端·数据库·agent
xixingzhe243 分钟前
图表中同比与环比的区别:看趋势还是看变化?
开发语言·python
forest_091 小时前
当 AI 搜索开始「自我进化」,谁来进化它的核实?——「已核实」结论复核器:3 条结论挖出 2 个洞(附可运行代码)
人工智能·python·机器学习·prompt·agi
香蕉大香蕉(06敬畏市场)1 小时前
MySQL 单点详解(01)
java·数据库·mysql·面试·博客·实习
小小张说故事1 小时前
Python 的 str 为什么设计成不可变?拆开字符串驻留、字符串池,以及 += 拼接到底慢在哪
后端·python
LaughingZhu1 小时前
Product Hunt 热榜 2026-10-30:Empacer、Scape、Floot in ChatGPT
java·前端·数据库·人工智能·chatgpt·notion