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