知识点:
读取大数据量的Excel文件
本课内容:
大家好,欢迎来到谷雨课堂,
本节我们来读取Excel文件,
Excel文件是处理大量数据较为方便的数据格式,
Excel可以容纳大量的数据,
通常可以达到数万条数据
其中Excel的扩展有两种,xls和xlsx
今天我们进行文件内容的读取
在读取过程中,
我们仅需要各单元格的内容,
所以单元格里的格式通常都是被忽略掉的,
也就是说把Excel当成简易的数据库使用了,
在Excel的第一行,通常是列名(字段名)
在这个程序里,
谷雨老师写了一个函数,
输入Excel文件的路径,
同时兼容xls和xlsx两种格式,
输出一个数组,
包括文件所有内容(仅读取第一行工作表)
其中第一行的内容就当作列名,
func ReadExcel(filename string) []map[string]string
在谷雨老师的笔记本上
读取1万行数据,每行3列,
约2秒就可以完成,
速度还是非常不错的。
以下是全部代码:
package main
import (
"fmt"
"time"
"github.com/360EntSecGroup-Skylar/excelize"
)
//读取Excel文件,返回行列数组
func ReadExcel(filename string) []map[string]string {
ret := []map[string]string{}
f, err := excelize.OpenFile(filename)
if err != nil {
fmt.Println("读取Excel文件出错", err.Error())
return ret
}
sheets := f.GetSheetMap()
fmt.Println(sheets)
sheet1 := sheets[1]
fmt.Println("第一个工作表:", sheet1)
rows := f.GetRows(sheet1)
cols := []string{}
for i, row := range rows {
if i == 0 {
for _, colCell := range row {
cols = append(cols, colCell)
}
fmt.Println("列信息", cols)
} else {
theRow := map[string]string{}
for j, colCell := range row {
//log.Println(fmt.Sprintf("%d.%d=%s", i, j, colCell))
k := cols[j]
theRow[k] = colCell
}
ret = append(ret, theRow)
}
}
return ret
}
func main() {
//记录开始执行时间
start := time.Now()
//读取一个1万行数据的excel文件
arr := ReadExcel("demo10k.xlsx")
//计算总用时
elapsed := time.Since(start)
//输出信息
fmt.Println("记录数:", len(arr))
fmt.Println("用时:", elapsed)
}
完整的源代码可以登录【华纳网】下载。
https://www.worldwarner.com/
免责声明:本文仅代表作者个人观点,与华纳网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。