当前位置:首页>python>Python 玩转 Excel 案例【第 26 期】:取消合并 + 智能填充数据

Python 玩转 Excel 案例【第 26 期】:取消合并 + 智能填充数据

  • 2026-06-24 10:04:49
Python 玩转 Excel 案例【第 26 期】:取消合并 + 智能填充数据

Python 玩转 Excel 案例【第 26 期】:取消合并 + 智能填充数据

📌 案例说明

原始数据表(测试数据.xlsx):

         A          B       C       D
    ┌─────────────────────────────────┐
  1 │          销售数据报表            │
    ├──────────┬───────┬──────┬───────┤
  2 │  部门    │ 产品  │ 销量 │ 金额  │
    ├──────────┼───────┼──────┼───────┤
  3 │          │ 手机  │ 100  │ 50000 │
    │ 销售一部 ├───────┼──────┼───────┤
  4 │          │ 电脑  │ 50   │ 250000│
    │          ├───────┼──────┼───────┤
  5 │          │ 平板  │ 80   │ 120000│
    ├──────────┼───────┼──────┼───────┤
  6 │          │ 手机  │ 120  │ 60000 │
    │ 销售二部 ├───────┼──────┼───────┤
  7 │          │ 耳机  │ 200  │ 40000 │
    ├──────────┼───────┼──────┼───────┤
  8 │          │ 电脑  │ 30   │ 150000│
    │ 销售三部 ├───────┼──────┼───────┤
  9 │          │ 手表  │ 60   │ 180000│
    └──────────┴───────┴──────┴───────┘

这是 Excel 数据处理中非常常见的场景:表格中存在大量合并单元格

原始数据中:

  • • 标题行 A1:D1 合并,只有 A1 有值
  • • 部门列 A3:A5A6:A7A8:A9 分别合并,只有每组第一个单元格有值

这种结构便于阅读,但对数据分析来说是“灾难”——pandas 读取后会出现大量空值,无法正常分组、统计。

本期案例跟大家一起学习用 Python 自动填充合并单元格,让数据变得规整,为后续分析扫清障碍。

核心操作:识别合并区域 + 取消合并 + 批量填充

  • • 关键库openpyxl
  • • 核心逻辑:遍历所有合并区域,获取左上角的值,取消合并后将值填充到区域内的所有单元格

📜 完整代码

"""
合并单元格填充 - 自动识别并填充 Excel 中的所有合并单元格
使用 openpyxl 实现“取消合并 + 值填充”的自动化处理
"""

from
 openpyxl import load_workbook

def
 fill_merged_cells(input_path, output_path, sheet_name=0):
    """
    专门用于填充合并单元格并保存

    参数:
        input_path: 原始Excel文件路径
        output_path: 输出文件路径
        sheet_name: 工作表名称或索引(整数按索引获取,字符串按名称获取)
    """

    # 1. 加载工作簿(data_only=True 读取值而非公式)

    wb = load_workbook(input_path, data_only=True)

    # 2. 获取工作表

    if
 isinstance(sheet_name, int):
        ws = wb.worksheets[sheet_name]  # 按索引获取
    else
:
        ws = wb[sheet_name]              # 按名称获取

    # 3. 处理每个合并区域

    # 使用 list() 复制一份,因为边遍历边修改会报错

    for
 merged_range in list(ws.merged_cells.ranges):
        # 3.1 获取合并区域左上角的值

        top_value = ws.cell(row=merged_range.min_row, 
                           column=merged_range.min_col).value

        # 3.2 取消合并

        ws.unmerge_cells(str(merged_range))

        # 3.3 将值填充到原区域的每一个单元格

        for
 row in range(merged_range.min_row, merged_range.max_row + 1):
            for
 col in range(merged_range.min_col, merged_range.max_col + 1):
                ws.cell(row=row, column=col, value=top_value)

    # 4. 保存处理后的文件

    wb.save(output_path)
    wb.close()
    print
(f"处理完成!已保存到: {output_path}")

# 使用

if
 __name__ == "__main__":
    fill_merged_cells('测试数据.xlsx', '测试数据_处理后.xlsx')

运行结果(测试数据_处理后.xlsx):

A
B
C
D
销售数据报表
销售数据报表
销售数据报表
销售数据报表
部门
产品
销量
金额
销售一部
手机
100
50000
销售一部
电脑
50
250000
销售一部
平板
80
120000
销售二部
手机
120
60000
销售二部
耳机
200
40000
销售三部
电脑
30
150000
销售三部
手表
60
180000

