go 读取xsl并写入xlsx

package main

import (
	"fmt"
	"github.com/extrame/xls"
	"github.com/tealeg/xlsx"
	"log"
	"os"
	"strconv"
)

var xlsTitle = []string{"商品编码", "商品库存", "状态", "说明"}

type Goods struct {
	GoodsNo  string `json:"goods_no"`
	StockNum int    `json:"stock_num"`
}

func main() {
	pathFile := "./test.xls"
	xlsFiile, err := xls.Open(pathFile, "utf-8")
	if err != nil {
		panic(err)
	}
	var goods []Goods
	sheet1 := xlsFiile.GetSheet(0)
	if sheet1 != nil {
		fmt.Println(sheet1.MaxRow, sheet1.Name)
		for i := 1; i <= int(sheet1.MaxRow); i++ {
			if sheet1.Row(i) == nil {
				continue
			}
			row := sheet1.Row(i)
			var good Goods
			for index := row.FirstCol(); index < row.LastCol(); index++ {
				if index == 1 {
					good.GoodsNo = row.Col(index)
				}
				if index == 2 {
					good.StockNum, _ = strconv.Atoi(row.Col(index))
				}
			}
			goods = append(goods, good)
		}
	}
	xlsxFile := getXlsxFile("./test.xlsx")
	xlsxSheet := xlsxFile.Sheets[0]
	for _, good := range goods {
		var dataInsert = []string{}
		dataInsert = append(dataInsert, good.GoodsNo)
		dataInsert = append(dataInsert, strconv.Itoa(good.StockNum))
		dataInsert = append(dataInsert, "成功")
		dataInsert = append(dataInsert, "")
		insertRow(xlsxSheet, &dataInsert)
	}
	err = xlsxFile.Save("./test.xlsx")
	if err != nil {
		panic(err)
	}
}
func getXlsxFile(filename string) *xlsx.File {
	var file *xlsx.File
	if _, err := os.Stat(filename); err == nil {
		file, err = xlsx.OpenFile(filename)
		if err != nil {
			log.Fatal("open file----", err)
		}
	} else {
		file = xlsx.NewFile()
		sheet, err := file.AddSheet("sheet1")
		if err != nil {
			log.Fatal("new file", err)
		}
		insertRow(sheet, &xlsTitle)
	}
	return file
}
func insertRow(sheet *xlsx.Sheet, rowDataPtr *[]string) {
	row := sheet.AddRow()
	rowData := *rowDataPtr
	for _, v := range rowData {
		cell := row.AddCell()
		cell.Value = v
	}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值