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

104 lines
3.0 KiB
Markdown

```go
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
}
}
}
```