本文目录导读:

- 场景一:如果你有 Excel 表格(使用 Python + Pandas)
- 场景二:如果你使用 SQL 数据库(MySQL / PostgreSQL / SQLite)
- 场景三:如果你使用 Excel 原生 VBA(宏)
- 场景四:如果你需要筛选 API 返回的 JSON 数据(常见于电商平台)
- 进阶技巧:处理复杂的“未完成”定义
要筛选未完成订单,通常需要根据你的数据存储方式(如 Excel、数据库、API 或本地文件)来选择合适的脚本语言(Python、SQL、VBA 等)。
以下提供三种最常见场景的脚本方案:
如果你有 Excel 表格(使用 Python + Pandas)
假设你的 Excel 文件有一列叫做 订单状态(包含“已完成”、“待发货”、“已取消”等)。
import pandas as pd
# 1. 读取Excel文件
df = pd.read_excel("订单数据.xlsx")
# 2. 定义“未完成”的状态列表(排除已完成和已取消)
unfinished_status = ['待支付', '待发货', '已发货', '处理中', '部分发货']
# 3. 筛选出未完成的订单
df_unfinished = df[df['订单状态'].isin(unfinished_status)]
# 4. 保存或查看结果
df_unfinished.to_excel("未完成订单.xlsx", index=False)
print(f"找到 {len(df_unfinished)} 条未完成订单")
关键点:
isin()方法可以一次性匹配多个状态。
如果你使用 SQL 数据库(MySQL / PostgreSQL / SQLite)
假设表名为 orders,字段有 status(varchar)。
-- 筛选未完成订单:排除“已完成”和“已取消”
SELECT *
FROM orders
WHERE status NOT IN ('已完成', '已取消');
-- 或者明确指定未完成的状态(更安全)
SELECT *
FROM orders
WHERE status IN ('待支付', '待发货', '已发货', '处理中');
建议:使用
NOT IN排除明确完成的订单,这样可以自动包含将来新增的中间状态。
如果你使用 Excel 原生 VBA(宏)
适用于不想装 Python、直接在 Excel 里操作的情况。
Sub FilterUnfinishedOrders()
Dim ws As Worksheet
Dim rng As Range
Dim lastRow As Long
Set ws = ThisWorkbook.Sheets("订单数据") ' 修改为你的工作表名
lastRow = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row ' 假设状态在C列
' 清除已有筛选
ws.AutoFilterMode = False
' 应用自动筛选(排除“已完成”和“已取消”)
With ws.Range("A1:C" & lastRow)
.AutoFilter Field:=3, Criteria1:="<>已完成", _
Operator:=xlAnd, Criteria2:="<>已取消"
End With
' 将筛选结果复制到新表
ws.Range("A1:C" & lastRow).SpecialCells(xlCellTypeVisible).Copy
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Paste
ActiveSheet.Name = "未完成订单"
MsgBox "已完成筛选"
End Sub
如果你需要筛选 API 返回的 JSON 数据(常见于电商平台)
假设你从淘宝/Shopify等API获取订单列表,每个订单有一个 status 字段。
import requests
# 假设你已经获取了订单列表
# orders_list = response.json().get('orders', [])
# 例如手动模拟数据
orders_list = [
{"order_id": 101, "status": "completed"},
{"order_id": 102, "status": "pending"},
{"order_id": 103, "status": "shipped"},
{"order_id": 104, "status": "cancelled"}
]
# 定义未完成状态
unfinished_statuses = ['pending', 'shipped', 'processing']
# 列表推导式筛选
unfinished_orders = [order for order in orders_list
if order['status'] in unfinished_statuses]
print(unfinished_orders)
进阶技巧:处理复杂的“未完成”定义
有些业务里,“未完成”不仅仅是看状态字段,可能还包括:
- 时间条件:逾期未发货
- 金额条件:尾款未付清的订单
- 组合条件:状态为“已发货”但物流未签收超过7天
示例(Python):
from datetime import datetime, timedelta
seven_days_ago = datetime.now() - timedelta(days=7)
# 筛选:状态为“已发货” 且 发货时间超过7天 但 签收时间为空
df_unfinished = df[
(df['订单状态'] == '已发货') &
(df['发货时间'] < seven_days_ago) &
(df['签收时间'].isna())
]
| 数据来源 | 推荐方法 | 关键代码 |
|---|---|---|
| Excel文件 | Python Pandas isin() 或 query() |
df[df['状态'].isin(['待发货','待支付'])] |
| SQL数据库 | WHERE status NOT IN |
WHERE status NOT IN ('已完成','已取消') |
| Excel原生 | VBA AutoFilter | Criteria1:="<>已完成" |
| JSON/API | Python列表推导式 | [o for o in orders if o['status'] in ...] |
你需要我针对特定的数据格式(例如特定的电商系统单据)或特定的筛选逻辑(比如按日期范围+状态)提供更详细的脚本吗?
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播