+++
title = "GolangでExcelファイル(.xlsx)を読み込む"
date = 2017-09-03T22:47:31+08:00
description = "GolangでどうすればExcelファイルを読み込めるのか調べました。"
tags = ["Golang"]
categories = ["プログラミング"]
author = "kazu634"
images = ["ogp/2017-09-03-golang-to-handle-xlsx-files.webp"]
+++

`github.com/tealeg/xlsx`を用いればいいみたいということがわかりました。

## とりあえず使ってみる
`github`のページに記載してあるように動かします。ここでは`test_draft.xlsx`を読み込むこととします。

```
package main

import (
	"fmt"

	"github.com/tealeg/xlsx"
)

func main() {
    excelFileName := "./test_draft.xlsx"
    xlFile, err := xlsx.OpenFile(excelFileName)
    if err != nil {
        panic(err)
    }
    for _, sheet := range xlFile.Sheets {
        for _, row := range sheet.Rows {
            for _, cell := range row.Cells {
                text := cell.String()
                fmt.Printf("%s\n", text)
            }
        }
    }
}
```

## 細々とした使い方
きちんと利用するにあたって調べたことをまとめます。

### シート名を取得したい
シート名は以下のようにして参照します。`sheet.Name`にシート名が格納されます:

```
package main

import (
	"fmt"

	"github.com/tealeg/xlsx"
)

func main() {
    excelFileName := "./test_draft.xlsx"

    xlFile, err := xlsx.OpenFile(excelFileName)
    if err != nil {
        panic(err)
    }

    for _, sheet := range xlFile.Sheets {
        if sheet.Name != "Sheet1" {
	    	      fmt.Println(sheet.Name)
	       }
    }
}
```

### 列ごとに何かする
こんな感じになります:

```
package main

import (
	"fmt"

	"github.com/tealeg/xlsx"
)

func main() {
    excelFileName := "./test_draft.xlsx"

    xlFile, err := xlsx.OpenFile(excelFileName)
    if err != nil {
        panic(err)
    }

    for _, sheet := range xlFile.Sheets {
        for _, row := range sheet.Rows {
            // 列ごとの処理。例えばこんな感じ
            for _, cell := range row.Cells
                // セル単位の処理
            }
        }
    }
}
```

## 最後に
とりあえずメモでした。