当前位置:首页>python>第168讲:批量生成会议邀请函:Python与VBA实战大比拼

第168讲:批量生成会议邀请函:Python与VBA实战大比拼

  • 2026-02-06 23:22:47
第168讲:批量生成会议邀请函:Python与VBA实战大比拼

在日常办公中,我们经常需要批量生成个性化文档。本文将详细介绍如何通过Python和VBA两种技术方案,实现根据Excel数据批量生成Word邀请函的高效工作流。

一、业务场景与痛点分析

在日常办公中,我们经常需要处理大批量个性化文档生成任务。比如向数百位客户发送邀请函,每份邀请函需要包含客户的姓名、公司、职务等个性化信息。

传统手工操作的痛点十分明显:耗时耗力,处理100份邀请函可能需要数小时容易出错,手动复制粘贴难免会出现张冠李戴的情况;格式不统一,难以保证每份文档的专业性和一致性

二、Python方案:python-docx库实战

Python的python-docx库为Word文档操作提供了强大而灵活的解决方案,特别适合批量生成自动化处理场景。

2.1 环境配置与基础准备

安装必要的Python库

pip install python-docx pandas openpyxl

基础文档操作

from docx import Documentfrom docx.shared import Inches, Ptfrom docx.enum.text import WD_ALIGN_PARAGRAPHimport pandas as pdclass InvitationGenerator:    """邀请函生成器"""    def __init__(self, template_path=None):        self.template_path = template_path        self.setup_logging()    def create_basic_invitation(self):        """创建基础邀请函"""        # 创建新文档        doc = Document()        # 添加标题        title = doc.add_heading('会议邀请函'0)        title.alignment = WD_ALIGN_PARAGRAPH.CENTER        # 添加正文段落        content = [            "尊敬的:",            "诚挚邀请您参加我们举办的年度技术交流会。",            "时间:2026年2月6日",            "地点:北京国际会议中心",            "期待您的光临!"        ]        for text in content:            paragraph = doc.add_paragraph(text)            # 设置段落格式            paragraph.paragraph_format.space_after = Pt(12)        return doc

2.2 完整的批量生成实现

智能邀请函生成系统

class BatchInvitationSystem(InvitationGenerator):    """批量邀请函生成系统"""    def __init__(self, template_path=None, config=None):        super().__init__(template_path)        self.config = config or self.default_config()    def default_config(self):        """默认配置"""        return {            'font_name''微软雅黑',            'title_size'16,            'content_size'12,            'output_dir''输出结果'        }    def load_guest_data(self, excel_path):        """加载客户数据"""        try:            df = pd.read_excel(excel_path)            required_columns = ['姓名''公司''职务''邮箱']            # 验证数据列完整性            for col in required_columns:                if col not in df.columns:                    raise ValueError(f"缺少必要列: {col}")            print(f"成功加载 {len(df)} 条客户数据")            return df        except Exception as e:            print(f"数据加载失败: {str(e)}")            return None    def generate_single_invitation(self, guest_info, output_path):        """生成单个邀请函"""        try:            # 使用模板或创建新文档            if self.template_path:                doc = Document(self.template_path)            else:                doc = Document()            # 替换占位符            self.replace_placeholders(doc, guest_info)            # 保存文档            doc.save(output_path)            return True        except Exception as e:            print(f"生成邀请函失败: {str(e)}")            return False    def replace_placeholders(self, doc, guest_info):        """替换文档中的占位符"""        # 定义占位符映射        placeholders = {            '{{姓名}}': guest_info['姓名'],            '{{公司}}': guest_info['公司'],            '{{职务}}': guest_info['职务'],            '{{邮箱}}': guest_info['邮箱']        }        # 遍历所有段落进行替换        for paragraph in doc.paragraphs:            for key, value in placeholders.items():                if key in paragraph.text:                    paragraph.text = paragraph.text.replace(key, str(value))        # 处理表格中的占位符        for table in doc.tables:            for row in table.rows:                for cell in row.cells:                    for key, value in placeholders.items():                        if key in cell.text:                            cell.text = cell.text.replace(key, str(value))

