
每周野外数据收齐之后,经常要「合库」:多本 Excel 合成一本、散落的照片按 Photo/Sketch 归位、带坐标的表格还要转成 Shapefile 在 GIS 里制图。手工合并容易漏表、漏行,照片复制来复制去也容易乱,Excel 转 SHP 又不想每次都开 ArcGIS,更不想自己写脚本。
SGS 项目数据整理工具的「合库数据功能」里内置三个核心功能:Excel 文件合并、图片合并整理、Excel 转 SHP。从表格合库、照片归位到导出空间数据,都可以在一个界面里点几下就完成,不依赖 ArcGIS。
能做什么?把一个目录下(含所有子目录)的多个 Excel 工作簿,按工作表名称合并成一个大工作簿:同名的表从第二行起追加在一起,表头只保留一份,适合多期、多批数据「合库」。
怎么用?点击「Excel 文件合并」,先选「包含 Excel 的目录」,再选「合并后要保存的 .xlsx 路径」。程序会递归查找所有 .xlsx 和 .xls,逐个读取、按表名合并。若存在名为「Structures」的工作表,还会按指定字段排序。合并完成后可选对表头做统一格式化(加粗、灰色背景等)。
注意
能做什么?把散落在多个子文件夹里的 jpg 照片,按文件名关键词自动分拣到 Media/Photo 和 Media/Sketch:文件名里带 PH 的归到 Photo,带 SK 的归到 Sketch,整理完目录结构清晰,便于和 Excel 里的 Picture、Sketch 表对应。
怎么用?点击「图片合并整理」,先选「待处理图片文件夹」,再选「目标 Media 文件夹」。程序会在其下创建 Photo、Sketch 子文件夹,并移动(非复制)符合规则的 jpg 过去,支持子目录递归扫描。
注意
能做什么?把 Excel 工作簿里的多个工作表,每个转成一个独立的 .shp 文件。程序会自动识别坐标列(经度/纬度、X/Y、或中文「经度」「纬度」),用这些列生成点几何,保存为 Shapefile,方便在 ArcGIS、QGIS 等软件里做图和分析。
怎么用?点击「Excel 转 SHP」,选择 Excel 工作簿和「SHP 保存文件夹」。每个有坐标数据的工作表会导出一个 .shp,字段名会按 SHP 要求截断或重命名(如 10 字符、字母数字下划线)。坐标列优先识别 Longitude/Latitude,其次 X/Y。
注意
PyInstaller),适合在无 Python 环境的电脑上直接运行。customtkinter,所有「合库」相关按钮集中在同一行卡片区域,状态栏统一显示进度和结果。pandas 负责 Excel 读写和多表合并,openpyxl / xlrd 作为底层引擎;目录扫描用 os.walk / pathlib.Path。geopandas + shapely 完成 Excel → SHP 的转换,内部自动识别经纬度 / X/Y 列并生成 Point 几何。以「Excel 文件合并」为例,核心流程可以概括为:
from pathlib import Pathimport pandas as pdmerged_sheets: dict[str, list[pd.DataFrame]] = {}for path in Path(base_dir).rglob("*"):if path.suffix.lower() in [".xlsx", ".xls"]: sheets = read_excel_file(path) # 返回 dict[sheet_name, DataFrame]for sheet_name, df in sheets.items(): merged_sheets.setdefault(sheet_name, []).append(df)with pd.ExcelWriter(output_file, engine="openpyxl") as writer:for sheet_name, df_list in merged_sheets.items(): merged_df = pd.concat(df_list, ignore_index=True) merged_df.to_excel(writer, sheet_name=sheet_name, index=False)「Excel 转 SHP」则是在读入每个工作表后,自动找到代表经纬度或 X/Y 的列,构造 GeoDataFrame 并导出:
import geopandas as gpdfrom shapely.geometry import Pointdefexcel_sheet_to_shp(df, x_col, y_col, shp_path): geometry = [ Point(x, y)for x, y inzip(df[x_col], df[y_col]) ] gdf = gpd.GeoDataFrame(df.copy(), geometry=geometry, crs="EPSG:4326") gdf.to_file(shp_path, driver="ESRI Shapefile", encoding="utf-8")通过「一个统一界面 + 多个独立的合库子函数」,既保证了对非技术用户的易用性,也方便后续在代码层面增加新的合并/转换规则。
合库数据功能三件套:Excel 合并 → 照片归位 → Excel 转 SHP,能高效处理每周数据。可以快速把每周数据合并成一套标准成果,统一提交项目部,大幅提升工作效率。
