今天帮朋友处理一批Excel表格,大概一共不到40万行的数据,经过预处理后,要以可视化图表的形式展现,首先要解决的就是Excel表格数据的导入。一开始,打算用php语言实现,毕竟我自己有个开源的管理系统项目是用php写的,二开的话开发速度比较快。但是由于数据表过大,总是报内存溢出的错误,后来又尝试了一些c++写的php扩展,发现依然不是很理想,甚至很多已经很久不维护了,不支持我当前的运行环境。
后来,我转变了思路,打算使用golang实现excel的读取,然后导入到mysql中,php查询mysql数据库进行简单的数据处理后回调给前端,前端再用echarts做可视化展现。
以下为本次实践的日记,方便以后做类似功能的时候,可以翻阅。
go部分实现代码
Excel读取
-
excel读取器
xlsx, err := excelize.OpenFile(fileName)
-
获取sheet name
sheetName := xlsx.GetSheetName(1)
-
获取所有行
rows := xlsx.GetRows(sheetName)
-
遍历
for index, row := range rows { if index != 0 {// 跳过表头 for index, colCell := range row { fmt.Print(colCell, "\t") } fmt.Println() } }
xorm数据库操作
var db *xorm.Engine
func init() {
var err error
db, err = xorm.NewEngine("mysql", "{username}:{password}@tcp({host})/{database}")
if err != nil {
panic(err)
}
tbMapper := core.NewPrefixMapper(core.SnakeMapper{}, "")
db.SetTableMapper(tbMapper)
}
func GetDB() *xorm.Engine {
return db
}
其它操作
- mysql建立索引,加快查询速度,注意字段字符集为utf8
- php使用 tpr-db 进行数据库查询,并且它有数据库迁移备份的功能,可以把数据导出为sql文件,并重新导入到任意mysql实例中。
- php端编写业务接口
- 前端异步请求php接口获取不同年份的数据,并使用echarts展示