golang csv,xls,xlsx
要用到的包:
"golang.org/x/text/encoding/simplifiedchinese"
"golang.org/x/text/transform"
func Decode(s []byte) ([]byte, error) {
I := bytes.NewReader(s)
O := transform.NewReader(I, simplifiedchinese.GBK.NewDecoder())
d, e := ioutil.ReadAll(O)
if e != nil {
return nil, e
}
return d, nil
}
func ReadCsv(execlFileName string) {
ProBar.Exist = 0
ProBar.Sucess = 0
ProBar.Fail = 0
ProBar.Count = 0
var (
err error
sucess int64
fail int64
exist int64
errcontent string
OrderTime time.Time
tradedata []TradeData
)
cntb, err := ioutil.ReadFile(execlFileName)
ress, err := Decode(cntb)
if err != nil {
beego.Error("change is err", err.Error())
return
}
buffer := bytes.NewBuffer(ress)
bufferline := bytes.NewBuffer(ress)
var cols int
for {
s, err := bufferline.ReadString(byte('\n'))
if err != nil {
beego.Error("err", err)
break
} else {
linestr := strings.Split(s, ",")
if len(linestr) > 5 && len(linestr[1]) > 5 {
cols++
}
}
}
ProBar.TotalPro = int64((cols - 1) * 3)
var linenum int
for {
s, err := buffer.ReadString(byte('\n'))
if err != nil {
beego.Error("err", err)
break
} else {
if linenum > 0 {
linestr := strings.Split(s, ",")
if len(linestr) > 5 && len(linestr[1]) > 5 {
beego.Debug("linestr lenght:", len(linestr))
var (
trade TradeData
)
for i := 0; i < len(linestr); i++ {
str := linestr[i]
if strings.TrimSpace(str) != "" {
ProBar.CurrentPro++
// for i := 0; i < len(str); i++ {
if strings.TrimSpace(linestr[i]) != "" {
trimsrt := strings.TrimRight(strings.TrimLeft(linestr[i], `="`), `"`)
beego.Debug("str : i", i, trimsrt)
if i == 1 {
customercode, _ := strconv.ParseFloat(trimsrt, 64) //客户账号
trade.CustomerCode = int64(customercode) //客户账号
}
if i == 2 {
trade.CustomerName = trimsrt //账户名称
}
if i == 3 {
trade.SuccessOrderCode = trimsrt //成交单号
}
if i == 4 {
trade.CommodityCode = trimsrt //成交代码
}
if i == 5 {
trade.CommodityName = trimsrt //商品名称
}
if i == 6 {
switch trimsrt {
case "买":
trade.TradeType = 1 //交易类型(0-未知,1-买,2-卖)
break
case "卖":
trade.TradeType = 2 //交易类型(0-未知,1-买,2-卖)
break
default:
trade.TradeType = 0 //交易类型(0-未知,1-买,2-卖)
if trade.TradeType == 0 {
fail++
beego.Debug("Transaction type error : ", linestr[i])
errcontent = errcontent + strconv.Itoa(i) + "行买卖类型错误"
break
}
}
}
if i == 7 {
trade.OrderCode = trimsrt //委托单号
}
if i == 8 {
trancount, _ := strconv.ParseFloat(trimsrt, 64) //成交数量
trade.TranCount = int64(trancount)
}
if i == 9 {
trade.TranPrice, _ = strconv.ParseFloat(trimsrt, 64) //成交价格
}
if i == 10 {
trade.TranAmount, _ = strconv.ParseFloat(trimsrt, 64) //成交金额
}
if i == 11 {
tranuser, _ := strconv.ParseFloat(trimsrt, 64) //交易员
trade.TranUser = int64(tranuser) //交易员
}
if i == 12 {
loc, _ := time.LoadLocation("Local") //重要:获取时区
trade.TradeTime, err = time.ParseInLocation("2006-01-02 15:04:05", trimsrt, loc) //成交时间
if err != nil {
fail++
beego.Debug("TradeTime wrong time : ", trimsrt)
errcontent = errcontent + strconv.Itoa(i) + "行 时间格式错误"
break
}
}
if i == 13 {
trade.ProfitLoss, _ = strconv.ParseFloat(trimsrt, 64) //转让盈亏
}
if i == 14 {
trade.PoundAge, _ = strconv.ParseFloat(trimsrt, 64) //手续费
}
if i >= 15 && strings.TrimSpace(trimsrt) != "" {
if i == 15 {
trade.OrderPrice, _ = strconv.ParseFloat(trimsrt, 64) //订立价格
}
if i == 16 {
loc, _ := time.LoadLocation("Local")
OrderTime, err = time.ParseInLocation("2006-01-02 15:04:05", trimsrt, loc) //订立时间
trade.OrderTime = OrderTime.Unix()
if err != nil {
fail++
beego.Debug("TradeTime wrong time : ", 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("Database duplicate data : ", trade)
errcontent = errcontent + strconv.Itoa(linenum) + "行 数据库重复"
}
}
}
time.Sleep(time.Millisecond * 0)
}
linenum++
}
if sucess > 0 {
var commitfail int64
sucess, commitfail = AddTradeData(tradedata, sucess)
if commitfail > 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
}
func ReadXls(excelFileName string) (res [][]string) {
xlFile, err := xls.Open(excelFileName, "utf-8")
if err == nil {
beego.Debug(excelFileName, " file data read...................")
for i := 0; i < xlFile.NumSheets(); i++ {
sheet := xlFile.GetSheet(i)
temp := make([][]string, sheet.MaxRow+1)
for k, row := range sheet.Rows {
data := make([]string, 0)
for _, col := range row.Cols {
if uint16(len(data)) <= col.LastCol() {
data = append(data, make([]string, col.LastCol()-uint16(len(data))+1)...)
}
str := col.String(xlFile)
for i := 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)
}
return res
}
func ReadXlsx(excelFileName string) (res [][]string) {
xlFile, err := xlsx.OpenFile(excelFileName)
if err == nil {
beego.Debug(excelFileName, " file data read...................")
for _, sheet := range xlFile.Sheets {
temp := make([][]string, len(sheet.Rows))
for k, row := range sheet.Rows {
var data []string
for _, cell := range row.Cells {
data = append(data, cell.Value)
}
temp[k] = data
}
res = append(res, temp...)
}
} else {
beego.Debug(err)
}
return res
}
golang csv,xls,xlsx的更多相关文章
- Android 导入导出CSV,xls文件 .
1 . http://www.bangchui.org/read.php?tid=62 2 .http://blog.csdn.net/xinzheng_wang/article/details/77 ...
- 用NPOI实现导入导出csv、xls、xlsx数据功能
用NPOI实现导入导出csv.xls.xlsx数据功能 直接上代码 首先定义一个接口 如果需要直接操作文件的话,就自己在封装一次 然后定义csv类的具体实现 这个需要引入命名空间LumenWo ...
- java读取excel文件(.xls,xlsx,csv)
前提,maven工程通过poi读写excel文件,需要在pom.xml中配置依赖关系: 在<dependencies>中添加如下代码 <dependency> <grou ...
- phpexcel读取excel的xls xlsx csv格式
我之前写过一篇PHP读取csv文件的内容 上代码index.php <?php /** * * @author XC * */ class Excel { public $currentShee ...
- 在Linux中CSV转换成XLSX
在linux中,把csv文件转换成excel表格(xlsx或者xls) $ echo -e 'surname,name,age\nCarlo,Smith,23\nJohn,Doe,46\nJane,D ...
- 在.xls;*.xlsx类型文件的导入(可以导入多条数据)
2018-11-28 17:36:35 需要jar包:poi-3.8-201203026.jar jsp页面: <LINK href="${basePath}plugins/upl ...
- POI读取excel工具类(xls,xlsx通用)
package com.boot.utils; import java.io.File; import java.io.FileInputStream; import java.io.FileNotF ...
- py3 读入和写入csv,txt文件
import numpy as npimport pandas as pdimport time import datetimeimport csv http://pandas.pydata.org/ ...
- POI解析excel格式的文件(xls,xlsx)
先贴出所需的jar包: 1.poi-3.17-beta1.jar 2.poi-ooxml-3.17-beta1.jar 3.poi-ooxml-schemas-3.17-beta1.jar 4.com ...
随机推荐
- Java学习之路(一)
小知识: 1:1973年 贝尔实验室 => c语言 2:sun 的意思是:斯坦福大学校园网 3::1994 oak 被命名为Java JDK(Java开发工具包) 1:下载JDK 2:安装JD ...
- 如何生成excel文件作为图像识别结果
如何生成excel文件作为图像识别结果 在进行大规模图像处理的时候,如果能够以表格的形式生成结果文件,将非常的直观.这个时候,选择excel作为结果输出文件,将是合适的. 查询相关资料,有很多关于ex ...
- Unity-Animator深入系列---状态机面板深入
回到 Animator深入系列总目录 本篇不讲解所有的面板功能,只是针对一些非常用功能进行介绍. 1.状态 1.1状态简介 简单的不做介绍了,需要特别注意: 1.Paramter勾选后可以指定参数控制 ...
- ural 1113,jeep problem
题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1113 网上的解答铺天盖地.我硬是花了两天才懂了点. wiki上的解释:https://e ...
- linux内核中创建线程方法
1.头文件 #include <linux/sched.h> //wake_up_process() #include <linux/kthread.h> //kthread_ ...
- 将本地项目上传到Github
将本地项目上传到Github 转载请注明出自天外归云的博客. 前提 已经下载了Git到本地. 创建Repository 首先登陆我的Github页面,在Repositories中New一个并起Repo ...
- NET MVC1项目升级到MVC2最简单的方法
NET MVC1项目升级到MVC2最简单的方法 把MVC1项目升级到MVC2,最简单的做法如下: 新建MVC2项目 新建一个MVC2项目,把原来MVC1的项目文件全部拷贝到新建MVC2项目目录里,依照 ...
- C堆栈
C堆栈实现的表达式求值 //Luangeng #include<stdio.h> #include<conio.h> #include<windows.h> #de ...
- MTK6589下传感器框架结构和代码分析以及传感器的参数指标
MTK6589下传感器框架结构和代码分析以及传感器的参数指标 作者:韩炜彬 中国当代著名嵌入式研究专家 一. 模块框架 1)配置 路径:Alps/mediatek/config/$(pro ...
- (1)建立一个名叫Cat的类: 属性:姓名、毛色、年龄 行为:显示姓名、喊叫 (2)编写主类: 创建一个对象猫,姓名为“妮妮”,毛色为“灰色”,年龄为2岁,在屏幕上输 出该对象的毛色和年龄,让该对象调用显示姓名和喊叫两个方法。
package lianxi; public class Cat { String Name, Color; int Age; void getName() { System.out.println( ...