1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- package main
- import (
- "fmt"
- "github.com/xuri/excelize/v2"
- "log"
- "strings"
- )
- // matGovSite 匹配政府网站站点情况
- func matGovSite() {
- // 文件路径
- listFile := "政府网站清单.xlsx"
- treeFile := "中国政府机构目录树0425.xlsx"
- // 打开政府网站清单.xlsx
- listF, err := excelize.OpenFile(listFile)
- if err != nil {
- log.Fatalf("无法打开文件 %s: %v", listFile, err)
- }
- defer listF.Close()
- // 打开目录树文件
- treeF, err := excelize.OpenFile(treeFile)
- if err != nil {
- log.Fatalf("无法打开文件 %s: %v", treeFile, err)
- }
- defer treeF.Close()
- // 获取政府网站清单.xlsx Sheet1 中 D 列的所有值
- listRows, err := listF.GetRows("Sheet1")
- if err != nil {
- log.Fatalf("读取 Sheet1 出错: %v", err)
- }
- // 保存到 map 中,提高匹配速度
- matchingSet := make(map[string]struct{})
- for idx, row := range listRows {
- // Excel 列是从 0 开始的,D列是 index=3
- if len(row) > 3 {
- value := strings.TrimSpace(row[3])
- if value != "" {
- matchingSet[value] = struct{}{}
- }
- } else {
- fmt.Println(22222)
- }
- // 如果非常大数据,可以做分批或加提示
- if idx%5000 == 0 {
- fmt.Printf("已读取 %d 条数据\n", idx)
- }
- }
- fmt.Printf("共收集待匹配关键字:%d 条\n", len(matchingSet))
- // 打开目录树 Sheet
- treeSheet := "组织架构带层级"
- treeRows, err := treeF.GetRows(treeSheet)
- if err != nil {
- log.Fatalf("读取 %s 出错: %v", treeSheet, err)
- }
- // 遍历目录树的 D 列,匹配
- for i, row := range treeRows {
- if len(row) > 3 {
- orgName := strings.TrimSpace(row[3])
- if _, ok := matchingSet[orgName]; ok {
- // i 从 0 开始,对应 Excel 第 i+1 行,I 列是第9列,对应字母 "I"
- cell := fmt.Sprintf("I%d", i+1)
- err := treeF.SetCellValue(treeSheet, cell, "是")
- if err != nil {
- log.Printf("写入单元格 %s 出错: %v", cell, err)
- }
- }
- }
- }
- // 保存新文件
- outputFile := "中国政府机构目录树0425_已标记.xlsx"
- if err := treeF.SaveAs(outputFile); err != nil {
- log.Fatalf("保存新文件出错: %v", err)
- }
- fmt.Println("处理完成,已生成文件:", outputFile)
- }
|