2.3 高级功能与批量处理

企业级批量处理解决方案

def generate_batch_invitations(self, excel_path, output_dir):    """批量生成邀请函"""    import os    from pathlib import Path    # 创建输出目录    Path(output_dir).mkdir(exist_ok=True)    # 加载客户数据    guest_data = self.load_guest_data(excel_path)    if guest_data is None:        return False    success_count = 0    failed_count = 0    # 批量处理每个客户    for index, guest in guest_data.iterrows():        try:            # 生成输出文件名            filename = f"邀请函_{guest['姓名']}_{guest['公司']}.docx"            output_path = os.path.join(output_dir, filename)            # 生成单个邀请函            if self.generate_single_invitation(guest, output_path):                success_count += 1                print(f"成功生成: {filename}")            else:                failed_count += 1        except Exception as e:            print(f"处理客户 {guest['姓名']} 时出错: {str(e)}")            failed_count += 1    # 生成处理报告    self.generate_summary_report(success_count, failed_count, output_dir)    return Truedef generate_summary_report(self, success, failed, output_dir):    """生成处理总结报告"""    report_content = f"""    批量生成完成!    统计信息:    - 成功生成:{success} 个文件    - 生成失败:{failed} 个文件    - 总处理数:{success + failed} 个文件    - 成功率:{success/(success+failed)*100:.2f}%    生成时间:{pd.Timestamp.now()}    输出目录:{output_dir}    """    # 保存报告    report_path = os.path.join(output_dir, '生成报告.txt')    with open(report_path, 'w', encoding='utf-8'as f:        f.write(report_content)    print(report_content)

三、VBA方案:Word自动化实战

对于深度依赖Office环境的用户,VBA提供了原生集成的解决方案。

3.1 基础VBA邮件合并

VBA批量生成邀请函模块

Sub BatchGenerateInvitations()    Dim excelApp As Object    Dim excelWorkbook As Object    Dim excelWorksheet As Object    Dim wordApp As Object    Dim wordDoc As Object    Dim lastRow As Long    Dim i As Long    ' 错误处理    On Error GoTo ErrorHandler    ' 创建Excel应用对象    Set excelApp = CreateObject("Excel.Application")    excelApp.Visible = False    ' 打开Excel数据文件    Set excelWorkbook = excelApp.Workbooks.Open("C:\客户数据\客户名单.xlsx")    Set excelWorksheet = excelWorkbook.Sheets(1)    ' 创建Word应用对象    Set wordApp = CreateObject("Word.Application")    wordApp.Visible = True ' 设置为True可查看生成过程    ' 获取数据行数    lastRow = excelWorksheet.Cells(excelWorksheet.Rows.Count, 1).End(-4162).Row    ' 循环处理每个客户    For i = 2 To lastRow ' 从第2行开始(跳过标题行)        Dim customerName As String        Dim companyName As String        Dim position As String        Dim email As String        ' 读取客户数据        customerName = excelWorksheet.Cells(i, 1).Value ' 姓名列        companyName = excelWorksheet.Cells(i, 2).Value ' 公司列        position = excelWorksheet.Cells(i, 3).Value    ' 职务列        email = excelWorksheet.Cells(i, 4).Value       ' 邮箱列        ' 生成单个邀请函        If GenerateSingleInvitation(wordApp, customerName, companyName, position, email) Then            Debug.Print "成功生成邀请函: " & customerName        Else            Debug.Print "生成失败: " & customerName        End If    Next i    ' 清理资源    excelWorkbook.Close    excelApp.Quit    wordApp.Quit    MsgBox "批量生成完成!共处理 " & (lastRow - 1) & " 个客户。", vbInformation    Exit SubErrorHandler:    MsgBox "错误号: " & Err.Number & vbCrLf & "错误描述: " & Err.Description, vbCriticalEnd Sub

3.2 高级VBA模板处理

增强的VBA邀请函生成函数

