当前位置:首页>python>第323讲:Python vs VBA 实战拆解:批量合并多个Excel工作簿

第323讲:Python vs VBA 实战拆解:批量合并多个Excel工作簿

  • 2026-08-18 23:10:43
第323讲:Python vs VBA 实战拆解:批量合并多个Excel工作簿

场景:产品运营每周把20+城市日报合成一张总表,Python vs VBA 实战拆解

做产品运营的朋友大概率都遇到过这类“体力活”:

每周一早上,20多个城市团队准时把上周的日报发到群里,文件名从「北京0721.xlsx」「上海0721.xlsx」一直到「乌鲁木齐_0721.xlsx」。你需要把这些表里的数据全部汇总到一张总表里,再发给总监——这事儿说简单也简单,说麻烦是真麻烦:手动打开复制粘贴半小时起步,稍不留神漏了一个城市,还得从头核对;要是哪天某份日报里多了两列“备注”,粘贴的时候直接错位,排查错误又得耗掉大半天。

今天我们就针对这个高频场景,用PythonVBA两种方案实现批量合并,重点对比“DataFrame纵向拼接”和“Range拷贝”的核心差异,顺便把两种方法的坑点、优化技巧一次性讲透。


一、先明确需求:我们的合并规则是什么?

动手前先把需求对齐,避免“写出来才发现不对”:

我们要合并的是同一目录下的所有Excel工作簿(假设都是.xlsx格式),每个工作簿里只有第一个工作表需要合并(比如都叫“日报数据”),且所有表的列结构完全一致(比如都有“日期”“城市”“活跃用户数”“新增订单数”“客单价”这几列)。

如果实际场景中遇到列不一致的情况(比如有的表多了“异常说明”列),两种方法的处理逻辑会有区别——后面我们会专门讲兼容方案。

二、Python方案:pandas.concat() + glob 批量读取

Python处理这类问题的核心优势是:逻辑直观、容错性强、可复用性高。哪怕你下周要合并50个城市的表,代码几乎不用改。

1. 准备工作:安装依赖库

首先确保你装了pandas(数据处理核心库)和openpyxl(读取xlsx文件的引擎)。没装的话,在命令行运行:

pip install pandas openpyxl

2. 核心逻辑拆解

Python的思路分三步:

① 用glob模块批量获取目标文件夹里所有Excel文件的路径;

② 循环读取每个Excel文件,把数据存到“DataFrame列表”里;

③ 用pd.concat()把所有DataFrame纵向拼接成一个总表,最后导出为新的Excel。

这里的关键是DataFrame纵向拼接——你可以把每个DataFrame想象成一张“纸”,pd.concat()就是把这些纸按顺序叠在一起,只要列名对齐,就会自动匹配;如果列名不匹配,也会明确提示(比如某张表少了“客单价”列,会填充NaN,不会悄悄错位)。

3. 完整代码实现(含注释+异常处理)

下面是一份可直接用的代码,我加了详细的注释,新手也能看懂:

import pandas as pdimport globimport osdef merge_excel_with_python(folder_path, output_path):    """    批量合并Excel工作簿的函数    :param folder_path: 存放所有日报的文件夹路径(比如r"C:\周报\0721")    :param output_path: 合并后总表的保存路径(比如r"C:\周报\全国日报_0721.xlsx")    """    # 第一步:用glob获取文件夹下所有xlsx文件路径(*是通配符,匹配任意字符)    excel_files = glob.glob(os.path.join(folder_path, "*.xlsx"))    # 容错:如果文件夹里没有Excel文件,直接报错提示    if not excel_files:        raise ValueError(f"在{folder_path}中未找到任何.xlsx文件,请检查路径是否正确")    # 第二步:循环读取每个Excel,存到dataframes列表里    dataframes = []    for file in excel_files:        try:            # 读取Excel的第一个工作表(sheet_name=0表示第一个sheet)            df = pd.read_excel(file, sheet_name=0, engine="openpyxl")            # (可选)给每个df加一列“来源文件”,方便追溯数据来自哪个城市(比如“北京_0721.xlsx”)            df["来源文件"] = os.path.basename(file)            dataframes.append(df)            print(f"成功读取:{os.path.basename(file)},共{len(df)}行数据")        except Exception as e:            print(f"读取{file}失败,错误原因:{e}")            continue  # 跳过错误的文件,不影响其他文件合并    # 第三步:纵向拼接所有DataFrame(axis=0表示按行拼接)    # ignore_index=True:重置索引,避免原表的索引(比如1、2、3)重复叠加    merged_df = pd.concat(dataframes, axis=0, ignore_index=True)    # 第四步:导出为总表    merged_df.to_excel(output_path, index=False, engine="openpyxl")    print(f"\n合并完成!总表保存至:{output_path}")    print(f"共合并{len(excel_files)}个文件,总数据量:{len(merged_df)}行")# ------------------- 调用函数示例 -------------------if __name__ == "__main__":    # 替换为你的实际路径(注意Windows路径前要加r,避免转义字符问题)    folder_path = r"C:\产品运营\周报\0721城市日报"    output_path = r"C:\产品运营\周报\全国日报_0721.xlsx"    merge_excel_with_python(folder_path, output_path)

