【路旁工坊02】批量入库:Excel 调查成果进数据库
- 2026-11-09 07:11:51
本文属于「路旁工坊」系列 · 第 02 篇
主线「赶路利器」把人工的复杂过程做成机器流水线,支线「原生路基」讲清流水线底下的原生功能;这个系列装主干放不下的东西 —— 别的工具、遗补、更正。
一先假设一个场景
地质灾害精细调查,野外调查是这么干的:边调查边填 Word。
一个隐患点一份、一个评价单元一份,现场对着表格逐格填 —— 填完先放起来,等一轮跑完回到驻地,再统一往下走。
野外跑完,回到室内才轮到数据库 —— 打开录入系统,一条条往库里录。一个乡镇几十个隐患点、几百个评价单元,每条几十个字段,底下还挂着一堆子表:
打开系统 → 新建一条 → 切回 Word → 复制 → 粘进去 → 切回去……
录到第三天,人会开始怀疑人生。
麻烦还不止「填得慢」——这一路本来就是乱的:
野外:Word 里填
↓
室内:整理进数据库
↓
表格要求一改 → 前面填的,重来一遍
↓
版本越攒越多 → 哪份是最终版,自己都记不清
也有人换法子:Excel 里填好,再用 Word 邮件合并。省了重复劳动,可年底还是得在数据库重填一遍 —— 录入系统只认数据库。
说到底,是三个东西各管一段,中间全靠人搬:Word 管填写、Excel 管统计、数据库管归档。
Word 填的进不了库,库里出来的不好统计,统计完还得粘回 Word。
与其在三个东西之间来回搬,不如让数据库当"唯一真相":Excel 直接桥连,灌进去的就是最终结果;要 Word 报表、要统计,都从库里导。
这个工具解决的就是这件事。
二它是什么
一句话:把 Excel 里的调查成果,一次灌进录入系统的数据库。
不用再打开系统一条条录。一个乡镇的活,手工录要小半个月;这个工具是选好文件、点一下 —— 几百条一次进,事务写入,中间错一条,一条都不会留半截。

图 1 主界面(批量导入页:灾害类型 + 工作表 + Excel 文件 + 数据预览)
它一共六个工具,不是并列的功能,而是顺着走的一条流水线:
| 数据库导出 | ||
| 批量导入 | ||
| 批量补充 | ||
| 数据库查询 | ||
| 数据库清理 | ||
| 调查表打印 |
①②③ 是主线,④⑤⑥ 随用随取。 下面按实际流程走一遍。
凭什么敢一次灌几百条?关键一步:先导出,再导入。 各省库里的表不一样、字段也不一样,硬套一份映射套不上。所以第一步不是导入,是导出 —— 用「数据库导出」把库里已有的表导出来,拿到一张底表,照着它填数据,灌回去自然一一对上。
不用写映射。 底表会把库里所有列都带出来,包括历次迭代留下的冗余字段 —— 填了界面上也不显示,不用管它。
三六个工具,走一遍 ★

图 2 六个工具,一条流水线:①②③ 主线,④⑤⑥ 随用随取
一个乡镇的数据,从"手上一堆 Excel"到"录进系统、能出表",实际是这么走的。
① 先导出 —— 底表是照着库导的
用在哪:拿到一个新库,第一步不是灌数据,是导出。
怎么做:选库 → 切到「数据库导出」→ 选表 → 选导出范围(单个表/全部表合并)→ 点「▶ 开始导出」。

图 3 「数据库导出」页:选表 → 选导出范围 → 导出底表
② 整理成 Excel —— 有什么列就填什么列
把野外带回来的数据,整理成一张 Excel。
这一步不在工具里,但底表是工具给的,所以照着它整理出来的数据天然跟库对得上 —— 底表有什么列,就整理成什么列。
但底表的列不一定都要填。 库经过多次版本迭代,会留下一些冗余字段 —— 填了,录入系统界面上也不显示。具体该填哪几栏,以「录入系统」界面上显示的为准。
中间卡住了?去查 —— 别猜,全库搜
表名、字段名对不上,或者想找某个值落在哪儿 —— 用「数据库查询」全库模糊搜,它直接告诉你落在哪张表、哪一列。

图 4 「数据库查询」页:填个词,搜出它在哪张表、哪一列
③ 批量录进去 —— 顺手把 UID 拿到手
用在哪:表填好了,一次灌进去。
怎么做:① 灾害类型 → ② 工作表 → ③ Excel 文件 → 点「预览数据」 → 「▶ 开始导入」。
导入的同时,UID 也落定了 —— 已有的原样保留,空的自动生成。这是后面挂子表的钥匙。

