大文件Excel数据表格处理

今天帮朋友处理一批Excel表格,大概一共不到40万行的数据,经过预处理后,要以可视化图表的形式展现,首先要解决的就是Excel表格数据的导入。一开始,打算用php语言实现,毕竟我自己有个开源的管理系统项目是用php写的,二开的话开发速度比较快。但是由于数据表过大,总是报内存溢出的错误,后来又尝试了一些c++写的php扩展,发现依然不是很理想,甚至很多已经很久不维护了,不支持我当前的运行环境。

后来,我转变了思路,打算使用golang实现excel的读取,然后导入到mysql中,php查询mysql数据库进行简单的数据处理后回调给前端,前端再用echarts做可视化展现。

以下为本次实践的日记,方便以后做类似功能的时候,可以翻阅。

go部分实现代码

用到的开源组件 github.com/360EntSecGroup-Skylar/excelize

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展示
添加新评论