Excel工作表自动追加工具项目总结报告 - 教程

news/2025/10/1 17:13:59/文章来源:https://www.cnblogs.com/yxysuanfa/p/19122572

Excel工作表自动追加工具项目总结报告

1. 项目概述

1.1 项目背景

在现代企业办公环境中,Excel文件作为数据存储和交换的重要工具,经常需要在多个文件之间进行工作表的复制和同步操作。特别是在软件开发、项目管理和文档控制等场景中,经常需要将某个标准的工作表(如变更记录、版本历史等)追加到多个相关文档中。

传统的手工操作方式存在以下问题:

  • 效率低下,重复性工作量大
  • 容易遗漏某些文件
  • 格式不一致,影响文档专业性
  • 难以维护和更新

1.2 项目目标

开发一个自动化工具,能够:

  1. 根据配置文件自动识别源工作表和目标文件
  2. 支持递归搜索目录结构
  3. 支持多条件文件匹配
  4. 完整复制工作表格式和内容
  5. 提供友好的图形用户界面
  6. 生成详细的执行日志和报告

1.3 技术栈选择

经过技术评估,选择了以下技术栈:

  • Python 3.x:作为主要开发语言,具有丰富的库支持
  • openpyxl:用于Excel文件操作,支持.xlsx格式
  • tkinter:用于构建图形用户界面,Python标准库
  • json:用于配置文件解析
  • logging:用于日志记录

2. 需求分析详细说明

2.1 功能需求

2.1.1 核心功能需求
  1. 配置文件管理

  2. 文件识别与筛选

  3. 工作表复制

  4. 用户界面

  5. 日志与报告

2.1.2 非功能需求
  1. 性能要求

    • 能够处理大量Excel文件
    • 合理的执行时间
    • 内存使用效率
  2. 可靠性要求

    • 稳定的文件操作
    • 完整的异常处理
    • 资源泄露防护
  3. 可用性要求

    • 直观的用户界面
    • 清晰的操作指引
    • 有意义的错误提示

2.2 技术约束

  1. 平台兼容性

  2. 依赖管理

  3. 代码质量

3. 架构设计详细说明

3.1 系统架构

本工具采用经典的MVC(Model-View-Controller)架构模式:

3.1.1 Model层(数据模型)
  • ConfigModel:配置数据模型,负责配置文件的加载和验证
  • FileModel:文件系统模型,负责文件搜索和识别
  • ExcelModel:Excel操作模型,负责工作表的复制和格式处理
3.1.2 View层(用户界面)
3.1.3 Controller层(业务逻辑)
  • AppController:应用程序控制器,协调各组件工作
  • ConfigController:配置管理控制器
  • FileController:文件处理控制器
  • ExcelController:Excel操作控制器

3.2 模块设计

3.2.1 配置管理模块
class ConfigManager:
def load_config(self): pass
def validate_config(self): pass
def normalize_conditions(self): pass
3.2.2 文件搜索模块
class FileSearcher:
def find_files(self): pass
def filter_files(self): pass
def validate_files(self): pass
3.2.3 Excel操作模块
class ExcelOperator:
def copy_sheet(self): pass
def copy_styles(self): pass
def handle_naming_conflicts(self): pass
3.2.4 用户界面模块
class UIManager:
def create_main_window(self): pass
def show_progress(self): pass
def show_results(self): pass

3.3 数据流设计

  1. 配置加载流程

    用户选择配置文件 → 解析JSON → 验证配置 → 标准化条件 → 存储配置
  2. 文件处理流程

    递归搜索目录 → 应用过滤条件 → 验证文件格式 → 生成目标列表
  3. 工作表复制流程

    打开源文件 → 读取源工作表 → 打开目标文件 → 创建工作表 → 复制内容 → 复制格式 → 保存文件

4. 详细实现说明

4.1 核心类设计

