golang csv,xls,xlsx
本文内容纲要:
要用到的包:
"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<len(linestr);i++{
str:=linestr[i]
ifstrings.TrimSpace(str)!=""{
ProBar.CurrentPro++
//fori:=0;i<len(str);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<xlFile.NumSheets();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<col.LastCol()-col.FirstCol()+1;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