ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Excel+Access轻量级行政管理系统:VBA驱动的数据管理实践

Excel+Access轻量级行政管理系统:VBA驱动的数据管理实践 行政类事务看起来零散员工、办公用品、车辆、访客、公文、固定资产、考勤、会议每一项都是一摊事。很多行政管理系统要么功能太重要么必须安装服务端和独立数据库小团队根本用不起来。这次我们看的这套管理系统走的是完全不同的路线Excel 工作表做操作界面Access 数据库做数据存储整套源文件拿到手就能改、就能跑。它的核心思路很简单行政人员每天本来就在用 Excel不需要再去学习一套新系统的表单逻辑。前台用 VBA 按钮驱动点“保存”“查询”“导入”“导出”就走一段宏代码背后通过 ADO 连接 Access 的 .accdb 文件把员工信息、办公用品领用、车辆使用、访客登记、公文收发、固定资产台账、月度考勤、会议纪要全部落到表里。相比纯 Excel 文件满天飞的做法这种方案至少解决了两个问题数据不会散落在几十个 Sheet 里多人使用时不再反复另存副本。这篇文章会带你走一遍完整套路先看这套系统的模块构成和适用边界再讲怎么打开源文件、启用宏、配置数据库连接然后逐个模块做功能验证最后给出批量导入导出、接口调用、性能观察和问题排查的方法。无论你是行政人员想自己维护这套系统还是 IT 人员需要给办公室搭一套轻量管理工具都可以按下面的步骤操作。1. 核心能力速览能力项说明系统类型桌面端管理信息系统源文件无需 Web 服务器前端界面Excel 工作表 VBA 按钮和表单数据录入、查询、统计都在 Excel 内完成后端存储Access 数据库采用 .accdb 或 .mdb 文件存储主要模块员工管理、办公用品、车辆管理、访客登记、公文管理、固定资产、考勤管理、会议管理运行依赖Microsoft Office Excel Access 数据库引擎部署方式本地单机使用或放在局域网共享目录多人使用功能介绍日常台账记录、条件查询、统计汇总、批量导入导出、打印报表是否支持 API原生不提供 Web API但可通过 ODBC/OLEDB 驱动对接 Python、C#、VBA 等程序读取数据批量任务支持多行数据一次性写入 Access也支持把 Access 查询结果导出到 Excel推荐场景中小型公司的行政部、人事部、办公室单机或小规模局域网使用需要先说明一点这套系统不是 Web 系统不承担高并发访问也替代不了 OA 审批流。它的价值在于让行政台账“有一个集中的家”并且这套结构可以看懂、可以改、可以继续扩展。2. 系统模块拆解拿到源文件以后先把 Excel 前端的工作表标签和 Access 后端的表对应起来。正常情况下一个业务模块在前端对应一个工作表在后端对应一张或多张数据表。2.1 员工管理员工模块负责维护公司内部人员基础档案。后端的员工表一般建议包含这些字段字段名类型说明EmpID文本员工编号建议设为主键EmpName文本员工姓名DeptName文本所属部门Position文本岗位Phone文本手机号码Email文本邮箱EntryDate日期入职日期Status文本在职/离职状态Excel 前端会做一个“员工信息表”工作表上方放操作按钮下方是录入区域。录入完成以后通过 VBA 的 INSERT 语句把数据追加到 Access 的 Employees 表。2.2 办公用品管理办公用品模块负责登记采购入库、领用出库和当前库存。后端涉及两张表一张是用品档案表一张是领用记录表。领用记录表至少需要领用人、领用部门、用品名称、数量、领用日期和备注。这个模块最常用的操作是“领用登记”和“库存查询”有条件的版本还可以做出库存不足自动提示。2.3 车辆管理车辆管理模块登记公司车辆的档案包括车牌号、车辆型号、责任人、当前里程、车辆状态同时记录车辆使用申请和归还信息。行政人员最关心的两个问题是某辆车现在谁在用最近一次的保养或年检时间是什么时候。这两个信息都可以通过车辆使用记录表筛选出来。2.4 访客登记访客登记模块用于记录来访人员信息一般包括访客姓名、证件号码、来访公司、被访人、来访事由、进入时间和离开时间。这里的证件号码属于敏感信息如果需要长期存储建议在正式使用前做脱敏处理或者单独加密保存不要把完整的证件信息明文放在共享目录里。2.5 公文管理公文管理模块记录公司内部发文的编号、标题、发文部门、发文日期、文件状态以及文件存放路径。Excel 前端可以做成一个登记台账Access 后端保存公文元数据实际的 Word/PDF 文件仍然放在服务器或共享盘的文件夹里表里只存路径。2.6 固定资产固定资产模块是行政系统里数据量最大的模块之一。需要记录资产编号、资产名称、分类、使用部门、使用人、购置日期、资产原值、存放位置、当前状态。固定资产模块要特别注意“领用”和“归还”两个操作不能只靠直接修改 Excel 单元格否则月底对账时根本说不清楚。2.7 考勤管理考勤管理模块可以有两种做法。简单做法是把每天每个员工的上下班时间录进 Access 表再按月汇总出勤天数、迟到次数、加班时长。另一种做法是先做一张“考勤原始记录”表再从这张表用查询生成月度汇总。Excel 前端做好日期联动选择月份以后自动把当月数据展示在工作表里方便做二次调整。2.8 会议管理会议管理模块登记会议主题、会议时间、会议地点、主持人、参会人员、会议纪要以及待办事项。后端一般只需要一张 Meetings 表加一张会议参与者关联表但很多轻量版本会直接把参会人写在一个文本字段里用逗号分隔。如果需要按参会人查询会议记录还是建独立关联表更合适。3. 使用边界与数据安全提醒这套系统的定位非常清晰适合个人使用、办公室电脑单机使用或者一个小部门在局域网共享目录里协作。超过 10 个人同时在线填写或者每天产生几千条新记录Access 后端就会开始出现文件锁冲突体验会明显下降。使用过程中必须注意几个边界访客登记、员工档案里的手机号、身份证号属于个人信息保存和导出要遵循最小化原则谁需要谁才能看不要把这个 Excel 文件随意转发。固定资产和办公用品数据是公司资产台账的一部分涉及财务审计不允许没有授权的人员直接修改。如果登录用户名和密码直接写在 VBA 代码里属于弱安全方案。正式使用前至少把数据库文件路径设置成内网可见但不可浏览访问的目录并定期更换管理员口令。数据库文件 .accdb 仍然是一个普通文件会损坏、会被误删必须做自动备份。一句话总结这套系统解决的是“结构化数据管理”问题不是“权限合规”问题。敏感数据的使用边界最终靠制度和使用习惯兜底。4. 环境准备与前置条件在打开源文件之前先把电脑环境检查一遍。推荐的环境是 Windows 10/11 Microsoft Office 2016 以上版本并且必须包含 Excel 和 Access 两个组件。4.1 检查 Office 是否完整如果你的电脑只有 Excel 没有 Access方案有两个。第一个是安装完整版 Office把 Access 组件选上第二个是把 Access 数据库引擎独立安装上。Access 数据库引擎是一个免费运行库很多情况下只要装了这个Excel 的 VBA 就能通过 OLEDB 驱动读取 .accdb 文件并不需要你打开 Access 软件。安装完成以后在 VBA 编辑器里测试一下驱动是否存在在立即窗口执行Debug.Print CreateObject(ADODB.Connection).ConnectionString如果连接对象创建成功说明 ADODB 环境正常。4.2 设置 Excel 信任中心VBA 宏代码默认会被 Office 安全策略拦截。打开源文件以后如果看不到按钮执行效果第一件事就是检查宏设置。进入“文件 - 选项 - 信任中心 - 信任中心设置 - 宏设置”选择“禁用所有宏并发出通知”然后关闭文件重新打开点击“启用内容”。如果源文件放在共享目录里还需要在“受信任位置”里添加这个目录否则每次打开都会提示启用了宏仍然可以运行但体验很别扭。4.3 处理“受保护的视图”从网上下载的源文件经常被 Office 标记为“来自其他计算机的文件”打开时会以受保护视图方式呈现表现在工作表顶部出现黄色提示条很多按钮无效数据库连接也会被拦。处理方式有两种一种是点击“启用编辑”另一种是对文件点右键 - 属性 - 勾选“解除锁定”。推荐在部署时直接把整个源文件目录加入受信任位置一劳永逸。4.4 确认数据库文件路径系统运行时所有数据都写到 Access 数据库文件里。打开源文件后先在 VBA 编辑器里搜索“Provider”或者“Data Source”找到数据库连接字符串确认指向的路径与自己电脑上实际文件路径一致。路径写错是源文件类项目最常见的启动失败原因。5. 启动与初始化流程整个系统的启动流程只有一个目标让 Excel 前端连上 Access 后端。5.1 目录规划建议把文件整理成下面的结构AdminSystem/ ├── AdminSystem.xlsm # Excel 前端主文件 ├── AdminData.accdb # Access 后端数据库 ├── Backup/ # 定时备份目录 ├── Attachments/ # 公文、合同等附件文件 └── Dist/ # 导出报表输出目录路径中不要出现中文目录名和空格可以减少很多底层连接问题。如果必须用中文路径数据库连接字符串里也要保证编码一致否则偶尔会出现“无法启动应用程序”的提示。5.2 配置 ADO 连接源文件一般会在模块里写好一个公共连接函数类似下面的代码Public Function GetConn() As ADODB.Connection Dim conn As ADODB.Connection Set conn New ADODB.Connection conn.ConnectionString ProviderMicrosoft.ACE.OLEDB.12.0;Data SourceC:\AdminSystem\AdminData.accdb;Persist Security InfoFalse; conn.Open Set GetConn conn End Function如果实际目录不是C:\AdminSystem把 Data Source 改成自己的路径即可。这里有一个容易踩的坑如果电脑装的是 64 位 Office但目标数据库文件是 .mdb 老格式连接字符串可能需要换成 Microsoft.Jet.OLEDB.4.0。而 .accdb 格式必须用 ACE.OLEDB.12.0 或更高版本。5.3 初始化数据表如果 Access 端还是空库第一次启动时需要建表。可以在 Access 里手工建也可以直接通过 VBA 执行建表 SQL。以下是一个员工表建表示例Public Sub CreateTables() Dim conn As ADODB.Connection Set conn GetConn() conn.Execute CREATE TABLE Employees ( _ EmpID TEXT(20) PRIMARY KEY, _ EmpName TEXT(50), _ DeptName TEXT(50), _ Position TEXT(50), _ Phone TEXT(20), _ Email TEXT(100), _ EntryDate DATETIME, _ Status TEXT(10)) MsgBox 员工表创建成功 conn.Close End Sub执行一次后Access 数据库里就有了 Employees 表。对于其他模块照着同样的方式把表建好或者直接用 Access 界面拖表设计器更快。5.4 登录方式部分源文件版本会在打开时弹出一个登录窗体输入用户名和密码以后才能操作。默认用户名和密码通常写在模块注释或者“账号密码”工作表中。如果登录窗体报错排查顺序是检查连接字符串 - 检查账号表是否为空 - 检查管理员账号是否被误删。这一步是整个系统最容易卡住的地方但原理很简单无非就是查询语句没找到记录。6. 功能测试与验证流程系统能正常打开以后不要急着把真实数据录进去先用测试数据把每个模块跑一遍。下面给出一套通用验证流程。6.1 员工管理测试测试目的确认 VBA 按钮能够把 Excel 数据写入 Access。操作步骤切换到“员工管理”工作表。在录入区域填写测试员工姓名、部门、岗位。点击“新增”或“保存”按钮。打开 Access查看 Employees 表是否多出一条记录。预期结果Access 表新增记录Excel 端提示“保存成功”录入区域自动清空。常见失败原因连接字符串路径错误或者 Employees 表结构里某个必填字段没有填写。排查时先在 VBA 编辑器里单步调试看是哪一行报错。6.2 办公用品领用测试测试目的确认领用登记会扣减库存或生成领用记录。操作步骤先初始化一种办公用品比如“A4 纸”库存设为 50 包。填写领用记录领用 5 包。点击“领用登记”。查询当前库存看是否变成 45。预期结果库存字段被更新领用记录表新增一条记录。这个模块要重点观察事务控制。如果库存扣减和领用记录不是同时成功很容易出现“记录登记了但库存没变”的情况。测试时故意把数据库文件设为只读观察系统是否给出明确错误提示而不是静默失败。6.3 车辆使用登记测试测试目的验证车辆状态流转逻辑。操作步骤在车辆档案里添加一辆测试车辆状态为“空闲”。新增一条使用申请填写申请人、用车时间、目的地。点击“确认用车”。查询车辆状态确认变成“使用中”。填写归还信息并提交。预期结果状态字段在“空闲”和“使用中”之间正常切换使用记录表保留完整流水。排错重点有些版本是把状态更新写在 UPDATE 语句里有些版本是直接修改 Excel 单元格后再整体写回。如果是前者要检查 WHERE 条件是否精确避免多辆车同时被更新。6.4 访客登记测试测试目的确认访客信息写入后可以按被访人或时间段查询。操作步骤录入一位测试访客记录进入时间。录入离开时间。在查询区选择日期范围执行查询。确认结果只显示该时间段内的记录。这个模块比较敏感建议测试完立刻把测试数据删除。同时确认 Access 端没有把访客证件号作为显示字段暴露在默认视图中。6.5 公文登记测试测试目的验证公文元数据和附件路径对应关系。操作步骤在“公文管理”工作表新增一条发文记录附件路径填一个真实存在的 Word 文件。点击“打开附件”按钮。确认可以调用系统默认程序打开文件。如果按钮使用的是FollowHyperlink或Shell cmd /c ...要注意路径中的空格会被截断建议统一用Chr(34)加双引号包裹路径。6.6 固定资产测试测试目的验证资产新增、领用、归还全流程。操作步骤新增一条资产比如“笔记本电脑”编号设为“ZC-001”。资产状态设为“在库”。执行领用操作使用人填入测试员工。执行归还操作确认使用人清空状态回到“在库”。用查询功能按部门筛选资产列表。固定资产模块最容易出问题的地方是“使用部门”和“使用人”联动。如果源文件里使用了二级联动菜单并且选项数据来自 Access测试时一定要确认 Access 端的部门表和人员表有数据否则下拉框是空的。6.7 考勤汇总测试测试目的验证按月度汇总的统计逻辑。操作步骤在 Access 考勤原始记录表里手工插入几条测试记录覆盖同一天同一员工的上下班时间。在 Excel 前端选择月份。点击“生成月度汇总”。检查出勤天数、迟到次数是否准确。建议用边界数据测试比如员工当天只打卡一次、跨天加班、请假半天这些场景最能发现统计逻辑的问题。6.8 会议管理测试测试目的验证会议记录保存和参会人查询。操作步骤新建一条会议记录填写主题、时间、地点、主持人、参会人。保存后在 Access 端查看记录。如果有按参会人查询的功能用某个测试人名搜索确认能查到对应会议。如果参会人字段是逗号分隔的文本在 Access 里用“Like”通配符做模糊查询即可。如果源文件已经升级成关联表结构则要验证多表 JOIN 查询不会重复计数。7. 批量任务与数据接口行政管理系统日常使用中有两个高频需求批量导入老数据以及把 Access 的数据导出给其他系统。这两个功能都应该在 Excel 前端实现不需要打开 Access 操作。7.1 把 Excel 历史数据批量写入 Access假设你手头有一份历史员工名单在 Excel 里列顺序是 EmpID、EmpName、DeptName需要一次性导入 Access。可以用下面的 VBA 思路批量写入Sub BatchInsertEmployees() Dim conn As ADODB.Connection Dim rs As ADODB.Recordset Dim i As Long Dim sql As String Set conn GetConn() 假设数据从第2行开始B、C、D列分别对应编号、姓名、部门 For i 2 To 100 If Trim(Cells(i, 2).Value) Then Exit For sql INSERT INTO Employees (EmpID, EmpName, DeptName) VALUES ( _ Replace(Cells(i, 2).Value, , ) , _ Replace(Cells(i, 3).Value, , ) , _ Replace(Cells(i, 4).Value, , ) ) conn.Execute sql Next i conn.Close MsgBox 批量导入完成 End Sub这段代码的重点是Replace函数它会把字符串里的单引号转成两个单引号防止 SQL 注入和语法错误。批量导入前建议先导出一次备份避免写错逻辑后把历史数据覆盖掉。7.2 把 Access 查询结果导出到 Excel反过来行政人员经常需要按月导出一份固定资产清单。可以在 Excel 前端用 ADO 查询 Access 数据然后直接写入工作表Sub ExportAssetsToSheet() Dim conn As ADODB.Connection Dim rs As ADODB.Recordset Dim i As Long Set conn GetConn() Set rs conn.Execute(SELECT AssetID, AssetName, DeptName, Keeper, Price FROM Assets WHERE Status在库) Worksheets(导出).Cells.Clear 写表头 Worksheets(导出).Range(A1:E1).Value _ Array(资产编号, 资产名称, 使用部门, 使用人, 资产原值) 写数据 i 2 Do While Not rs.EOF Worksheets(导出).Cells(i, 1).Value rs.Fields(AssetID).Value Worksheets(导出).Cells(i, 2).Value rs.Fields(AssetName).Value Worksheets(导出).Cells(i, 3).Value rs.Fields(DeptName).Value Worksheets(导出).Cells(i, 4).Value rs.Fields(Keeper).Value Worksheets(导出).Cells(i, 5).Value rs.Fields(Price).Value i i 1 rs.MoveNext Loop rs.Close conn.Close MsgBox 导出完成 End Sub如果一次导出几万行数据逐行写单元格会比较慢可以考虑用一个二维数组接收记录集再一次性写入。但对于行政管理系统这种量级逐行写入完全可以接受。7.3 通过 ODBC 把数据开放给其他程序Access 本身不提供 Web API但它支持 ODBC 和 OLEDB 两种标准访问方式这意味着你可以用 Python、C#、Java 或者其他工具直接读取里面的数据。下面是一个 Python pyodbc 读取 Access 数据的示例import pyodbc conn_str rDriver{Microsoft Access Driver (*.mdb, *.accdb)};DBQC:\AdminSystem\AdminData.accdb; conn pyodbc.connect(conn_str) cursor conn.cursor() rows cursor.execute(SELECT EmpID, EmpName, DeptName FROM Employees WHERE Status在职).fetchall() for row in rows: print(row) conn.close()如果你的电脑没有pyodbc先安装pip install pyodbc这种方式的用途很大你可以写一个定时脚本每天把 Access 里的考勤数据同步到数据仓库或者给一个内部小工具提供只读查询。要注意的是这种方式只在局域网内测试使用不要直接把 Access 文件放在公网可访问的位置。7.4 从 Excel 前端做一个最小查询接口如果公司内部其他平台需要查询访客登记记录可以写一个极简的 Flask 服务内部调用 pyodbc 查询from flask import Flask, jsonify, request import pyodbc app Flask(__name__) def query_visitors(date_from, date_to): conn_str rDriver{Microsoft Access Driver (*.mdb, *.accdb)};DBQC:\AdminSystem\AdminData.accdb; conn pyodbc.connect(conn_str) cursor conn.cursor() rows cursor.execute( SELECT VisitorName, Company, VisitTime FROM Visitors WHERE VisitTime BETWEEN ? AND ?, date_from, date_to ).fetchall() conn.close() return [dict(zip([VisitorName, Company, VisitTime], row)) for row in rows] app.route(/api/visitors) def visitors(): date_from request.args.get(from) date_to request.args.get(to) return jsonify(query_visitors(date_from, date_to)) if __name__ __main__: app.run(host127.0.0.1, port8000)这个接口只做演示真实使用时必须加访问 IP 限制、接口鉴权和访问日志并且不要直接暴露员工身份证号等敏感字段。如果只是内部用绑定127.0.0.1是最稳妥的。8. 资源占用与性能观察Excel Access 的方案性能瓶颈不在“CPU”和“显存”而在文件锁和网络延迟。使用过程中可以从几个维度观察。8.1 Excel 前端内存占用打开带 VBA 的管理系统后Excel 进程一般会占 200MB 到 600MB 内存具体取决于工作表数量和代码复杂度。如果频繁执行 VBA 循环内存会上升。可以在任务管理器里观察 EXCEL.EXE 进程如果长时间超过 1.5GB需要检查代码里是否有对象没有释放尤其是 ADODB.Recordset 和 Connection。8.2 Access 文件大小限制Access 官方限制是单文件最大 2GB。行政管理系统如果每天录入几十条记录几年内不会达到这个上限。但要注意 Access 文件一旦接近几百 MB在局域网共享目录里打开和写入的速度会明显下降。固定资产附件和公文附件一定不要直接放进 Access 的 OLE 对象字段否则文件体积会迅速膨胀。8.3 多人并发写入冲突多人同时打开同一个 Excel 前端文件如果各自都持有 VBA 连接句柄Access 底层会尝试对数据库文件加锁。出现“无法更新数据库或对象为只读”“文件正在使用中”这类提示时说明同时写操作冲突了。解决思路只有一个分成只读和可写两个场景只有录入人员才打开可写文件其他人只查看导出的报表。8.4 如何降低卡顿避免在 Excel 单元格里放大量 VLOOKUP 实时查询Excel 打开和切换工作表时会卡。把 Access 查询结果输出到静态工作表而不是让每个按钮都执行跨表公式。大批量导入数据时在 VBA 开头加Application.ScreenUpdating False结束时恢复。定期压缩和修复 Access 数据库打开 Access - 数据库工具 - 压缩和修复数据库。9. 常见问题与排查方法问题现象可能原因排查方式解决方案打开源文件后按钮无效宏被禁用检查信任中心宏设置启用宏把目录加入受信任位置提示“此工作簿包含宏已禁用”Office 安全策略查看文件属性是否被锁定右键属性 - 解除锁定VBA 报错“Microsoft.ACE.OLEDB.12.0 未注册”未安装 Access 数据库引擎检查连接字符串是否匹配位数安装 Access 数据库引擎或换成 Jet.OLEDB.4.0无法连接 .accdb 文件64 位 Office 和 32 位驱动不匹配查看 Office 位数安装对应位数的数据库引擎打开时出现受保护的视图文件来自网络或下载目录点击“启用编辑”加入受信任位置设为永久信任提示“路径无效”Data Source 路径写错检查 VBA 连接字符串改成实际绝对路径新增记录后 Access 表没数据连接指向其他数据库文件检查是否开了多个源文件副本统一使用同一份 AdminData.accdb多人使用时经常提示文件被锁定Access 不适合高并发写观察报错时间和人数减少同时写人数改为分时段录入查询速度越来越慢表数据量增大且没有索引检查大型表是否有主键为主键和常用筛选字段建索引保存按钮提示 SQL 语句错误文本字段里有单引号查看插入语句用 Replace 转义单引号导出数据格式变成科学计数法Excel 默认显示长数字检查单元格格式先设文本格式再写入数据10. 工程化建议与最佳实践这套系统虽然技术门槛低但用起来也要讲究工程化否则三个月后数据会再次乱掉。第一把源文件目录固定下来不要每个人桌面上都放一份副本。前端 xlsm 文件可以复制给每个人做查询模板但 Access 数据库文件必须只有一个主副本放在管理员可控的目录里每天自动备份。第二建立“备份 - 修改 - 测试 - 上线”的习惯。任何对 VBA 代码的修改都不要直接在生产文件上改。复制一份测试副本改完用测试数据跑一遍再覆盖到正式文件。第三每个模块的表都设置主键。员工表用 EmpID资产表用 AssetID访客表用自增 ID。主键除了保证数据唯一性也是 Access 查询索引的基础。第四批量导入之前先做数据清洗。Excel 里经常出现全角空格、重复行、格式不统一的日期直接写入 Access 后再处理会很麻烦。建议在导入前用 Excel 的“数据验证”和“删除重复项”先清理一遍。第五涉及人脸、声音、证件号、工资这类敏感数据时不要用明文 Excel 传输。员工和访客信息在行政系统里属于个人信息导出前先做脱敏比如手机号只保留前三位和后四位。如果需要长期留档建议把证件号码单独放一张权限控制更严格的表。第六给 VBA 代码加上日志。简单的做法是写一个LogInfo过程往一个日志工作表里追加“时间、操作人、操作内容、结果”方便后续排查是谁在什么时间改了哪些数据。11. 总结与后续扩展这套 Excel Access 的行政管理系统最值得尝试的点是“拿起来就能用”。它不需要安装数据库服务不需要写复杂的后端代码源文件打开、启用宏、指向数据库路径就能开始登记员工、办公用品、车辆、访客、公文、固定资产、考勤和会议信息。对于 50 人以内的公司或者一个部门内部使用完全够用。最先应该验证的功能是员工管理和办公用品领用这两个模块数据量小、逻辑直观最容易快速跑通。最需要花时间的地方是数据库连接字符串和下箭头菜单的数据来源只要这两处没问题其他模块基本就是同一套模式。最容易踩的坑有三个Office 位数和 Access 数据库引擎位数不匹配、数据库路径写错、多人同时写入导致文件锁冲突。先把这三个问题控制住系统就稳定了一大半。后续扩展方向可以考虑升级到两层结构前端保留 Excel 模板做录入后端把 Access 换成 SQL Server Express 或 MySQL Community Server这样能支持更多的并发用户。再往后可以将导入导出逻辑抽成 Python 服务做一个简单的 Web 查询页面但那是另一个项目的事了。对于当前这套源文件来说先把 Excel 和 Access 配合好把日常台账管起来就已经解决了实际问题。不建议直接丢掉 Access 去开发一套全新系统。行政场景真正重要的是数据持续可维护而不是技术多先进。把 Excel 作为交互界面、Access 作为数据库这种轻量组合足够支撑很长一段时间。建议收藏备用等实际跑起来以后再按需求逐步改造成更适合自己公司的版本。
返回列表