乐于分享
好东西不私藏

Openclaw代码-Excel所有工作表导入 GDB 属性域完成

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})")