脚本怎样筛选未完成订单

wen 实用脚本 30

本文目录导读:

脚本怎样筛选未完成订单

  1. 场景一:如果你有 Excel 表格(使用 Python + Pandas)
  2. 场景二:如果你使用 SQL 数据库(MySQL / PostgreSQL / SQLite)
  3. 场景三:如果你使用 Excel 原生 VBA(宏)
  4. 场景四:如果你需要筛选 API 返回的 JSON 数据(常见于电商平台)
  5. 进阶技巧:处理复杂的“未完成”定义

要筛选未完成订单,通常需要根据你的数据存储方式(如 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 ...]

你需要我针对特定的数据格式(例如特定的电商系统单据)或特定的筛选逻辑(比如按日期范围+状态)提供更详细的脚本吗?

抱歉,评论功能暂时关闭!