图 5 「批量导入」页:预览前 5 行,核对字段匹配
④ 补数据、挂子表、归附件 —— 一个「批量补充」全包
用在哪:主表已经进去了,后面又有新东西要上去。
怎么做:选补充类型 → 目标表 → 匹配字段(一般就是 UID)→ Excel 文件 → 预览 → 「▶ 开始补充」。
同一套动作,换个目标表就行:
· 补数据 —— 某些点补测的承灾体信息
· 挂子表 —— 承灾体、避险明白卡、防灾预案,用 PUID 指向主表那条记录
· 归附件 —— 图片、文档、附件,数据进库、文件跟着归位
⚠️ 批量导入不做覆盖。 已经有记录、要改内容,必须走批量补充 —— 直接重导一遍,旧记录不会被改掉。

图 6 「批量补充」页:补充类型 + 目标表 + 匹配字段
⑤ 填错了、导重了 —— 删掉
填错的、导重的,用「数据库清理」删:清空整表/按字段匹配/清理断连行。
⚠️ 整个工具里,只有这一个地方点错了要出事。

图 7 「数据库清理」页:左栏选清除方式(这里演示 ③ 清理断连行)
⑥ 填完了,出表 —— 按本省的表样
选模板 → 设目录 → 刷新列表 → 勾选要出的表 → 「▶ 生成Word」。模板要按本省的表格样式配一份 —— 各省的调查表格式不一样,这也是为什么这一块要定制。「包含相关子表」默认勾上:主文档的明细行照常填,相关子表会追加到同一份 Word 末尾、每份另起一页。

图 8 「调查表打印」页:模板 + 记录条件 + 待出表记录
另一头:偶尔要更新在线系统(用不上就跳过)
一般用不上。偶尔要更新在线灾害点系统 —— 从库里导出一份 Excel,把字段名改成对方指定的名称,再批量导入就行。
四六个坑,工具替你兜着
下面这六件事,工具在后台都处理好了 —— 你不用动手,但知道一下心里有底。换成别的录入系统,这些坑照样在。
1. 不用写映射 —— 底表就是照着库导的,列名天然对得上。
2. UID 不会乱动 —— 已有值原样保留,为空才生成新的。主表 UID 一变底下子表全断链,所以它不敢乱。
3. 类型按列名自动清洗 —— 面积、价值类取整,经纬度保留小数(坐标永远不能取整),是/否类转 0/1,日期规范格式。认不出就写 NULL,不写脏文本。
4. 不可回滚的排在最后 —— 附件归档真的动文件,所以放在数据库提交之后。库能回滚,文件不能。
5. 一对一的关系被"焊死" —— 承灾体调查表这类强制 UID = PUID = 主表 UID,杜绝一个点攒出两条记录。
6. 名字对不上可以全库查 —— 不用猜,搜一下就知道落在哪张表、哪一列。

图 9 UID / PUID 是一条链:滑坡主表 → 单体承灾体调查表(一对一,UID = PUID)→ 多个单体承灾体人口调查表(一对多,PUID 指上一级)—— Excel 里 UID 已有的原样保留、别自己造,UID 一变,整条链全断
五你这边要做的三件事
前面都是工具的事。这三件得你自己来 —— 漏一件,前面白干。
① 核对编码字段。 行政代码不能为空、必须和目标库一模一样,否则导入显示成功,但在系统里查不到 —— 静默失败,不报错、不提示。
② 用前备份。 程序在打开、加载数据库时自动备份一次(同一次运行只备一次)。清理操作不再单独备份,恢复靠的就是这一份 —— 所以别在同一次运行里反复清。
③ 动「数据库清理」时格外小心。 这是整个工具里唯一一个「点错了要出事」的地方 —— 动手之前,先确认备份在哪儿。
本工具仅用于学习与交流目的,不保证数据的完整性与准确性,不对因使用本工具造成的任何数据丢失或后果负责。
使用前务必备份原始数据库文件,使用者应自行承担全部风险。
六获取
仓库:wangdl23/geo-excel-importer(Gitee 开源)
获取方式有两种:
· ① 直接下打包好的 —— 仓库的「发行版」(Releases)里有编译好的压缩包,解压就能用;
· ② 下源码自己生成 —— 把仓库克隆下来,用 Visual Studio 打开 GeoExcelImporter.csproj,直接生成。
点文末左下角的【阅读原文】直达仓库。
仓库里只有源码,没有打包好的 exe —— 要么下发行版(Releases)里的压缩包,要么自己编译一份。
分发给别人时:把编译输出里的 net48 文件夹整套拷走就行,只删掉 .pdb —— 其余 DLL 和 x64/、x86/ 都是运行必需的。缺 DataInput.exe.config(枚举值)或 FieldMappings/*.xml(字段映射)也能跑,但功能会打折。
下期预告 · 路旁工坊 03
把「单元范围」「灾害范围」,批量投影到无人机照片上
系列导航
本篇:「路旁工坊 02」批量入库:Excel 调查成果进数据库
姊妹篇:「路旁工坊 01」无人机照片点位图:哪拍的、朝哪拍,一目了然
「赶路利器 01」GISer的工程图册:400 张照片,铺成一本能编辑的图册
「原生路基 01」六大利器,一张模板搞定 ArcGIS 批量制图
山行借路|造插件、讲路基、逛工坊
陪你少走弯路,多见风景