💡 结果分析:所有合并单元格都被填充完整。原来只有左上角有值的 A1、A3、A6、A8,现在对应的 B1、C1、D1、A4、A5、A7、A9 也都有了相同的值。数据变得“规整”,可以正常进行 pandas 读取和后续分析了。


第一步:导入所需库

from openpyxl import load_workbook

代码解释:

  • • from openpyxl import load_workbook
    导入 openpyxl 库中的 load_workbook 函数。openpyxl 是 Python 操作 Excel 文件的核心库,能够读取、修改、保存 .xlsx 格式的文件。

为什么选择 openpyxl 而不是 pandas?

对比项
openpyxl
pandas
合并单元格处理
✅ 可以取消合并并填充
❌ 只能读取,无法修改
保留原有样式
✅ 保留字体、颜色等
❌ 不保留
数据读取
较慢
✅ 快速
适用场景
需要修改 Excel 结构
纯数据分析

对于本案例,我们需要“修改”Excel 文件本身(取消合并 + 填充值),因此 openpyxl 是最佳选择。

💡 小贴士:如果只需要读取数据而不修改原文件,可以先填充再读取,或者使用 pandas 的 fillna(method='ffill') 方法。


第二步:加载工作簿

wb = load_workbook(input_path, data_only=True)

代码解释:

  • • load_workbook(input_path)
    加载指定路径的 Excel 文件,返回一个 Workbook 对象。
  • • data_only=True
    这个参数非常关键!它决定了读取单元格时获取的是公式还是计算后的值

data_only 参数说明:

  • • data_only=True:读取单元格的计算结果
    • • 例如:=A1+B1 → 30
  • • data_only=False:读取单元格的公式本身
    • • 例如:=A1+B1 → '=A1+B1'

对于合并单元格填充,我们需要的是而不是公式,所以这里需要设置为 True

💡 小贴士:如果 data_only=True 读到的是 None,说明公式没有被计算过。这时需要先用 Excel 打开文件并保存,或者使用 openpyxl 的 wb.calculate() 强制计算。


第三步:获取工作表

if isinstance(sheet_name, int):
    ws = wb.worksheets[sheet_name]  # 按索引获取
else
:
    ws = wb[sheet_name]              # 按名称获取

代码解释:

  • • 为什么需要这个判断?
    因为用户可能用两种方式指定工作表:
    • • 传入数字 0 → 表示“第一个工作表”(索引从0开始)
    • • 传入字符串 'Sheet1' → 表示“名称为 Sheet1 的工作表”
  • • isinstance(sheet_name, int)
    检查 sheet_name 是否是整数类型。
  • • wb.worksheets[sheet_name]
    通过索引获取工作表。wb.worksheets 是所有工作表的列表,[0] 是第一个。
  • • wb[sheet_name]
    通过名称获取工作表。

为什么不直接写 ws = wb.active

方式
能获取第1个表
能获取第2个表
能按名称获取
灵活性
wb.active
wb.worksheets[索引]
wb['名称']
组合判断

wb.active 返回的是Excel打开时默认显示的那个工作表(通常是第一个,但不一定是),无法灵活选择。组合判断让函数更加通用。


第四步:遍历合并区域

for merged_range in list(ws.merged_cells.ranges):

代码解释:

  • • ws.merged_cells.ranges
    获取工作表中所有合并区域的对象集合。例如本例中有4个合并区域:A1:D1A3:A5A6:A7A8:A9
  • • list(ws.merged_cells.ranges)
    把合并区域集合转换成列表(复制一份),避免遍历时修改原集合导致报错。

为什么要把 ranges 转换成列表?

ws.merged_cells.ranges 返回的是一个集合对象。循环中执行 ws.unmerge_cells() 会修改这个集合(因为取消合并后,该区域就不在合并区域集合中了)。如果直接遍历原集合,边遍历边修改会报错:

# ❌ 错误写法
for
 merged_range in ws.merged_cells.ranges:
    ws.unmerge_cells(str(merged_range))  # 运行时会报错!

list() 的作用是:把原集合复制一份到新列表。遍历的是这个新列表(副本),修改的是原集合。这样既安全又清晰。

  • • merged_range
    每次循环拿到的合并区域对象,包含以下属性:
属性
含义
示例值
min_row
起始行号
1
max_row
结束行号
1
min_col
起始列号
1
max_col
结束列号
4

第五步:获取左上角的值

top_value = ws.cell(row=merged_range.min_row, column=merged_range.min_col).value