Function GenerateSingleInvitation(wordApp As Object, customerName As String, companyName As String, position As String, email As String) As Boolean    On Error GoTo ErrorHandler    Dim wordDoc As Object    Dim templatePath As String    Dim savePath As String    Dim outputDir As String    ' 设置路径    templatePath = "C:\模板\邀请函模板.docx"    outputDir = "C:\输出结果\"    ' 检查模板是否存在    If Dir(templatePath) = "" Then        MsgBox "模板文件不存在: " & templatePath, vbExclamation        GenerateSingleInvitation = False        Exit Function    End If    ' 创建输出目录    If Dir(outputDir, vbDirectory) = "" Then        MkDir outputDir    End If    ' 打开模板文档    Set wordDoc = wordApp.Documents.Open(templatePath)    ' 执行文本替换    Call ReplacePlaceholders(wordDoc, customerName, companyName, position, email)    ' 生成保存路径    savePath = outputDir & "邀请函_" & customerName & "_" & companyName & ".docx"    ' 保存文档    wordDoc.SaveAs savePath    wordDoc.Close    GenerateSingleInvitation = True    Exit FunctionErrorHandler:    GenerateSingleInvitation = False    MsgBox "生成邀请函时出错: " & Err.Description, vbCriticalEnd FunctionSub ReplacePlaceholders(wordDoc As Object, customerName As String, companyName As String, position As String, email As String)    ' 定义占位符映射    Dim placeholders As Object    Set placeholders = CreateObject("Scripting.Dictionary")    placeholders.Add "{{姓名}}", customerName    placeholders.Add "{{公司}}", companyName    placeholders.Add "{{职务}}", position    placeholders.Add "{{邮箱}}", email    ' 遍历所有内容进行替换    Dim key As Variant    For Each key In placeholders.Keys        With wordDoc.Content.Find            .Text = key            .Replacement.Text = placeholders(key)            .Execute Replace:=2 ' wdReplaceAll        End With    Next keyEnd Sub

四、方案对比与选择指南

4.1 技术特性全面对比

特性维度

Python方案

VBA方案

优势分析

跨平台性

⭐⭐⭐⭐⭐(全平台支持)

⭐(仅Windows)

Python具有明显优势

处理能力

⭐⭐⭐⭐(强大)

⭐⭐⭐(中等)

Python更适合复杂处理

学习曲线

⭐⭐⭐(中等难度)

⭐⭐⭐⭐(相对简单)

VBA上手更快

集成度

⭐⭐⭐(外部调用)

⭐⭐⭐⭐⭐(原生集成)

VBA与Office无缝集成

扩展性

⭐⭐⭐⭐⭐(无限扩展)

⭐⭐(有限扩展)

Python可扩展性更强

维护成本

⭐⭐⭐⭐(较低)

⭐⭐(较高)

Python更易维护

4.2 实际应用场景选择指南

选择Python方案当

  • 跨平台需求:需要在Windows、macOS、Linux等系统上运行

  • 复杂数据处理:需要数据清洗、转换等复杂逻辑

  • 系统集成:需要与其他系统进行深度集成

  • 大规模处理:需要处理成千上万个文档

选择VBA方案当

  • Office环境稳定:主要在Windows Office环境中使用

  • 快速部署需求:需要立即投入使用的解决方案

  • 简单需求基础文档生成无需复杂逻辑

  • 非技术用户:团队成员熟悉Office但不熟悉编程

五、实战案例:企业级邀请函批量生成系统

5.1 业务背景与挑战

某大型企业需要每月向5000+客户发送个性化邀请函,传统手工方式面临巨大挑战:人力成本高出错率高效率低下

5.2 基于Python的完整解决方案

企业级邀请函生成平台