4.1.1 ExcelSheetAppender 主类
class ExcelSheetAppender:
"""主应用程序类,负责协调各个组件的工作"""
def __init__(self):
"""初始化应用程序"""
self.root = tk.Tk()
self.config_file_path = None
self.target_directory = None
self.config = None
self.create_widgets()
def create_widgets(self):
"""创建用户界面组件"""
# 实现界面布局
def select_config_file(self):
"""选择配置文件"""
def select_directory(self):
"""选择目标目录"""
def load_config(self):
"""加载和验证配置文件"""
def validate_source_sheet(self):
"""验证源文件和工作表"""
def find_target_excel_files(self):
"""查找目标Excel文件"""
def copy_cell_style(self, source_cell, target_cell):
"""复制单元格样式"""
def copy_sheet_to_target(self, source_file_path, target_file_path):
"""复制工作表到目标文件"""
def execute(self):
"""执行主程序"""
def run(self):
"""运行应用程序"""
4.1.2 配置管理实现
def load_config(self):
"""加载并验证JSON配置文件"""
try:
with open(self.config_file_path, 'r', encoding='utf-8') as f:
self.config = json.load(f)
# 验证必需字段
required_keys = ['src_file_name', 'src_sheet_name', 'dest_sheet_name']
for key in required_keys:
if key not in self.config:
raise ValueError(f"配置文件中缺少必需的键: {key}")
# 标准化目标条件为列表格式
dest_conditions = self.config['dest_sheet_name']
if isinstance(dest_conditions, str):
self.config['dest_sheet_name'] = [dest_conditions]
elif not isinstance(dest_conditions, list):
raise ValueError(f"dest_sheet_name 必须是字符串或字符串列表")
logger.info(f"配置文件加载成功,目标条件: {self.config['dest_sheet_name']}")
return True
except Exception as e:
logger.error(f"配置文件加载失败: {str(e)}")
messagebox.showerror("错误", f"配置文件加载失败: {str(e)}")
return False
4.1.3 文件搜索实现
def find_target_excel_files(self):
"""递归查找目标目录下所有符合条件的Excel文件"""
try:
target_files = []
dest_conditions = self.config['dest_sheet_name']
# 使用os.walk递归遍历目录树
for root_dir, _, files in os.walk(self.target_directory):
for file in files:
# 多条件文件匹配逻辑
if (file.lower().endswith(('.xlsx', '.xls')) and
file != self.config['src_file_name'] and
any(condition in file for condition in dest_conditions)):
full_path = os.path.join(root_dir, file)
target_files.append(full_path)
logger.info(f"找到 {len(target_files)} 个符合条件的Excel文件")
for file_path in target_files:
logger.info(f"目标文件: {file_path}")
return target_files
except Exception as e:
logger.error(f"查找目标文件失败: {str(e)}")
return []
4.1.4 样式复制实现
def copy_cell_style(self, source_cell, target_cell):
"""复制单元格样式(修复不可哈希对象问题)"""
try:
# 字体样式复制
if source_cell.font:
target_cell.font = Font(
name=source_cell.font.name,
size=source_cell.font.size,
bold=source_cell.font.bold,
italic=source_cell.font.italic,
vertAlign=source_cell.font.vertAlign,
underline=source_cell.font.underline,
strike=source_cell.font.strike,
color=source_cell.font.color
)
# 边框样式复制
if source_cell.border:
target_cell.border = Border(
left=Side(
border_style=source_cell.border.left.border_style,
color=source_cell.border.left.color
) if source_cell.border.left else None,
# 其他边框方向类似处理...
)
# 填充样式复制
if source_cell.fill:
target_cell.fill = PatternFill(
fill_type=source_cell.fill.fill_type,
start_color=source_cell.fill.start_color,
end_color=source_cell.fill.end_color
)
# 对齐方式复制
if source_cell.alignment:
target_cell.alignment = Alignment(
horizontal=source_cell.alignment.horizontal,
vertical=source_cell.alignment.vertical,
text_rotation=source_cell.alignment.text_rotation,
wrap_text=source_cell.alignment.wrap_text,
shrink_to_fit=source_cell.alignment.shrink_to_fit,
indent=source_cell.alignment.indent
)
# 数字格式复制
target_cell.number_format = source_cell.number_format
except Exception as e:
logger.warning(f"复制单元格样式时出现警告: {str(e)}")
# 样式复制失败不影响主要功能

4.2 关键技术实现