4. Python方案的进阶优化(干货预警)

上面的代码已经能满足基础需求,但实际工作中你可能会遇到这些“特殊情况”,对应的优化技巧记下来:

(1)列结构不一致怎么办?

比如有的城市日报多了“异常说明”列,有的少了“客单价”列。这时候可以在pd.concat()里加join="outer"(默认参数,保留所有列,缺失值填NaN),或者join="inner"(只保留所有表共有的列)。

示例:只保留所有表都有的列

merged_df = pd.concat(dataframes, axis=0, ignore_index=True, join="inner")

(2)需要合并指定sheet怎么办?

比如有的表第二个sheet才是“日报数据”,可以把sheet_name=0改成sheet_name="日报数据"(按名称匹配),或者sheet_name=1(按索引匹配,第二个sheet)。

(3)文件太大,内存不够怎么办?

如果单个Excel有10万行以上,用pd.read_excel()可能占内存。可以用chunksize分块读取,或者用dask.dataframe(类似pandas的分布式版本)处理:

import dask.dataframe as dddf = dd.read_excel(file, sheet_name=0, engine="openpyxl")

(4)自动跳过空表

如果某个Excel里没有数据(比如城市团队忘了填),可以在读取后判断

df.emptyif not df.empty:    dataframes.append(df)else:    print(f"{os.path.basename(file)}为空表,已跳过")

三、VBA方案:Workbooks.Open + Copy 循环遍历文件夹

VBA的优势是无需额外安装环境(Excel自带),适合公司电脑限制安装Python的场景。但它的核心是Range拷贝,逻辑比Python更“底层”,需要注意的细节更多。

1. 准备工作:启用“开发工具”选项卡

如果你的Excel顶部没有“开发工具”,先点击【文件】→【选项】→【自定义功能区】→勾选“开发工具”,确定后即可看到。

2. 核心逻辑拆解

VBA的思路分四步:

① 用Dir函数遍历文件夹里的所有Excel文件;

② 用Workbooks.Open打开每个文件,选中需要合并的工作表;

③ 复制该工作表的数据区域(Range.Copy),粘贴到总表的下一行空白位置;

④ 关闭打开的文件,循环直到所有文件处理完毕。

这里的Range拷贝本质是“复制单元格内容”——就像你手动选中A1:D100,按Ctrl+C,再切到总表按Ctrl+V。但VBA需要精确指定“粘贴位置的起始行”,否则会覆盖之前的数据。

3. 完整代码实现(含注释+错误处理)

按下Alt+F11打开VBA编辑器,插入【模块】,粘贴以下代码:

Sub MergeExcelWithVBA()    Dim folderPath As String    Dim fileName As String    Dim srcWorkbook As Workbook    Dim destWorkbook As Workbook    Dim srcSheet As Worksheet    Dim destSheet As Worksheet    Dim lastRow As Long    Dim copyRange As Range    '------------------- 参数设置(根据你的实际路径修改) -------------------    folderPath = "C:\产品运营\周报\0721城市日报\"  ' 文件夹路径(末尾要加\)    Set destWorkbook = ThisWorkbook  ' 当前工作簿作为总表(也可以新建一个工作簿)    Set destSheet = destWorkbook.Sheets("总表")  ' 总表的工作表名称(如果没有,先新建一个名为“总表”的sheet)    ' 关闭屏幕更新(加快运行速度,避免闪烁)    Application.ScreenUpdating = False    ' 关闭警告提示(比如“是否覆盖文件”,这里不需要)    Application.DisplayAlerts = False    ' 获取文件夹下第一个xlsx文件名    fileName = Dir(folderPath & "*.xlsx")    ' 循环遍历所有Excel文件    Do While fileName <> ""        ' 打开源文件(只读模式,避免修改原文件)        Set srcWorkbook = Workbooks.Open(folderPath & fileName, ReadOnly:=True)        ' 假设源文件的第一个工作表是需要合并的(比如“日报数据”)        Set srcSheet = srcWorkbook.Sheets(1)        ' 找到源文件中数据的最后一行(从A列往上数,非空行的行号)        lastRowSrc = srcSheet.Cells(srcSheet.Rows.Count, "A").End(xlUp).Row        ' 定义需要复制的区域(假设数据从A1开始,到D列结束,根据实际列数调整)        Set copyRange = srcSheet.Range("A1:D" & lastRowSrc)        ' 找到总表的下一行空白行(从第1列往下数,第一个空行的行号)        lastRowDest = destSheet.Cells(destSheet.Rows.Count, "A").End(xlUp).Row + 1        ' 复制源数据到总表(如果总表第一行是表头,第一次粘贴时要保留表头,之后跳过表头)        If lastRowDest = 2 Then  ' 总表只有表头时,从第二行开始粘贴(包含表头)            copyRange.Copy Destination:=destSheet.Range("A" & lastRowDest - 1)        Else  ' 已经有数据时,跳过表头,从第二行开始复制            srcSheet.Range("A2:D" & lastRowSrc).Copy Destination:=destSheet.Range("A" & lastRowDest)        End If        ' 关闭源文件,不保存(因为只读打开,无需保存)        srcWorkbook.Close SaveChanges:=False        Debug.Print "成功合并:" & fileName  ' 在立即窗口输出日志(按Ctrl+G查看)        ' 获取下一个文件名        fileName = Dir    Loop    ' 恢复屏幕更新和警告提示    Application.ScreenUpdating = True    Application.DisplayAlerts = True    MsgBox "合并完成!共合并" & (lastRowDest - 1& "行数据", vbInformationEnd Sub

4. VBA方案的避坑指南(全是实战经验)

VBA的坑比Python多,这些细节一定要注意:

(1)路径末尾必须加``

folderPath = "C:\产品运营\周报\0721城市日报\"——如果少了最后的\`,Dir函数会找不到文件(比如变成C:\产品运营\周报\0721城市日报*.xlsx`,路径错误)。

(2)表头处理的“隐形坑”

如果总表已经有表头,第一次粘贴时要包含源表的表头吗?上面的代码里用lastRowDest = 2判断:如果总表只有表头(第1行),就从第1行粘贴(包含源表表头);否则从第2行开始粘贴(跳过源表表头)。如果所有源表的表头都在第1行,这个逻辑没问题;但如果有的源表表头在第2行,就需要调整判断条件。

(3)数据区域的动态识别

代码里用Range("A1:D" & lastRowSrc)固定了列范围(A到D列),如果实际列数超过D列(比如到了F列),就会漏数据。更好的方法是动态获取最后一列:

lastCol = srcSheet.Cells(1, srcSheet.Columns.Count).End(xlToLeft).ColumnSet copyRange = srcSheet.Range(srcSheet.Cells(11), srcSheet.Cells(lastRowSrc, lastCol))

(4)避免“死循环”

Dir函数在遍历文件时,如果中途出错(比如文件被占用),可能会导致fileName一直不为空,陷入死循环。可以在循环里加计数器,限制最大循环次数:

Dim count As Integercount = 0Do While fileName <> "" And count < 100  ' 最多合并100个文件    count = count + 1    ' ... 原有代码 ...Loop

四、核心对照:Python DataFrame纵向拼接 vs VBA Range拷贝

这是本文的重点——为什么Python更适合数据处理?通过对比两种方式的底层逻辑,你会更清楚什么时候该用Python,什么时候用VBA。

对比维度

Python:DataFrame纵向拼接

VBA:Range拷贝

逻辑本质

基于“数据结构”的操作:把每个表抽象为DataFrame,按列名对齐拼接,像“叠放纸张”。

基于“单元格”的操作:模拟手动复制粘贴,像“搬运格子”。

列对齐方式

自动按列名匹配,列名一致才拼接;列名不一致时,要么填充NaN(保留所有列),要么只保留共有列(join参数控制)。

按“位置”对齐(比如A列粘A列,B列粘B列),如果源表列顺序变了(比如“城市”在A列,另一个表在B列),会直接错位,且不报错。

空值处理

自动识别空行/空值,可通过dropna()灵活删除或填充(比如用0填充缺失的“客单价”)。

复制时会把空单元格原样粘贴,需要手动写代码判断(比如If cell.Value = "" Then...),逻辑复杂。

性能表现

处理10万行以内数据很快;百万行级数据可通过分块读取或dask优化。

数据量超过1万行时,复制粘贴会明显卡顿(因为要实时刷新屏幕,即使关了ScreenUpdating也会有延迟)。

容错性

代码报错时会明确提示原因(比如“列名不匹配”“文件不存在”),方便调试。

容易因路径错误、文件被占用、单元格锁定等问题崩溃,且错误信息较模糊(比如“运行时错误1004”)。

适用场景

数据清洗、复杂分析、自动化报表(需要定期重复执行的任务)。

简单合并、临时处理、无法安装Python的环境(比如公司电脑限制)。

一句话总结:如果是“一次性的小任务”(比如合并5个表,每个100行),VBA够用;如果是“每周都要做的常规任务”(比如20个城市,每个1000行),或者需要后续做数据分析(比如算各城市平均客单价),Python效率更高,且不容易出错。

五、如何选择?给你一个决策树

下次遇到合并Excel的需求,按这个流程选:

  1. 能不能装Python?(能→选Python;不能→选VBA)

  2. 数据量超过1万行?(是→选Python;否→继续)

  3. 需要后续分析吗?(是→选Python;否→继续)

  4. 列结构可能不一致吗?(是→选Python;否→VBA也能凑合)


六、练习题(答案在文末)

  1. Python中用pd.concat()合并DataFrame时,ignore_index=True的作用是?(单选)

    A. 忽略索引,不合并索引列

    B. 重置索引,避免原表索引重复

    C. 忽略列名,按位置拼接

    D. 忽略空值,不合并空行

  2. VBA中Dir(folderPath & "*.xlsx")的作用是?(单选)

    A. 打开指定路径下的第一个xlsx文件

    B. 返回指定路径下所有xlsx文件的名称

    C. 返回指定路径下第一个xlsx文件的名称

    D. 删除指定路径下的所有xlsx文件

  3. 以下哪种情况更适合用Python而非VBA合并Excel?(多选)

    A. 20个城市日报,每个表有15列,其中3个城市的表多了“异常说明”列

    B. 5个部门的月度报表,每个表只有200行,列结构完全一致

    C. 需要合并后计算每个城市的“周环比增长率”,并生成可视化图表

    D. 公司电脑禁止安装任何第三方软件

  4. VBA中Application.ScreenUpdating = False的主要作用是?(单选)

    A. 关闭Excel的警告提示框

    B. 加快代码运行速度,避免屏幕闪烁

    C. 禁止用户修改工作表内容

    D. 自动保存合并后的文件

  5. Python中读取Excel时,engine="openpyxl"的作用是?(单选)

    A. 指定读取xls格式的文件

    B. 指定读取xlsx格式的引擎(支持新版Excel)

    C. 加速读取大文件

    D. 忽略Excel中的公式,只读取数值


答案

  1. B

  2. C

  3. AC

  4. B

  5. B


写在最后:合并Excel只是数据处理的入门操作,但把基础打牢,后续学数据清洗、分析、可视化都会更轻松。如果你在实操中遇到问题(比如Python代码报错、VBA运行异常),欢迎在评论区留言,我会挑典型问题在下一篇讲解答~

觉得有用的话,别忘了点赞+在看,转发给你的运营小伙伴~



最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-08-21 13:36:38 HTTP/2.0 GET : https://f.mffb.com.cn/a/505544.html
  2. 运行时间 : 0.151315s [ 吞吐率:6.61req/s ] 内存消耗:4,483.37kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=9b3e31bf15ac192d12da8162d827ba4c
  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.000565s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000709s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.016764s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.006836s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000631s ]
  6. SELECT * FROM `set` [ RunTime:0.003282s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000569s ]
  8. SELECT * FROM `article` WHERE `id` = 505544 LIMIT 1 [ RunTime:0.000539s ]
  9. UPDATE `article` SET `lasttime` = 1787290598 WHERE `id` = 505544 [ RunTime:0.031438s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000364s ]
  11. SELECT * FROM `article` WHERE `id` < 505544 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000527s ]
  12. SELECT * FROM `article` WHERE `id` > 505544 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000533s ]
  13. SELECT * FROM `article` WHERE `id` < 505544 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.000761s ]
  14. SELECT * FROM `article` WHERE `id` < 505544 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.009140s ]
  15. SELECT * FROM `article` WHERE `id` < 505544 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.000633s ]
0.152963s