Openclaw代码-Excel所有工作表导入 GDB 属性域完成import arcpyimport pandas as pdimport os# 输入 Excel 文件excel_path = r"E:\Pro\XX\soft\FARPS\FARPS\bin\Debug\net8.0-windows\code.xlsx"gdb_path = r"E:\Pro\XX\last\f4t.gdb"# 检查文件是否存在if not os.path.exists(excel_path): print(f"错误:Excel 文件不存在 - {excel_path}") exit(1)if not os.path.exists(gdb_path): print(f"错误:GDB 不存在 - {gdb_path}") exit(1)# 获取所有工作表名称xl = pd.ExcelFile(excel_path)sheet_names = xl.sheet_namesprint(f"工作表列表:{sheet_names}")print(f"共 {len(sheet_names)} 个工作表\n")# 遍历每个工作表for sheet_name in sheet_names: print(f"{'='*50}") print(f"处理工作表:{sheet_name}") print(f"{'='*50}")try:# 读取工作表df = pd.read_excel(excel_path, sheet_name=sheet_name) print(f"列名:{df.columns.tolist()}") print(f"行数:{len(df)}")if len(df.columns) < 2: print(f"跳过:至少需要 2 列(代码和名称)")continue# 假设第 1 列是代码,第 2 列是名称code_col = df.columns[0] name_col = df.columns[1] print(f"代码列:{code_col}, 名称列:{name_col}")# 创建属性域名称(使用工作表名)domain_name = sheet_name# 先删除已存在的同名域existing_domains = [dom.name for dom in arcpy.da.ListDomains(gdb_path)]if domain_name in existing_domains: print(f"删除已存在的域:{domain_name}") arcpy.management.DeleteDomain(gdb_path, domain_name)# 创建新的属性域arcpy.management.CreateDomain(gdb_path, domain_name, f"{sheet_name}代码域", "TEXT", "CODED") print(f"属性域创建成功")# 添加代码值print("添加代码值...") count = 0for idx, row in df.iterrows(): code = str(row[code_col]).strip() name = str(row[name_col]).strip()# 跳过空行if not code or code == 'nan' or not name or name == 'nan':continuearcpy.management.AddCodedValueToDomain(gdb_path, domain_name, code, name) count += 1print(f"完成!共添加 {count} 个代码值") print(f"属性域:{gdb_path}\\{domain_name}\n")except Exception as e: print(f"错误:{e}")import traceback traceback.print_exc() print()print(f"\n{'='*50}")print(f"全部完成!")print(f"{'='*50}")# 列出所有属性域print("\nGDB 中的所有属性域:")for dom in arcpy.da.ListDomains(gdb_path): print(f" - {dom.name} ({dom.type})")