4.2.1 多条件文件匹配算法
def multi_condition_filter(filename, conditions):
"""
多条件文件匹配算法
文件名只要满足条件列表中的任意一个条件即返回True
"""
return any(condition in filename for condition in conditions)
4.2.2 工作表命名冲突解决
def resolve_naming_conflicts(original_name, existing_names):
"""
解决工作表命名冲突
如果名称已存在,自动添加数字后缀
"""
new_name = original_name
counter = 1
while new_name in existing_names:
new_name = f"{original_name}_{counter}"
counter += 1
return new_name
4.2.3 递归目录搜索
def recursive_directory_search(root_path, file_filter):
"""
递归搜索目录树,应用文件过滤器
"""
matching_files = []
for current_dir, subdirs, files in os.walk(root_path):
for file in files:
if file_filter(file):
full_path = os.path.join(current_dir, file)
matching_files.append(full_path)
return matching_files

5. 技术难点与解决方案

5.1 样式复制问题

5.1.1 问题描述

在最初的实现中,直接复制样式对象时遇到了unhashable type: 'StyleProxy'错误。这是因为openpyxl中的样式对象是不可哈希的,不能直接赋值。

5.1.2 解决方案

通过分析样式对象的属性,逐个创建新的样式实例:

def copy_cell_style(self, source_cell, target_cell):
"""通过重新创建样式对象来避免哈希问题"""
# 分别处理字体、边框、填充、对齐等样式属性
# 为每个属性创建新的实例而不是直接赋值
5.1.3 技术细节
  • 字体对象:提取所有字体属性并创建新的Font对象
  • 边框对象:分别处理四个方向的边框属性
  • 填充对象:处理填充类型和颜色
  • 对齐对象:处理所有对齐相关属性

5.2 性能优化

5.2.1 内存管理
def copy_sheet_to_target(self, source_file_path, target_file_path):
"""确保工作簿正确关闭,避免内存泄漏"""
source_wb = None
target_wb = None
try:
# 文件操作逻辑
finally:
# 确保资源释放
if source_wb: source_wb.close()
if target_wb: target_wb.close()
5.2.2 批量操作优化
  • 减少不必要的文件重复打开
  • 使用迭代器处理大型工作表
  • 优化样式复制逻辑

5.3 错误处理机制

5.3.1 分层错误处理
def execute_operation():
try:
# 主要操作
except FileNotFoundError as e:
# 文件不存在错误
except PermissionError as e:
# 权限错误
except Exception as e:
# 其他未知错误
5.3.2 错误恢复策略
  • 单个文件失败不影响其他文件处理
  • 提供详细的错误信息用于问题定位
  • 支持部分成功的情况

6. 配置系统设计

6.1 配置文件格式

6.1.1 基本格式
{
"src_file_name": "源文件.xlsx",
"src_sheet_name": "要复制的工作表名称",
"dest_sheet_name": "目标文件匹配条件"
}
6.1.2 多条件支持
{
"src_file_name": "1.xlsx",
"src_sheet_name": "sheet_name",
"dest_sheet_name": [
"xxx",
"mmm"
]
}

6.2 配置验证逻辑

6.2.1 必需字段验证
required_keys = ['src_file_name', 'src_sheet_name', 'dest_sheet_name']
for key in required_keys:
if key not in config:
raise ValueError(f"缺少必需的配置项: {key}")
6.2.2 数据类型验证
# 确保目标条件是字符串或字符串列表
if not isinstance(config['dest_sheet_name'], (str, list)):
raise ValueError("dest_sheet_name必须是字符串或列表")

6.3 向后兼容性

6.3.1 旧格式支持
# 同时支持新旧配置格式
if isinstance(dest_conditions, str):
# 旧格式:单个字符串
conditions = [dest_conditions]
elif isinstance(dest_conditions, list):
# 新格式:字符串列表
conditions = dest_conditions
else:
raise ValueError("不支持的格式")

7. 用户界面设计

7.1 界面布局设计

7.1.1 主窗口布局
+-----------------------------------+
|        Excel工作表追加工具         |
+-----------------------------------+
| 1. 选择JSON配置文件:              |
|    [选择配置文件] 已选择: xxx.json |
|                                   |
| 2. 选择目标目录:                  |
|    [选择目录]   已选择: /path/to/dir|
|                                   |
|          [开始执行]               |
|                                   |
| 状态: 已准备好执行               |
+-----------------------------------+
7.1.2 进度窗口布局
+-----------------------------------+
|            执行进度               |
+-----------------------------------+
| 正在处理文件...                  |
| [====================] 75%       |
| 状态: 正在处理文件 3/4           |
| 当前文件: example.xlsx           |
+-----------------------------------+

