govement.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package main
  2. import (
  3. "fmt"
  4. "github.com/xuri/excelize/v2"
  5. "log"
  6. "strings"
  7. )
  8. // matGovSite 匹配政府网站站点情况
  9. func matGovSite() {
  10. // 文件路径
  11. listFile := "政府网站清单.xlsx"
  12. treeFile := "中国政府机构目录树0425.xlsx"
  13. // 打开政府网站清单.xlsx
  14. listF, err := excelize.OpenFile(listFile)
  15. if err != nil {
  16. log.Fatalf("无法打开文件 %s: %v", listFile, err)
  17. }
  18. defer listF.Close()
  19. // 打开目录树文件
  20. treeF, err := excelize.OpenFile(treeFile)
  21. if err != nil {
  22. log.Fatalf("无法打开文件 %s: %v", treeFile, err)
  23. }
  24. defer treeF.Close()
  25. // 获取政府网站清单.xlsx Sheet1 中 D 列的所有值
  26. listRows, err := listF.GetRows("Sheet1")
  27. if err != nil {
  28. log.Fatalf("读取 Sheet1 出错: %v", err)
  29. }
  30. // 保存到 map 中,提高匹配速度
  31. matchingSet := make(map[string]struct{})
  32. for idx, row := range listRows {
  33. // Excel 列是从 0 开始的,D列是 index=3
  34. if len(row) > 3 {
  35. value := strings.TrimSpace(row[3])
  36. if value != "" {
  37. matchingSet[value] = struct{}{}
  38. }
  39. } else {
  40. fmt.Println(22222)
  41. }
  42. // 如果非常大数据,可以做分批或加提示
  43. if idx%5000 == 0 {
  44. fmt.Printf("已读取 %d 条数据\n", idx)
  45. }
  46. }
  47. fmt.Printf("共收集待匹配关键字:%d 条\n", len(matchingSet))
  48. // 打开目录树 Sheet
  49. treeSheet := "组织架构带层级"
  50. treeRows, err := treeF.GetRows(treeSheet)
  51. if err != nil {
  52. log.Fatalf("读取 %s 出错: %v", treeSheet, err)
  53. }
  54. // 遍历目录树的 D 列,匹配
  55. for i, row := range treeRows {
  56. if len(row) > 3 {
  57. orgName := strings.TrimSpace(row[3])
  58. if _, ok := matchingSet[orgName]; ok {
  59. // i 从 0 开始,对应 Excel 第 i+1 行,I 列是第9列,对应字母 "I"
  60. cell := fmt.Sprintf("I%d", i+1)
  61. err := treeF.SetCellValue(treeSheet, cell, "是")
  62. if err != nil {
  63. log.Printf("写入单元格 %s 出错: %v", cell, err)
  64. }
  65. }
  66. }
  67. }
  68. // 保存新文件
  69. outputFile := "中国政府机构目录树0425_已标记.xlsx"
  70. if err := treeF.SaveAs(outputFile); err != nil {
  71. log.Fatalf("保存新文件出错: %v", err)
  72. }
  73. fmt.Println("处理完成,已生成文件:", outputFile)
  74. }