104 lines
3.0 KiB
Markdown
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
|
|
}
|
|
}
|
|
}
|
|
|
|
```
|