7.2 交互设计

7.2.1 文件选择交互
7.2.2 进度反馈
  • 实时进度条显示
  • 当前文件名称显示
  • 处理状态更新
7.2.3 结果展示

7.3 用户体验优化

7.3.1 状态提示
def update_status(self):
"""根据当前状态更新界面提示"""
if self.config_file_path and self.target_directory:
self.status_label.config(text="已准备好执行", fg="green")
else:
self.status_label.config(text="请选择配置文件和目标目录", fg="blue")
7.3.2 错误处理
def show_error_dialog(self, title, message):
"""显示错误对话框"""
messagebox.showerror(title, message)

8. 测试策略与质量保证

8.1 测试环境搭建

8.1.1 测试数据准备
# 创建测试用的Excel文件
def create_test_excel_files():
"""创建用于测试的Excel文件集合"""
# 包含各种格式的工作表
# 模拟真实的使用场景
8.1.2 测试配置文件
{
"src_file_name": "test_source.xlsx",
"src_sheet_name": "TestSheet",
"dest_sheet_name": ["test_target", "match_pattern"]
}

8.2 单元测试

8.2.1 配置加载测试
def test_config_loading():
"""测试配置文件加载功能"""
# 测试正常情况
# 测试缺少必需字段
# 测试格式错误
# 测试多条件配置
8.2.2 文件搜索测试
def test_file_search():
"""测试文件搜索功能"""
# 测试递归搜索
# 测试多条件匹配
# 测试排除源文件

8.3 集成测试

8.3.1 端到端测试
def test_end_to_end():
"""完整的端到端测试"""
# 从配置加载到文件处理的完整流程
# 验证最终结果是否正确
8.3.2 性能测试
def test_performance():
"""性能测试"""
# 测试大量文件处理能力
# 测试内存使用情况
# 测试执行时间

8.4 错误处理测试

8.4.1 异常情况测试
def test_error_conditions():
"""测试各种错误情况"""
# 文件不存在
# 权限错误
# 磁盘空间不足
# 文件被占用

9. 部署与使用指南

9.1 环境要求

9.1.1 系统要求
  • Windows 7/8/10/11
  • macOS 10.14+
  • Linux (主要发行版)
9.1.2 Python环境

9.2 安装步骤

9.2.1 依赖安装
pip install openpyxl
9.2.2 程序部署
# 下载源代码
git clone <repository-url>cd excel-sheet-appender# 直接运行python main.py

9.3 使用说明

9.3.1 准备配置文件
{
"src_file_name": "模板文件.xlsx",
"src_sheet_name": "标准工作表",
"dest_sheet_name": ["项目文档", "设计文档"]
}
9.3.2 执行流程
  1. 运行程序
  2. 选择配置文件
  3. 选择目标目录
  4. 点击"开始执行"
  5. 查看执行结果

9.4 故障排除

9.4.1 常见问题
  1. 文件权限问题:确保有读写权限
  2. 文件被占用:关闭正在使用的Excel文件
  3. 配置错误:检查JSON格式和内容
9.4.2 日志分析
# 查看详细日志了解问题原因
logging.basicConfig(level=logging.DEBUG)

10. 性能分析与优化

10.1 性能指标

10.1.1 执行时间分析
  • 文件搜索时间
  • 单个文件处理时间
  • 总执行时间
10.1.2 内存使用分析

10.2 优化策略

10.2.1 算法优化
# 使用生成器减少内存占用
def find_files_generator(root_path):
for root, dirs, files in os.walk(root_path):
for file in files:
if should_include(file):
yield os.path.join(root, file)
10.2.2 资源管理优化
# 使用上下文管理器确保资源释放
with load_workbook(file_path) as wb:
# 处理工作簿
# 自动关闭文件

10.3 基准测试

10.3.1 测试场景
10.3.2 性能基准
# 记录性能指标
start_time = time.time()
# 执行操作
end_time = time.time()
execution_time = end_time - start_time

11. 安全考虑

11.1 输入验证

11.1.1 文件路径验证
def validate_file_path(file_path):
"""验证文件路径安全性"""
# 检查路径遍历攻击
# 检查文件类型
# 检查文件大小限制
11.1.2 配置数据验证
def sanitize_config(config):
"""清理配置数据"""
# 移除潜在的危险字符
# 验证数据范围

