首页 > 其他分享 >Golang把文件写到excel

Golang把文件写到excel

时间:2023-11-16 11:55:07浏览次数:31  
标签:return nil err fmt excel fileName Golang sheetName 写到

最近有个需求是把看广告的日志转成excel

package main

import (
	"bufio"
	"encoding/json"
	"flag"
	"fmt"
	"github.com/xuri/excelize/v2"
	"os"
	"time"
)

// Ad 广告
type Ad struct {
	OpenId string `json:"OpenId"`
	Uid    int64  `json:"id"`
	Time   string `json:"time"`
}

func textToExcel2(textFile, excelFile, fileName string) error {
	// 打开文本文件
	file, err := os.Open(textFile)
	if err != nil {
		return err
	}
	defer file.Close()

	// 创建新的Excel文件
	f := excelize.NewFile()
	sheetName := "Sheet1"
	// 写入表头内容
	_ = f.SetCellValue(sheetName, "A1", "openId")
	_ = f.SetCellValue(sheetName, "B1", "用户id")
	_ = f.SetCellValue(sheetName, "C1", "看广告时间")
	// 逐行读取文本文件并将内容写入Excel文件
	scanner := bufio.NewScanner(file)
	rowIndex := 2
	for scanner.Scan() {
		line := scanner.Text()
		var ad Ad
		if err := json.Unmarshal([]byte(line), &ad); err != nil {
			fmt.Println("Error decoding JSON:", err)
			continue
		}
		_ = f.SetCellValue(sheetName, fmt.Sprintf("A%d", rowIndex), ad.OpenId)
		_ = f.SetCellValue(sheetName, fmt.Sprintf("B%d", rowIndex), ad.Uid)
		_ = f.SetCellValue(sheetName, fmt.Sprintf("C%d", rowIndex), ad.Time)
		rowIndex++
	}

	// 检查是否有读取文本文件时的错误
	if err := scanner.Err(); err != nil {
		return err
	}

	excelFileEnd := excelFile + getPreDay() + "-" + fileName + ".xlsx"
	// 保存Excel文件
	if err := f.SaveAs(excelFileEnd); err != nil {
		return err
	}

	return nil
}

func main() {
	// 替换以下文件路径为实际的文本文件路径和输出Excel文件路径
	path := flag.String("path", "/usr/share/nginx/html/server-api/runtime/logs/", "请输入日志的绝对路径")
	outPath := flag.String("outPath", "/usr/share/nginx/html/server-api/runtime/logs/", "请输入生成excel的绝对路径")
	fileName := flag.String("fileName", "emp", "请输入生成文件的名字")
	name := flag.String("name", "ad", "请输入日志的前缀")
	flag.Parse()
	//日志的绝对路径
	textFilePath := *path + *name + "-" + getPreDay() + ".log"
	//生成的excel的路径
	if _, err := os.Stat(*outPath); os.IsNotExist(err) {
		// 文件夹不存在,创建文件夹
		err := os.MkdirAll(*outPath, 0755)
		if err != nil {
			fmt.Println("创建文件夹失败:", err)
		} else {
			fmt.Println("文件夹创建成功!")
		}
	}
	err := textToExcel2(textFilePath, *outPath, *fileName)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	fmt.Println("数据写入到Excel成功")
}

// 获取前一天日期
func getPreDay() string {
	timeNow := time.Now().Add(-24 * time.Hour)
	return timeNow.Format("2006-01-02")
}

go run main.go -fileName="游戏名字" -path=/usr/share/nginx/html/xxx/runtime/logs/ -outPath=/usr/share/nginx/html/excel/游戏名字/

标签:return,nil,err,fmt,excel,fileName,Golang,sheetName,写到
From: https://www.cnblogs.com/qcy-blog/p/17835923.html

相关文章

  • 使用golang对服务器简单监控
    packagemainimport( "fmt" "github.com/shirou/gopsutil/cpu" "github.com/shirou/gopsutil/disk" "github.com/shirou/gopsutil/host" "github.com/shirou/gopsutil/load" "github.com/shirou/gopsutil/me......
  • Python读取pdf、word、excel、ppt、csv和txt文件提取所有文本
    前言本文对使用python读取pdf、word、excel、ppt、csv、txt等常用文件,并提取所有文本的方法进行分享和使用总结。可以读取不同文件的库和方法当然不止下面分享的这些,本文的代码主要目标都是:方便提取文件中所有文本的实现方式。这些库的更多使用方法,请到官方文档中查阅。读取PD......
  • 做数据分析,我们需要懂多少excel知识?
    数据分析所需的Excel知识详解在进行数据分析工作时,Excel是一个非常常用且强大的数据处理工具。以下是数据分析中常用的Excel知识点和技巧的详细描述。1.基本操作在使用Excel进行数据分析之前,首先需要掌握Excel的基本操作,包括单元格的选择、复制粘贴、插入行列、删除等。这些......
  • 打造基于Excel表格数据驱动系统
    策划喜欢用Excel,里面有很多计算公式,非常方便,策划写好的数据,程序手写到代码里面,每次修改比较麻烦,所以我们做一个模块,能自动将Excel数据转成程序能直接使用的数据。每次更改数据后,程序很快就能使用起来。1:定义一个Excel的格式让策划和程序沟通    程序要解析Excel,......
  • 从一道题来看看golang中的slice作为参数时的现象
    1、题目最近看群友在群里问一道关于golang中slice的题,题目如下:packagemainimport"fmt"funcmain(){ k:=[]int{1,2,3,4} k=append(k,5,6) fmt.Printf("k-->value:%v,add:%p,cap:%d\n",k,k,cap(k)) ap(k) fmt.Printf("k-->value......
  • windows系统使用终端和goland编辑器打包golang程序方法
    上一篇文章说了,windows系统,如何使用goland编辑器打包exe和linux程序,这篇文章再补充一下,使用终端和goland编辑器打包的对比情况。这里的终端可以是,cmd、WindowsPowerShell、MINGw64这里,我使用goland编辑器里面的Terminal,也就是WindowsPowerShelll来操作1、goland编辑器打......
  • Excel文件导入
    前端<divclass="panel-body"><spanclass="glyphiconglyphicon-th-list"aria-hidden="true"></span>批量上传</div>后端defdepart_multi(request): '''导入Excel文件''......
  • python tkinter treeview 仿 excel表格
    代码:fromtkinterimportttkfromtkinterimport*root=Tk()#初始框的声明columns=("姓名","IP地址")treeview=ttk.Treeview(root,height=18,show="headings",columns=columns)#表格treeview.column("姓名",width=100,a......
  • 【golang】Golang 哈希码 hashcode 输入一个字符串,得到一个唯一标识码
    如何输入一个字符串,得到一个唯一的hashcode?例子如下:packagemainimport("fmt""hash/crc32")//Stringhashesastringtoauniquehashcode.////crc32returnsauint32,butforouruseweneed//andnonnegativeinteger.Herewec......
  • golang slice
    slice是golang的切片,动态数组底层结构//runtime/slice.gotypeslicestruct{ arrayunsafe.Pointer//底层数组 lenint capint}golang的slice底层是一个数组,也就是可以通过&s[0]来获取底层数组的地址,len记录的当前,cap记录的是底层数组的大小也就是当前......