class EnterpriseInvitationSystem(BatchInvitationSystem):    """企业级邀请函生成系统"""    def __init__(self, config_path='config.json'):        self.config = self.load_config(config_path)        super().__init__(self.config.get('template_path'), self.config)        self.setup_enterprise_features()    def load_config(self, config_path):        """加载企业级配置"""        import json        try:            with open(config_path, 'r', encoding='utf-8'as f:                return json.load(f)        except FileNotFoundError:            return self.default_enterprise_config()    def default_enterprise_config(self):        """默认企业配置"""        return {            'template_path''templates/enterprise_template.docx',            'output_dir''output/invitations',            'backup_enabled'True,            'quality_check'True,            'email_integration'False        }    def enterprise_batch_processing(self, excel_path):        """企业级批量处理"""        try:            # 数据验证            if not self.validate_data(excel_path):                return False            # 执行批量生成            success = self.generate_batch_invitations(excel_path, self.config['output_dir'])            # 质量检查            if success and self.config['quality_check']:                self.quality_check()            # 备份处理结果            if success and self.config['backup_enabled']:                self.create_backup()            return success        except Exception as e:            self.logger.error(f"企业级处理失败: {str(e)}")            return False

测试题

  1. 在Python的python-docx库中,如何处理文档中的表格内的占位符替换?与普通段落替换有何不同?

  2. VBA方案中,如何优化大批量文档生成时的内存管理,避免出现资源泄漏?

  3. 当需要根据客户等级(如VIP、普通客户)生成不同模板的邀请函时,两种方案各应该如何实现?

  4. 在Python方案中,如果需要实现生成进度实时展示和用户交互界面,有哪些可行的技术方案?

  5. 请设计一个混合架构,利用Python进行数据处理和模板管理,通过VBA进行最终的文档格式微调,并说明数据交换机制。


答案

  1. 表格占位符处理:需要遍历所有表格单元格,对每个单元格的文本内容进行替换。与段落替换不同的是,表格具有层级结构,需要先获取表格对象,然后遍历行和列。Python-docx中使用doc.tables获取所有表格,再通过嵌套循环处理每个单元格。

  2. VBA内存优化及时释放对象变量(Set obj = Nothing),减少同时打开的文档数量,使用With语句减少对象引用,错误处理中确保资源释放。对于大批量处理,可以分批次进行,每处理一定数量后保存并关闭文档。

  3. 多模板实现方案Python可通过条件判断选择不同模板文件,在配置文件中定义模板映射规则。VBA可使用Select Case语句根据客户等级字段选择对应的模板路径,实现差异化生成。

  4. Python交互界面方案:可使用tkinter库创建简单GUI,tqdm库显示进度条,logging库记录生成日志。对于Web应用,可使用Flask或Dash框架创建Web界面。

  5. 混合架构设计Python负责数据清洗、模板管理和批量生成,VBA负责打开文档进行精细格式调整。通过中间文件(如JSON配置文件)传递控制参数,使用COM接口实现Python调用Word VBA功能。


希望这篇详细的批量邀请函生成指南能帮助您提升工作效率!如果觉得本文有帮助,请点赞、收藏、转发支持一下!

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-07 09:04:21 HTTP/2.0 GET : https://f.mffb.com.cn/a/474042.html
  2. 运行时间 : 0.113345s [ 吞吐率:8.82req/s ] 内存消耗:4,356.88kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=97b18414bcf2da21476d05a326bad521
  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.000600s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000637s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000311s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000273s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000505s ]
  6. SELECT * FROM `set` [ RunTime:0.000220s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000607s ]
  8. SELECT * FROM `article` WHERE `id` = 474042 LIMIT 1 [ RunTime:0.012565s ]
  9. UPDATE `article` SET `lasttime` = 1770426261 WHERE `id` = 474042 [ RunTime:0.000638s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000276s ]
  11. SELECT * FROM `article` WHERE `id` < 474042 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.003163s ]
  12. SELECT * FROM `article` WHERE `id` > 474042 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000784s ]
  13. SELECT * FROM `article` WHERE `id` < 474042 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.011397s ]
  14. SELECT * FROM `article` WHERE `id` < 474042 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.007619s ]
  15. SELECT * FROM `article` WHERE `id` < 474042 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.003596s ]
0.114981s