当前位置:首页>Excel>《还在手动加密解密Excel?Python批量加密解密工具来了!》

《还在手动加密解密Excel?Python批量加密解密工具来了!》

  • 2026-05-31 11:53:17
《还在手动加密解密Excel?Python批量加密解密工具来了!》

“带你横跨办公自动化的数据江海”

@摸鱼

前言

关于摸鱼

ABOUT MOYU

闻道有先后,术业有专攻。

各位大佬朋友们好!

~我依旧是你们的老朋友摸鱼~

在职场摸爬滚打的这十多年里,我用Python悄悄干了不少“正事”——不知不觉攒下了一整套办公自动化的实用项目技巧。去年10月初创立了公众号 「码海听潮」 ,初衷很简单:把重复的劳动交给代码,把摸鱼的时间留给生活。

目前已经吭哧吭哧更新了100多篇原创文章,每一篇都是实操干货,不讲虚的,只聊怎么用代码真正解放双手,帮大家早点下班、准点摸鱼

《办公需求场景再现:》

有一堆凌乱的 Excel 文件,内有多个 sheet、多类敏感数据和多种使用场景。现在的需求是:对这批表格进行批量加密或解密,假如这种级别的任务,你的 Big Boss 直接甩给你来负责,请问阁下该如何挠头?

  • 需求文件列表截图:

《办公痛点分析:》

