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

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

Go言語でExcel処理パートⅡ シート内の値をすべて表示する

   

前回の記事です。

 

前回はセルのアドレス(行No、列No)を指定して値をGETしましたが、今回はシート内の値をすべてGETしてコンソールに表示させます。


designed by Renée French.

 

用意するExcelファイル

前回同様、住所録をExcelファイルで用意しました。

 

全部で12万行以上のデータがあります。ファイルサイズが3.5MBと大きいファイルです。

広告

ソースコード

ソースコードは以下の通りです。

package main

import (
  "fmt"
  "github.com/tealeg/xlsx" //go get github.com/tealeg/xlsx
)

func main() {
  excel, err1 := xlsx.OpenFile("address.xlsx")
  if err1 != nil { fmt.Printf(err1.Error()) }

  sheet := excel.Sheets[0]
  for _, row := range sheet.Rows {
    var lines string
    for _, cell := range row.Cells {
      text, _ := cell.String()
      lines += text + ","
    }
    fmt.Println(lines)
  }
}
 

 

解説

前回と重複するところは解説を省略します。今回新たに加わったのは13行目以降です。

まず以下の構文でシート内のデータ全行を取得し、データの末尾までループします。

for _, row := range sheet.Rows {
 

 

で、取得した行データから今度は列データ(セルデータ)を取得し、これも右端までループさせます。

for _, cell := range row.Cells {
 

 

で、セル内の値を取得して(text)、カンマ区切りで連結させています。linesは1つめのループ内でstring宣言をしています。

text, _ := cell.String()
lines += text + ","
 

 

行データの取得からセルデータの取得して、カンマ区切りで連結したデータをコンソール上に表示させている部分がこちらです。

sheet := excel.Sheets[0]
for _, row := range sheet.Rows {
  var lines string
  for _, cell := range row.Cells {
    text, _ := cell.String()
    lines += text + ","
  }
  fmt.Println(lines)
}
 

 

実行結果

実行結果がこちらです。

Excelファイルの読み込みに17秒かかりました。まあ、3.5MBものファイルなので仕方ないかと。データの表示には10秒くらいでした。24万行も表示させる割には速かったですね。

 

 

広告

 - Go言語