11.2 权限管理

11.2.1 文件权限检查
def check_file_permissions(file_path):
"""检查文件读写权限"""
if not os.access(file_path, os.R_OK):
raise PermissionError(f"没有读取权限: {file_path}")

12. 扩展性与维护性

12.1 架构扩展点

12.1.1 插件系统设计
class Plugin:
"""插件基类"""
def before_copy(self, context): pass
def after_copy(self, context): pass
12.1.2 格式扩展支持
class FormatHandler:
"""格式处理器接口"""
def can_handle(self, file_path): pass
def copy_sheet(self, source, target): pass

12.2 代码维护策略

12.2.1 模块化设计
12.2.2 文档维护
  • 代码注释规范
  • API文档生成
  • 用户手册更新

13. 项目总结与经验教训

13.1 技术成果

13.1.1 功能实现
13.1.2 代码质量
  • 清晰的架构设计
  • 完善的错误处理
  • 良好的性能表现
  • 可维护的代码结构

13.2 经验教训

13.2.1 技术选择经验
  • openpyxl在样式处理上的局限性
  • tkinter在复杂界面上的限制
  • Python在桌面应用开发中的优势
13.2.2 开发过程经验

13.3 未来改进方向

13.3.1 功能增强
13.3.2 技术升级
  • 迁移到更现代的GUI框架
  • 添加Web界面版本
  • 支持云存储集成

14. 附录

14.1 完整代码清单

[此处应包含完整的源代码,但由于篇幅限制,已在前面章节中分段展示]

14.2 第三方库文档

14.2.1 openpyxl主要API
  • load_workbook(): 加载工作簿
  • Workbook: 工作簿类
  • Worksheet: 工作表类
  • 样式相关类:Font, Border, Alignment等
14.2.2 tkinter主要组件

14.3 配置示例文件

14.3.1 基本配置
{
"src_file_name": "标准模板.xlsx",
"src_sheet_name": "变更记录",
"dest_sheet_name": "项目文档"
}
14.3.2 多条件配置
{
"src_file_name": "1.xlsx",
"src_sheet_name": "sheet_name",
"dest_sheet_name": [
"xxx",
"mmm"
]
}

14.4 故障排除指南

14.4.1 常见错误代码
14.4.2 解决方案
  1. 检查文件路径是否正确
  2. 验证JSON格式
  3. 确保文件没有被占用
  4. 检查文件权限设置

项目总结完毕

本报告详细记录了Excel工作表自动追加工具的设计、开发、测试和部署全过程,涵盖了从需求分析到技术实现的各个方面,为类似项目的开发提供了完整的参考模板。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/924054.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《电路基础》第三章学习笔记

《电路基础》第三章学习笔记任何伟大的事情都不是一蹴而就的,做任何伟大的事情都需要时间、耐心和毅力I’m back,完成到任务8了,回来继续学习电路! 这一章是本书中最为重要的一章,应给予足够的重视。 主要介绍:1…

移植Linux(No MMU)到ESP32-S3

主要原理是利用mini-rv32ima,在EPS32上运行一个riscv32模拟器,在模拟器里运行无需MMU版的主线Linux 6.X 这位大佬已经把mini-rv32ima移植到esp32-s3的PlatformIO里的Arduino平台上,代码看着好像很简单,就几个脚本:…

关于ws连接coinex偶尔会出现几分钟不更新数据的问题 - Charlie

一、环境 1、语言:go 二、服务概况三、现象 lark告警群中偶尔会出现coinex的btc和eth同时告警,但是他们的最后一次告警时间不相同,代码的告警逻辑是:每隔30s定时从数据库中查询redis中btc和eth的数据updateTime字段…

dz网站后台好的网页制作公司有哪些

智慧公安作为公安信息化开展到高级阶段的一种警务形态&#xff0c;“智慧公安”主要采用物联网、云计算、无线通讯、智能动态感知分析等新一代信息技术,将公安工作IT根底设备与物理设备、人际环境等高度交融,以提供智能化公安决策与效劳。智慧警务大数据云平台开发情报研判系统…

网站建设目标和功能介绍潍坊网站建设方案

