https://blog.csdn.net/qq_36269019/article/details/107185349
https://www.jb51.net/article/114422.htm
csv格式的读取
在这里插入代码片
Excel
const (
MAX_SIZE = 1024 * 1024 * 2
)
func AddConfigByExcel(ctx *gin.Context) {
userId := ctx.Request.Header.Get(constant.X_USER_ID)
companyId := ctx.Request.Header.Get(constant.X_COMPANY_ID)
account := ctx.Request.Header.Get(constant.SESSION_ACCOUNT)
//权限的判断
if !GetAuth(account, userId, companyId) {
logger.Error(account, ":GroupConfigChange没有权限")
util.Response(ctx, 500, "没有权限", nil)
return
}
//读取第一fileName的文件
fileHeader, err := ctx.FormFile("file")
if err != nil {
logger.Error("文件格式错误"+err.Error())
util.Response(ctx, 500, "文件格式错误"+err.Error(), nil)
return
}
if fileHeader.Size > MAX_SIZE {
logger.Error("文件大小超过2M")
util.Response(ctx, 500, "文件大小超过2M", nil)
return
}
file, err := fileHeader.Open()
if err != nil {
logger.Error("文件格式错误"+err.Error())
util.Response(ctx, 500, "文件格式错误"+err.Error(), nil)
return
}
defer file.Close()
xlsx, err := excelize.OpenReader(bufio.NewReader(file))
if err!=nil {
logger.Error("excelize.OpenReader false:",err)
util.Response(ctx, 500, "文件格式错误"+err.Error(), nil)
return
}
cell := xlsx.GetCellValue("Sheet1", "B1")
fmt.Println(cell)
// Get sheet index.
index := xlsx.GetSheetIndex("Sheet1")
// Get all the rows in a sheet.
rows := xlsx.GetRows("sheet" + strconv.Itoa(index))
//rows := xlsx.GetRows("Sheet1")
for indexRow, row := range rows {
fmt.Println(indexRow)
for indexFeild, colCell := range row {
fmt.Println(indexFeild,":",colCell)
}
}
util.Response(ctx, 200, "ok", nil)
return
}
1,gin框架读取文件流
https://blog.csdn.net/aaaadong/article/details/90177038
//读取第一fileName的文件
file, err := ctx.FormFile("fileName")
//根据文件地址写入流(下载操作)
ctx.File("filePath")
//根据文件地址写入流,客户端以给定名下载文件
ctx.FileAttachment("filePath","fileName")
//根据文件地址写入流,客户端以文件格式为http.FileSytem下载
ctx.FileFromFS("filePath","fileSystem")
//SaveUploadedFile uploads the form file to specific dst.
ctx.SaveUploadedFile("fileHeader","dst")
2,golang读取excel
3,golang导出Excel格式文件
https://blog.csdn.net/qq_22999737/article/details/103387835
//创建文件对象
file := excelize.NewFile()
index := file.NewSheet("sheet的名称")
//删除Sheet
file.DeleteSheet("Sheet的名称")
https://studygolang.com/articles/9623
xlsx := excelize.CreateFile()
// Create a new sheet.
xlsx.NewSheet(2, "Sheet2")
// Set value of a cell.
xlsx.SetCellValue("Sheet2", "A2", "Hello world.")
xlsx.SetCellValue("Sheet1", "B2", 100)
// Set active sheet of the workbook.
xlsx.SetActiveSheet(2)
// Save xlsx file by the given path.
err := xlsx.WriteTo("/tmp/Workbook.xlsx")
if err != nil {
fmt.Println(err)
os.Exit(1)
}
实战
//创建Excel文件
xlsx := excelize.NewFile()
sheetIndex := xlsx.NewSheet("Sheet1")
logger.Info("返回的是下标,下标从1开始:sheetIndex=",sheetIndex)
xlsx.SetCellValue("Sheet1", "B2", "测试")
//sheetIndex := xlsx.GetSheetIndex("Sheet1")
//logger.Info("sheetIndex:",sheetIndex)
xlsx.SetActiveSheet(sheetIndex)
//修改为流程名,月份是因为的月份,所以要转成int
t := time.Now()
//tstring := strconv.Itoa(t.Year()) + strconv.Itoa(int(t.Month()))+ strconv.Itoa(t.Day())
tstring := time.Now().Format(constant.FORMAT_DAY)
excelName := in.AppId + "_Process_" + tstring + ".xlsx"
responseWriter := ctx.Writer
responseWriter.Header().Add("Content-Type", "application/octet-stream")
responseWriter.Header().Add("Content-Disposition", "attachment; filename=\""+excelName+"\"")
to, err := xlsx.WriteTo(responseWriter)
logger.Info(account,":GroupProcessListDownload:写入的字节数:",to)
//_, err = io.Copy(responseWriter, xl)
if err != nil {
logger.Error(user.Account, ":转换流异常:", err.Error())
ctx.Status(http.StatusInternalServerError)
responseWriter.Flush()
}
ctx.Status(http.StatusOK)
responseWriter.Flush()