非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

Go言語でExcelファイルを処理するのが超簡単だった

      2017/06/23

何かとGo言語をdisっている当ブログですが、Excelファイルを処理するのがめちゃくちゃ楽でした(笑)のでシェア。

designed by Renée French.

まずはライブラリをインストール

ExcelをGo言語で扱えるようにするためには、tealeg/xlsxというライブラリが必要になります。コマンドプロンプトから以下のように打てばインストールでします。※GOPATHがあらかじめ設定されていることが前提です。

go get github.com/tealeg/xlsx
 

 

Go言語の特徴として、ライブラリを簡単にインストールできることなんですよね。これがC#だとVisual Studio上じゃないと厳しいんです。

広告

Excelファイルを用意

このブログでよく登場する住所録をExcelファイルで用意しました。

 

全部で12万行以上のデータがあります。これをGo言語で扱います。

 

ファイルサイズが3.5MBとそこそこ大きいファイルです。

 

ソースコードと実行結果

Go言語のソースコードは以下の通りです。ときどきtime.Now()を使って処理時間の計測をやっています。

package main

import (
  "fmt"
  "github.com/tealeg/xlsx"
  "time"
)

func main() {
  dt1 := time.Now()
  excel, err1 := xlsx.OpenFile("address.xlsx")

  dt2 := time.Now()

  if err1 != nil {
    fmt.Printf(err1.Error())
  }

  sheet1 := excel.Sheets[0]
  fmt.Println(sheet1.Name)
  //10000行目のデータを表示
  fmt.Println(sheet1.Rows[10000].Cells[0].Value +" : "+ sheet1.Rows[10000].Cells[1].Value +" : "+ sheet1.Rows[10000].Cells[2].Value)

  dt3 := time.Now()

  fmt.Println(dt2.Sub(dt1)) //Excelファイルの読込時間
  fmt.Println(dt3.Sub(dt2)) //Excelデータの処理時間
}
 

 

実行した結果はこの通り。Excelファイルを読み込んで指定した行のデータを表示してくれました。やはり3.5MBものExcelファイルの読み込みには時間がかかり、17秒かかっています。

 

解説

ソースコードの解説です。

まず、Excelファイルを読み込みます。

excel, err1 := xlsx.OpenFile("address.xlsx")
 

 

次に1つめのシートを取得します。

sheet1 := excel.Sheets[0]
 

 

で、コンソール上にシート名と10000行目のデータを表示させています。いたって簡単。

fmt.Println(sheet1.Name)
fmt.Println(sheet1.Rows[10000].Cells[0].Value +" : "+ sheet1.Rows[10000].Cells[1].Value +" : "+ sheet1.Rows[10000].Cells[2].Value)
 

 

非常に簡単に扱えますね。もちろん処理中にExcelファイルが立ち上がるようなことはありません。

これを使ってなんか会社の業務を自動化してみようかと画策中です。膨大な行数の中から調べること多いので。

関連記事

広告

 - Go言語