代码解释:

  • • merged_range.min_rowmerged_range.min_col
    合并区域左上角单元格的行号和列号。例如 A1:D1
    • • min_row = 1
    • • min_col = 1
  • • ws.cell(row=..., column=...).value
    获取指定单元格的值。cell() 方法中 row 和 column 参数都是从1开始的(和 Excel 的行列编号一致)。

为什么是左上角?
在合并单元格中,只有左上角的单元格有实际值,其他单元格都是空的。填充的目的就是把左上角的值“复制”到整个区域。

我们的数据表中,第1次循环(标题行):

merged_range = A1:D1
merged_range.min_row = 1
merged_range.min_col = 1
top_value = ws.cell(row=1, column=1).value  # 获取 A1 的值 = '销售数据报表'

第六步:取消合并

ws.unmerge_cells(str(merged_range))

代码解释:

  • • str(merged_range)
    将合并区域对象转换成字符串格式,例如 A1:D1
  • • ws.unmerge_cells('A1:D1')
    取消 A1 到 D1 的合并状态。取消后,原来的合并区域变成了4个独立的单元格。

为什么必须先取消合并?
在 openpyxl 中,合并区域内的非左上角单元格是 MergedCell 类型,其 value 属性是只读的。如果直接赋值会报错:

AttributeError: 'MergedCell' object attribute 'value' is read-only

必须先取消合并,将这些单元格变回普通的 Cell 对象,才能写入值。


第七步:填充值到所有单元格

for row in range(merged_range.min_row, merged_range.max_row + 1):
    for
 col in range(merged_range.min_col, merged_range.max_col + 1):
        ws.cell(row=row, column=col, value=top_value)

代码解释:

这是双重循环,外层遍历行,内层遍历列,覆盖整个合并区域。

以 A3:A5 为例:

merged_range.min_row = 3
merged_range.max_row = 5
merged_range.min_col = 1
merged_range.max_col = 1

# 外层循环:range(3, 6) → [3, 4, 5]

for
 row in [3, 4, 5]:
    # 内层循环:range(1, 2) → [1]

    for
 col in [1]:
        ws.cell(row=row, column=col, value='销售一部')

执行过程:

循环
row
col
操作
结果
第1次
3
1
ws.cell(3,1,'销售一部')
A3 = '销售一部'
第2次
4
1
ws.cell(4,1,'销售一部')
A4 = '销售一部'
第3次
5
1
ws.cell(5,1,'销售一部')
A5 = '销售一部'

以 A1:D1 为例(多列情况):

merged_range.min_row = 1
merged_range.max_row = 1
merged_range.min_col = 1
merged_range.max_col = 4

# 外层循环:range(1, 2) → [1]

for
 row in [1]:
    # 内层循环:range(1, 5) → [1, 2, 3, 4]

    for
 col in [1, 2, 3, 4]:
        ws.cell(row=1, column=col, value='销售数据报表')

执行过程:

循环
row
col
操作
结果
第1次
1
1
ws.cell(1,1,'销售数据报表')
A1 = '销售数据报表'
第2次
1
2
ws.cell(1,2,'销售数据报表')
B1 = '销售数据报表'
第3次
1
3
ws.cell(1,3,'销售数据报表')
C1 = '销售数据报表'
第4次
1
4
ws.cell(1,4,'销售数据报表')
D1 = '销售数据报表'

第八步:保存并关闭

wb.save(output_path)
wb.close()
print
(f"处理完成!已保存到: {output_path}")

代码解释:

  • • wb.save(output_path)
    将修改后的工作簿保存到指定路径。如果文件已存在,会覆盖。
  • • wb.close()
    关闭工作簿,释放资源。这是良好的编程习惯。
  • • print(...)
    输出完成提示,让用户知道处理结果。

完整流程可视化

处理前(原始数据):

A
B
C
D
1
销售数据报表
(空)
(空)
(空)
2
部门
产品
销量
金额
3
销售一部
手机
100
50000
4
(空)
电脑
50
250000
5
(空)
平板
80
120000
6
销售二部
手机
120
60000
7
(空)
耳机
200
40000
8
销售三部
电脑
30
150000
9
(空)
手表
60
180000

处理过程:

合并区域1: A1:D1 → 填充到 B1、C1、D1
合并区域2: A3:A5 → 填充到 A4、A5
合并区域3: A6:A7 → 填充到 A7
合并区域4: A8:A9 → 填充到 A9

处理后:

A
B
C
D
1
销售数据报表
销售数据报表
销售数据报表
销售数据报表
2
部门
产品
销量
金额
3
销售一部
手机
100
50000
4
销售一部
电脑
50
250000
5
销售一部
平板
80
120000
6
销售二部
手机
120
60000
7
销售二部
耳机
200
40000
8
销售三部
电脑
30
150000
9
销售三部
手表
60
180000

📚 本期核心知识点

📍 知识点 1:data_only=True 读取值而非公式

wb = load_workbook('文件.xlsx', data_only=True)
参数
获取内容
适用场景
data_only=True
单元格的计算结果
填充数据、导出分析
data_only=False
单元格的公式文本
调试公式、查看逻辑

📍 知识点 2:MergedCell 只读属性

在 openpyxl 中,合并区域内的非左上角单元格是 MergedCell 类型,其 value 属性只能读不能写

# ❌ 会报错
ws.cell(row=4, column=1).value = '销售一部'  # 如果A4还在合并区域内

# ✅ 正确做法:先取消合并,再赋值

ws.unmerge_cells('A3:A5')
ws.cell(row=4, column=1).value = '销售一部'

📍 知识点 3:边遍历边修改的陷阱

# ❌ 错误写法
for
 merged_range in ws.merged_cells.ranges:
    ws.unmerge_cells(str(merged_range))  # 修改了集合本身,遍历会出错

# ✅ 正确写法

for
 merged_range in list(ws.merged_cells.ranges):
    ws.unmerge_cells(str(merged_range))  # 遍历的是副本,安全

📍 知识点 4:工作表获取的两种方式

# 按索引获取(整数)
if
 isinstance(sheet_name, int):
    ws = wb.worksheets[sheet_name]

# 按名称获取(字符串)

else
:
    ws = wb[sheet_name]

📍 知识点 5:合并区域对象的常用属性

merged_range.min_row   # 起始行号
merged_range.max_row   # 结束行号
merged_range.min_col   # 起始列号
merged_range.max_col   # 结束列号
str
(merged_range)      # 转为Excel坐标字符串,如 'A1:D1'

🔄 本案例核心流程

① 加载工作簿 → ② 获取工作表 → ③ 遍历合并区域 → ④ 获取左上角值 → ⑤ 取消合并 → ⑥ 填充所有单元格 → ⑦ 保存文件

加载 Excel (load_workbook)
        ↓
获取工作表 (按索引或名称)
        ↓
遍历所有合并区域 (list(ws.merged_cells.ranges))
        ↓
┌─────────────────────────────────────────────┐
│ 对于每个合并区域:                           │
│   1. 获取左上角单元格的值                    │
│   2. 取消合并 (unmerge_cells)               │
│   3. 双重循环覆盖行列                       │
│   4. 将值写入区域内每一个单元格             │
└─────────────────────────────────────────────┘
        ↓
保存到新文件 (wb.save)
        ↓
输出“处理完成”

🗳️ 点单时间到! 🗳️

下期写什么?
你来定,我来写。

评论区见!👇


📦 资源获取提示

关注「码农自习室」,后台回复关键词 PythonExcel案例,即可获取本文完整代码及配套练习数据集,一起动手掌握高效数据操作的核心技巧!


❤️ 支持我们

如果本文对你有帮助,欢迎点赞 + 关注 + 点亮小红心,你的支持就是我们持续创作的最大动力~

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-04 00:13:38 HTTP/2.0 GET : https://f.mffb.com.cn/a/490529.html
  2. 运行时间 : 0.142739s [ 吞吐率:7.01req/s ] 内存消耗:4,611.43kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=4064d01c6e45b2629676616ac39712b6
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000597s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000794s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000342s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000372s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000781s ]
  6. SELECT * FROM `set` [ RunTime:0.000279s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000885s ]
  8. SELECT * FROM `article` WHERE `id` = 490529 LIMIT 1 [ RunTime:0.000669s ]
  9. UPDATE `article` SET `lasttime` = 1783095218 WHERE `id` = 490529 [ RunTime:0.037302s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000421s ]
  11. SELECT * FROM `article` WHERE `id` < 490529 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000586s ]
  12. SELECT * FROM `article` WHERE `id` > 490529 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000445s ]
  13. SELECT * FROM `article` WHERE `id` < 490529 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001236s ]
  14. SELECT * FROM `article` WHERE `id` < 490529 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.001954s ]
  15. SELECT * FROM `article` WHERE `id` < 490529 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.001031s ]
0.144323s