华为北向网管NCE开发教程&#xff08;1&#xff09;闭坑选接口协议 华为北向网管NCE开发教程&#xff08;2&#xff09;REST接口开发 华为北向网管NCE开发教程&#xff08;3&#xff09;CORBA协议开发 本文一是记录自己开发华为北向网管遇到的坑&#xff0c;二是给需要的人&…

购物网站的前台功能网页设计教程书籍推荐

安装 VirtualBox 地址:https://www.virtualbox.org/wiki/Downloads 版本: 6.1和7.0+版本都可以 安装: windows上安装需要admin权限,右键菜单选中 “Run as administrator” 安装 CentOS 6.10 地址:https://vault.centos.org/6.10/isos/x86_64/ 版本: 如果不需要GUI,选择…

【C#】以 BlockingCollection 为核心的多相机 YOLO 检测任务处理框架 - 指南

【C#】以 BlockingCollection 为核心的多相机 YOLO 检测任务处理框架 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-fami…

上手 cpp-httplib:轻量级 C++ HTTP 库的安装与实战指南 - 教程

上手 cpp-httplib:轻量级 C++ HTTP 库的安装与实战指南 - 教程2025-10-01 17:04 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !impo…

CAD安装Error 1402权限问题解决

问题描述 由于历史版本卸载不干净,在安装CAD过程中报错 1402,具体如下: Error 1402 Could not open key:UNKNOWN\Components\BCC6186334A64285641057ABAF4A6…Verify that you have sufficient access to that key,…

题解:P9868 [NOIP2023] 词典

原题传送门。 显然,如果我们想要把一个字符串字典序尽量小,我们把这个字符串中的字符从小到大排序就行了;反过来就是把字符串中的字符从大到小排序就行了。 我们可以暴力地对于每个字符串排序,然后对于每一个字符串…

304、渭城曲

304、渭城曲304、渭城曲 唐●王维 渭城朝雨浥轻尘,客舍青青柳色新。 劝君更尽一杯酒,西出阳关无故人。【现代诗意译】 清晨的渭城 下起了一场春雨 沾湿了路边的轻尘 旅店周围 青青柳条越发清新老朋友 再喝一杯饯别酒…

AtCoder Beginner Contest 425

AtCoder Beginner Contest 425 A ~ G 题解A,B H₂O题。 A 题直接模拟,记得 \(-1^x\) 的性质。 B 题构造题,每次往空格里填最小的可用数字即可。 C 这道题就相当于有一个数字圆环,每次求其中的一段区间的和。、 嗯?…

实用指南:MySQL InnoDB表压缩:性能优化全解析

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

采集网站开发网站页面设计和结构的技巧

一、 开始的开始——调研、还是调研、一直在路上…… 在只有关于疫情给老年人的带来的问题大方向下&#xff0c;我去到街上随机的拉老年人进行调研。这是我第一次如此频繁的跟陌生老年人沟通。此期间&#xff0c;跟他们的沟通中我发现除了口音上的差异&#xff0c;还有更多的是…

AT_agc052_b [AGC052B] Tree Edges XOR

考虑边权转点权,让边权满足其为相邻点权的异或和,操作变成交换两个点的点权。 随便钦定一个为根,设 d i ​ 为初始时 i 的点权,f i ​ 是 i 期望得到为多少。如果存在 d,f,满足它们是相同的集合,就有解。 注意到…

pc开奖网站开发绵阳网站建设维护

1. 安装软件准备1.1. 软件准备1.zabbix-2.4.8.tar.gz zabbix-3.0.31.tar.gz下载地址&#xff1a;https://www.zabbix.com/download2.php5.4.16.tar.gz下载地址&#xff1a;https://www.php.net/downloads.php1.2. 注意事项安装过程路径、密码尽量不要出现中文、特殊字符、空格、…

详细介绍:C语言指针进阶(进阶)

详细介绍:C语言指针进阶(进阶)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&q…

背单词 纯英文 2025年10月

2025-10-02coronation, horrific, pal, 2025-10-01quack, dais, notation, replicate, despoil,bizarre, differentiate, banister, intelligible, incest,obligatory, deviate, recourse, delineate, haversack

「Diary Solution Set」October 2025 在凉雨停歇的那天

2025.10.1 国庆节日常被作业包围。将世界最后的空白刻印在斑驳心海 而我等蜉蝣只得抒发不足日的无奈 无名歌者哼唱着积雨云为之落泪的歌在人海发现 ARC 原来有这么多优质计数。