01

 痛点1:量大耗时,重复劳动极其枯燥

    • 如果有几百上千个Excel文件,手动逐个打开 → 点击“文件” → “保护工作簿” → 输入密码 → 保存 → 关闭。这一套动作做几十遍后人就会开始烦躁,做几百遍极易出错(如忘记是否已加密)。

    02

     痛点2:密码管理混乱,容易遗失或泄露

      • 各自为政: 不同人设置的密码不同(有的用“123456”,有的用生日,有的用部门缩写),后期维护灾难。

      • 无统一规则: 需要解密时,不知道原密码是什么,只能一个个试或绕路找原设置人。

      03

      痛点3:多 sheet / 多场景下规则不统一,极易遗漏

      • 同一文件内: 有些文件需要对整个工作簿加密,有些只对特定 sheet 加密,人工操作时很容易忘记勾选对应选项,导致本该加密的 sheet 暴露。

      • 不同文件间: 财务文件用密码A,人事文件用密码B,周报文件不加密。人工筛选时,极易把财务文件当周报漏加密,或把不加密的周报也加了密。

      《办公需求解决思路:》

      1.获取任务列表:扫描出该文件夹下递归所有Excel文件(.xls, .xlsx 等)。

      2.逐个处理文件:遍历文件列表,对每个文件执行加密:

      《办公代码展示:》

      下面,我就用python代码让各位大佬见识一下,什么叫"传统文化遇上赛博效率"

      import sysfrom pathlib import Pathfrom PyQt6.QtWidgets import (    QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout,    QLabel, QLineEdit, QPushButton, QFileDialog, QMessageBox,    QGroupBox, QRadioButton, QCheckBox,    QStatusBar, QButtonGroup, QSplitter, QTextEdit)from PyQt6.QtCore import Qt, QSettingsfrom PyQt6.QtGui import QFont, QTextCursorclass ExcelPasswordTool(QMainWindow):    def __init__(self):        super().__init__()        self.setWindowTitle("Excel批量加密解密工具(欢迎关注微信公众号:码海听潮)")        self.setFixedSize(780580)        # 设置应用样式        self.setup_style()        # 主窗口部件        central_widget = QWidget()        self.setCentralWidget(central_widget)        main_layout = QHBoxLayout(central_widget)        main_layout.setSpacing(10)        main_layout.setContentsMargins(10101010)        # 创建分割器        splitter = QSplitter(Qt.Orientation.Horizontal)        main_layout.addWidget(splitter)        # 左侧面板(30%)        left_panel = QWidget()        left_panel.setMinimumWidth(300)        left_layout = QVBoxLayout(left_panel)        left_layout.setSpacing(15)        left_layout.setContentsMargins(0000)        # 右侧日志面板(70%)        right_panel = QWidget()        right_layout = QVBoxLayout(right_panel)        right_layout.setContentsMargins(0000)        # 创建日志文本框        log_group = QGroupBox("执行日志")        log_layout = QVBoxLayout(log_group)        log_layout.setContentsMargins(10151010)        self.log_text = QTextEdit()        self.log_text.setReadOnly(True)        self.log_text.setPlaceholderText("日志将显示在这里...")        self.log_text.setStyleSheet("""            QTextEdit {                font-family: 'Consolas', 'Microsoft YaHei';                font-size: 11px;                border: 1px solid #E0E0E0;                border-radius: 5px;                background-color: #FAFAFA;            }        """)        log_layout.addWidget(self.log_text)        # 添加清空日志按钮        clear_log_btn = QPushButton("清空日志")        clear_log_btn.setObjectName("secondary")        clear_log_btn.clicked.connect(self.clear_log)        log_layout.addWidget(clear_log_btn)        right_layout.addWidget(log_group)        # 将面板添加到分割器        splitter.addWidget(left_panel)        splitter.addWidget(right_panel)        splitter.setSizes([300700])        # 设置加密和解密功能在左侧面板        self.setup_encrypt_section(left_layout)        self.setup_decrypt_section(left_layout)        # 添加弹性空间        left_layout.addStretch()        # 状态栏        self.status_bar = QStatusBar()        self.setStatusBar(self.status_bar)        self.status_bar.showMessage("准备就绪")        self.status_bar.setStyleSheet("""            QStatusBar {                background-color: #F5F5F5;                padding: 5px;                font-size: 11px;                color: #666;            }        """)        # 加载设置        self.load_settings()    def setup_style(self):        """设置应用样式"""        self.setStyleSheet("""            QMainWindow {                background-color: #F8F9FA;            }            QLabel {                color: #333;            }            QGroupBox {                font-weight: bold;                border: 1px solid #E0E0E0;                border-radius: 8px;                margin-top: 12px;                padding-top: 10px;                background-color: white;            }            QGroupBox::title {                subcontrol-origin: margin;                left: 10px;                padding: 0 5px;                color: #0078d7;            }            QLineEdit {                border: 1px solid #D0D0D0;                border-radius: 5px;                padding: 8px;                background-color: white;                font-size: 12px;            }            QLineEdit:focus {                border-color: #0078d7;                outline: none;            }            QPushButton {                border: none;                border-radius: 5px;                padding: 8px 16px;                font-weight: bold;                font-size: 12px;            }            QPushButton#primary {                background-color: #0078d7;                color: white;            }            QPushButton#primary:hover {                background-color: #005a9e;            }            QPushButton#primary:pressed {                background-color: #004578;            }            QPushButton#danger {                background-color: #d83b01;                color: white;            }            QPushButton#danger:hover {                background-color: #b52a00;            }            QPushButton#secondary {                background-color: #f0f0f0;                color: #333;                border: 1px solid #D0D0D0;            }            QPushButton#secondary:hover {                background-color: #e5e5e5;            }            QRadioButton {                spacing: 8px;                font-size: 12px;            }            QCheckBox {                spacing: 8px;                font-size: 12px;            }        """)    def setup_encrypt_section(self, parent_layout):        """设置加密功能区域"""        encrypt_group = QGroupBox("加密Excel")        encrypt_layout = QVBoxLayout(encrypt_group)        encrypt_layout.setSpacing(10)        encrypt_layout.setContentsMargins(15151515)        # 文件夹选择        folder_layout = QHBoxLayout()        self.folder_path = QLineEdit()        self.folder_path.setPlaceholderText("请选择文件夹...")        folder_layout.addWidget(self.folder_path)        browse_btn = QPushButton("浏览")        browse_btn.setObjectName("secondary")        browse_btn.clicked.connect(self.browse_folder)        folder_layout.addWidget(browse_btn)        encrypt_layout.addLayout(folder_layout)        # 密码输入        pwd_layout = QHBoxLayout()        pwd_label = QLabel("密码:")        pwd_label.setMinimumWidth(40)        pwd_layout.addWidget(pwd_label)        self.password_entry = QLineEdit()        self.password_entry.setEchoMode(QLineEdit.EchoMode.Password)        pwd_layout.addWidget(self.password_entry)        encrypt_layout.addLayout(pwd_layout)        # 确认密码        confirm_layout = QHBoxLayout()        confirm_label = QLabel("确认:")        confirm_label.setMinimumWidth(40)        confirm_layout.addWidget(confirm_label)        self.confirm_entry = QLineEdit()        self.confirm_entry.setEchoMode(QLineEdit.EchoMode.Password)        confirm_layout.addWidget(self.confirm_entry)        encrypt_layout.addLayout(confirm_layout)        # 记住密码        self.save_password_check = QCheckBox("记住密码")        self.save_password_check.toggled.connect(self.toggle_save_password)        encrypt_layout.addWidget(self.save_password_check)        # 加密按钮        self.encrypt_btn = QPushButton("开始加密")        self.encrypt_btn.setObjectName("primary")        self.encrypt_btn.clicked.connect(self.protect_files)        encrypt_layout.addWidget(self.encrypt_btn)        # 清除设置按钮        clear_encrypt_btn = QPushButton("清除设置")        clear_encrypt_btn.setObjectName("secondary")        clear_encrypt_btn.clicked.connect(self.clear_encrypt_settings)        encrypt_layout.addWidget(clear_encrypt_btn)        parent_layout.addWidget(encrypt_group)    def setup_decrypt_section(self, parent_layout):        """设置解密功能区域"""        decrypt_group = QGroupBox("解密Excel")        decrypt_layout = QVBoxLayout(decrypt_group)        decrypt_layout.setSpacing(10)        decrypt_layout.setContentsMargins(15151515)        # 文件选择        file_layout = QHBoxLayout()        self.file_path = QLineEdit()        self.file_path.setPlaceholderText("请选择Excel文件...")        file_layout.addWidget(self.file_path)        browse_btn = QPushButton("浏览")        browse_btn.setObjectName("secondary")        browse_btn.clicked.connect(self.browse_file)        file_layout.addWidget(browse_btn)        decrypt_layout.addLayout(file_layout)        # 解密方法        self.method_vba = QRadioButton("自动破解(推荐)")        self.method_vba.setChecked(True)        self.method_known = QRadioButton("已知密码移除")        decrypt_layout.addWidget(self.method_vba)        decrypt_layout.addWidget(self.method_known)        # 已知密码输入        self.known_pass_frame = QWidget()        known_layout = QHBoxLayout(self.known_pass_frame)        known_layout.setContentsMargins(20000)        known_label = QLabel("已知密码:")        known_label.setMinimumWidth(70)        known_layout.addWidget(known_label)        self.known_pass_entry = QLineEdit()        self.known_pass_entry.setEchoMode(QLineEdit.EchoMode.Password)        known_layout.addWidget(self.known_pass_entry)        decrypt_layout.addWidget(self.known_pass_frame)        self.known_pass_frame.setVisible(False)        # 绑定方法选择事件        self.method_vba.toggled.connect(self.on_method_change)        self.method_known.toggled.connect(self.on_method_change)        # 解密按钮        self.decrypt_btn = QPushButton("开始解密")        self.decrypt_btn.setObjectName("danger")        self.decrypt_btn.clicked.connect(self.start_decrypt)        decrypt_layout.addWidget(self.decrypt_btn)        # 清除选择按钮        clear_decrypt_btn = QPushButton("清除选择")        clear_decrypt_btn.setObjectName("secondary")        clear_decrypt_btn.clicked.connect(self.clear_decrypt_settings)        decrypt_layout.addWidget(clear_decrypt_btn)        parent_layout.addWidget(decrypt_group)    # ========== 槽函数(空实现) ==========    def browse_folder(self):        """浏览文件夹"""        folder = QFileDialog.getExistingDirectory(self"选择文件夹")        if folder:            self.folder_path.setText(folder)            self.add_log(f"已选择文件夹: {folder}")    def browse_file(self):        """浏览文件"""        file_path, _ = QFileDialog.getOpenFileName(            self"选择Excel文件""""Excel文件 (*.xls *.xlsx)"        )        if file_path:            self.file_path.setText(file_path)            self.add_log(f"已选择文件: {file_path}")    def on_method_change(self):        """解密方法选择变化"""        self.known_pass_frame.setVisible(self.method_known.isChecked())    def protect_files(self):        """加密文件(空实现)"""        folder_path = self.folder_path.text()        password = self.password_entry.text()        confirm = self.confirm_entry.text()        if not folder_path:            QMessageBox.critical(self"错误""请选择文件夹路径")            return        if not password:            QMessageBox.critical(self"错误""请输入密码")            return        if password != confirm:            QMessageBox.critical(self"错误""两次输入的密码不一致")            return        if not Path(folder_path).exists():            QMessageBox.critical(self"错误""指定的文件夹不存在")            return        self.add_log(f"开始加密文件夹: {folder_path}")        # 此处可添加加密逻辑    def start_decrypt(self):        """开始解密(空实现)"""        file_path = self.file_path.text()        if not file_path:            QMessageBox.critical(self"错误""请选择Excel文件")            return        if not Path(file_path).exists():            QMessageBox.critical(self"错误""指定的文件不存在")            return        method = self.method_vba.isChecked()        if not method:            password = self.known_pass_entry.text()            if not password:                QMessageBox.critical(self"错误""请输入已知密码")                return        method_name = "VBA自动破解" if method else "已知密码移除"        self.add_log(f"开始解密文件: {file_path}")        self.add_log(f"解密方法: {method_name}")        # 此处可添加解密逻辑    def add_log(self, message):        """添加日志到日志文本框"""        from datetime import datetime        timestamp = datetime.now().strftime("%H:%M:%S")        formatted_message = f"[{timestamp}{message}"        self.log_text.append(formatted_message)        cursor = self.log_text.textCursor()        cursor.movePosition(QTextCursor.MoveOperation.End)        self.log_text.setTextCursor(cursor)    def clear_log(self):        """清空日志"""        self.log_text.clear()        self.add_log("日志已清空")    def save_settings(self, password):        """保存设置"""        settings = QSettings("ExcelTool""Settings")        settings.setValue("folder_path"self.folder_path.text())        settings.setValue("password", password)        settings.setValue("save_password"self.save_password_check.isChecked())    def load_settings(self):        """加载设置"""        settings = QSettings("ExcelTool""Settings")        folder_path = settings.value("folder_path""")        save_password = settings.value("save_password"Falsetype=bool)        if folder_path:            self.folder_path.setText(folder_path)        if save_password:            password = settings.value("password""")            if password:                self.password_entry.setText(password)                self.confirm_entry.setText(password)                self.save_password_check.setChecked(True)    def clear_saved_password(self):        """清除保存的密码"""        settings = QSettings("ExcelTool""Settings")        settings.setValue("password""")        settings.setValue("save_password"False)    def toggle_save_password(self, checked):        """切换是否保存密码"""        if not checked:            self.clear_saved_password()    def clear_encrypt_settings(self):        """清除加密设置"""        self.folder_path.clear()        self.password_entry.clear()        self.confirm_entry.clear()        self.save_password_check.setChecked(False)        self.status_bar.showMessage("加密设置已清除")        self.add_log("加密设置已清除")    def clear_decrypt_settings(self):        """清除解密设置"""        self.file_path.clear()        self.known_pass_entry.clear()        self.method_vba.setChecked(True)        self.status_bar.showMessage("解密设置已清除")        self.add_log("解密设置已清除")def main():    app = QApplication(sys.argv)    font = QFont("Microsoft YaHei"9)    app.setFont(font)    window = ExcelPasswordTool()    window.show()    sys.exit(app.exec())if __name__ == "__main__":    main()

      最终对所有excel进行了加密解密,完美实现了之前既定的需求.......

      通过上面Python自动化脚本,仅用几秒钟的时间就完成原需手动操作数小时甚至数天的工作任务。从最初准备手动人工机械操作的麻木到用python实现高效自动化的畅快,工作效率获得指数级提升,终于实现了不加班熬夜的自由!

      大佬们也可以举一反三,参照上面的代码思路根据自己工作中的实际情况来具体问题具体分析,实现自己定制化的需求。

      结语

      当Python遇见办公,牛马打工人终于笑出了猪叫声

      【职场人必看】每天早上一睁眼,想到又要面对:

      1.📊 堆积如山的Excel表格

      2.📑 机械重复的复制粘贴

      3.✍️ 永远改不完的各类文档

      4.诸如此类的更多........

      是不是连Ctrl+Alt+Delete的心都有了?

      别慌!别急,摸鱼这位“职场外挂”已经带着Python代码来拯救你了!

      友情提示:考虑到没有python环境的朋友需要打包好的成品exe,摸鱼早已贴心打包好,本篇文章代码打包的exe截图如下:

      感谢各位大佬观看,还望各位大佬抬抬贵手一键三连,多多关注点赞转发评论,大佬们的支持才是摸鱼孜孜不倦更新原创干货的动力!

      最新文章

      随机文章

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