首页 文章资讯内容详情

golang csv,xls,xlsx

2026-06-01 4 花语

本文内容纲要:

要用到的包:

"golang.org/x/text/encoding/simplifiedchinese"

"golang.org/x/text/transform"

funcDecode(s[]byte)([]byte,error){

I:=bytes.NewReader(s)

O:=transform.NewReader(I,simplifiedchinese.GBK.NewDecoder())

d,e:=ioutil.ReadAll(O)

ife!=nil{

returnnil,e

}

returnd,nil

}

funcReadCsv(execlFileNamestring){

ProBar.Exist=0

ProBar.Sucess=0

ProBar.Fail=0

ProBar.Count=0

var(

errerror

sucessint64

failint64

existint64

errcontentstring

OrderTimetime.Time

tradedata[]TradeData

)

cntb,err:=ioutil.ReadFile(execlFileName)

ress,err:=Decode(cntb)

iferr!=nil{

beego.Error("changeiserr",err.Error())

return

}

buffer:=bytes.NewBuffer(ress)

bufferline:=bytes.NewBuffer(ress)

varcolsint

for{

s,err:=bufferline.ReadString(byte(\n))

iferr!=nil{

beego.Error("err",err)

break

}else{

linestr:=strings.Split(s,",")

iflen(linestr)>5&&len(linestr[1])>5{

cols++

}

}

}

ProBar.TotalPro=int64((cols-1)*3)

varlinenumint

for{

s,err:=buffer.ReadString(byte(\n))

iferr!=nil{

beego.Error("err",err)

break

}else{

iflinenum>0{

linestr:=strings.Split(s,",")

iflen(linestr)>5&&len(linestr[1])>5{

beego.Debug("linestrlenght:",len(linestr))

var(

tradeTradeData

)

fori:=0;i

str:=linestr[i]

ifstrings.TrimSpace(str)!=""{

ProBar.CurrentPro++

//fori:=0;i

ifstrings.TrimSpace(linestr[i])!=""{

trimsrt:=strings.TrimRight(strings.TrimLeft(linestr[i],`="`),`"`)

beego.Debug("str:i",i,trimsrt)

ifi==1{

customercode,_:=strconv.ParseFloat(trimsrt,64)//客户账号

trade.CustomerCode=int64(customercode)//客户账号

}

ifi==2{

trade.CustomerName=trimsrt//账户名称

}

ifi==3{

trade.SuccessOrderCode=trimsrt//成交单号

}

ifi==4{

trade.CommodityCode=trimsrt//成交代码

}

ifi==5{

trade.CommodityName=trimsrt//商品名称

}

ifi==6{

switchtrimsrt{

case"买":

trade.TradeType=1//交易类型(0-未知,1-买,2-卖)

break

case"卖":

trade.TradeType=2//交易类型(0-未知,1-买,2-卖)

break

default:

trade.TradeType=0//交易类型(0-未知,1-买,2-卖)

iftrade.TradeType==0{

fail++

beego.Debug("Transactiontypeerror:",linestr[i])

errcontent=errcontent+strconv.Itoa(i)+"行买卖类型错误"

break

}

}

}

ifi==7{

trade.OrderCode=trimsrt//委托单号

}

ifi==8{

trancount,_:=strconv.ParseFloat(trimsrt,64)//成交数量

trade.TranCount=int64(trancount)

}

ifi==9{

trade.TranPrice,_=strconv.ParseFloat(trimsrt,64)//成交价格

}

ifi==10{

trade.TranAmount,_=strconv.ParseFloat(trimsrt,64)//成交金额

}

ifi==11{

tranuser,_:=strconv.ParseFloat(trimsrt,64)//交易员

trade.TranUser=int64(tranuser)//交易员

}

ifi==12{

loc,_:=time.LoadLocation("Local")//重要:获取时区

trade.TradeTime,err=time.ParseInLocation("2006-01-0215:04:05",trimsrt,loc)//成交时间

iferr!=nil{

fail++

beego.Debug("TradeTimewrongtime:",trimsrt)

errcontent=errcontent+strconv.Itoa(i)+"行时间格式错误"

break

}

}

ifi==13{

trade.ProfitLoss,_=strconv.ParseFloat(trimsrt,64)//转让盈亏

}

ifi==14{

trade.PoundAge,_=strconv.ParseFloat(trimsrt,64)//手续费

}

ifi>=15&&strings.TrimSpace(trimsrt)!=""{

ifi==15{

trade.OrderPrice,_=strconv.ParseFloat(trimsrt,64)//订立价格

}

ifi==16{

loc,_:=time.LoadLocation("Local")

OrderTime,err=time.ParseInLocation("2006-01-0215:04:05",trimsrt,loc)//订立时间

trade.OrderTime=OrderTime.Unix()

iferr!=nil{

fail++

beego.Debug("TradeTimewrongtime:",trimsrt)

errcontent=errcontent+strconv.Itoa(i)+"行时间格式错误"

break

}

}

}

}

}

}

beego.Debug("trade",linenum,trade)

checktime:=trade.TradeTime.Format("2006-01-02")//登入的时间

IsExist:=CheckIsTradeData(checktime)

if!IsExist{

tradedata=append(tradedata,trade)

sucess++

}else{

exist++

beego.Debug("Databaseduplicatedata:",trade)

errcontent=errcontent+strconv.Itoa(linenum)+"行数据库重复"

}

}

}

time.Sleep(time.Millisecond*0)

}

linenum++

}

ifsucess>0{

varcommitfailint64

sucess,commitfail=AddTradeData(tradedata,sucess)

ifcommitfail>0{

fail=0

sucess=0

commitfail=int64(cols-1)

}

fail+=commitfail

os.Remove(execlFileName)//删除文件

}

ProBar.Sucess=sucess

ProBar.Fail=fail

ProBar.Exist=exist

ProBar.Count=int64(cols-1)

ProBar.ErrorContent=errcontent

ProBar.Status=false

ProBar.CurrentPro=ProBar.TotalPro

}

funcReadXls(excelFileNamestring)(res[][]string){

xlFile,err:=xls.Open(excelFileName,"utf-8")

iferr==nil{

beego.Debug(excelFileName,"filedataread...................")

fori:=0;i

sheet:=xlFile.GetSheet(i)

temp:=make([][]string,sheet.MaxRow+1)

fork,row:=rangesheet.Rows{

data:=make([]string,0)

for_,col:=rangerow.Cols{

ifuint16(len(data))<=col.LastCol(){

data=append(data,make([]string,col.LastCol()-uint16(len(data))+1)...)

}

str:=col.String(xlFile)

fori:=uint16(0);i

data[col.FirstCol()+i]=str[i]

}

}

temp[k]=data

}

res=append(res,temp...)

}

}else{

beego.Debug(err)

}

returnres

}

funcReadXlsx(excelFileNamestring)(res[][]string){

xlFile,err:=xlsx.OpenFile(excelFileName)

iferr==nil{

beego.Debug(excelFileName,"filedataread...................")

for_,sheet:=rangexlFile.Sheets{

temp:=make([][]string,len(sheet.Rows))

fork,row:=rangesheet.Rows{

vardata[]string

for_,cell:=rangerow.Cells{

data=append(data,cell.Value)

}

temp[k]=data

}

res=append(res,temp...)

}

}else{

beego.Debug(err)

}

returnres

}

本文内容总结:

原文链接:https://www.cnblogs.com/zhangym/p/6141440.html