Files
notes/resource/脚本/轮询备案号(GO).md
2026-03-01 01:43:46 +08:00

3.0 KiB

package main

import (
	"fmt"
	"log"
	"os"

	"github.comcom/xuri/excelize/v2"
)

// ensureTemplateExists 检查模板文件是否存在,如果不存在则创建一个。
func ensureTemplateExists(filename string, sheetName string, header string) {
	// 检查文件是否存在
	if _, err := os.Stat(filename); os.IsNotExist(err) {
		fmt.Printf("模板文件 '%s' 不存在,正在为您创建...\n", filename)
		f := excelize.NewFile()
		// 创建一个工作表
		_, err := f.NewSheet(sheetName)
		if err != nil {
			log.Fatalf("创建工作表失败: %v", err)
		}
		// 设置表头
		f.SetCellValue(sheetName, "A1", header)
		// 删除默认的 "Sheet1" (如果它不是我们想要的那个)
        if sheetName != "Sheet1" {
		    f.DeleteSheet("Sheet1")
        }
		// 保存文件
		if err := f.SaveAs(filename); err != nil {
			log.Fatalf("保存模板文件失败: %v", err)
		}
		fmt.Printf("模板文件 '%s' 创建成功。\n", filename)
	}
}

func main() {
	// --- 配置 ---
	const (
		templateFile = "批量删除域名模板.xlsx" // 根据您的模板文件名修改
		outputFile   = "output.xlsx"         // 最终生成的输出文件名
		sheetName    = "Sheet1"              // Excel 工作表的名称,通常是 "Sheet1"
		headerText   = "域名"                 // 图片中显示的表头
		targetSize   = 6 * 1024 * 1024       // 目标文件大小: 6 MB
		batchSize    = 5000                  // 每次写入的域名数量(一个批次)
	)

	// 确保模板文件存在
	ensureTemplateExists(templateFile, sheetName, headerText)

	// 打开模板文件
	f, err := excelize.OpenFile(templateFile)
	if err != nil {
		log.Fatalf("打开模板文件失败: %v", err)
	}
	defer f.Close()

	// 初始化计数器
	domainCounter := 1
	currentRow := 2 // 从第二行开始写入,因为第一行是表头

	fmt.Println("开始生成 Excel 文件,目标大小: 6 MB...")

	for {
		// 在内存中批量添加域名
		for i := 0; i < batchSize; i++ {
			cell := fmt.Sprintf("A%d", currentRow)
			domain := fmt.Sprintf("test%d.com", domainCounter)
			f.SetCellValue(sheetName, cell, domain)
			currentRow++
			domainCounter++
		}
		
		// 保存文件到输出文件
		if err := f.SaveAs(outputFile); err != nil {
			log.Fatalf("保存文件失败: %v", err)
		}

		// 获取文件信息以检查大小
		fileInfo, err := os.Stat(outputFile)
		if err != nil {
			log.Fatalf("获取文件状态失败: %v", err)
		}

		currentSize := fileInfo.Size()
		currentSizeMB := float64(currentSize) / (1024 * 1024)

		fmt.Printf("已写入 %d 个域名,当前文件大小: %.2f MB\n", domainCounter-1, currentSizeMB)

		// 检查是否达到目标大小
		if currentSize >= targetSize {
			fmt.Println("\n-----------------------------------------")
			fmt.Printf("任务完成!\n")
			fmt.Printf("成功生成文件 '%s'。\n", outputFile)
			fmt.Printf("最终文件大小: %.2f MB\n", currentSizeMB)
			fmt.Printf("共写入 %d 个域名。\n", domainCounter-1)
			fmt.Println("-----------------------------------------")
			break
		}
	}
}