LoginSignup
9
3

More than 3 years have passed since last update.

Go言語でエクセルデータから情報を読み取る

Posted at

自分が過去に書いたテックブログの中で記載している内容なのですが、もう少し詳しい内容を記述できたらと思い記事にしました。 エクセルを読み込んでからセルを参照するまでの流れを説明していきます。

前回の記事 : Go言語で日本語フォーマットをpdf出力

テックブログ : Go言語でケアラベル発行の自動化

エクセルから情報を読み込む

xlsxパッケージを使用しています。 実際に実装した内容を、以下に記載していきます。

ファイルパスの作成

今回作成したCLIツールでは開発環境がMac、実行環境がWindowsだった為、filepathパッケージを使ってパスを設定しています。

path := filepath.Join(ディレクトリ名, ファイル名)

標準パッケージでこういうものがあるのは便利ですね。

エクセルファイルの読み込み

まずはエクセルファイル全体を読込みます。

// xlsx読み込み
excel, err := xlsx.OpenFile(エクセルファイルのパス)

// エクセルが読み込めない場合
if err != nil {
log.Fatal(err)
}

エクセルのシートを読み込む

シート名を元に検索します。

// シートを読み込み
sheet := excel.Sheet[シート名]

// シートが見つからない
if sheet == nil {
log.Fatal(failur open sheet., シート名)
}

シート内のセルを参照

1行ごとに読み込む場合。

// 行の一番下までループ
for key, value := range sheet.Rows {
    // このループではエクセルの1行ごとに処理ができる
    // 左から0番目のセルを参照できる
    cell := value.Cells[0].Value
}

読み込む列を指定した上で、1行ずつ読み込む場合。

// 1、5列を読込みたい場合
// 読み込むセルの列を初期化
var readCols = []int{1, 5}

// 1、5列の順でセルを読み込む
for _, cellCol := range readCols {
    // 行の一番下までループ
    for rowKey, rowVal := range formSheet.Rows {
        // やりたい処理を書く

        // 各列で読込みたい値がある場合
        if cellCol == 1 {
            // 1行目に読込みたい値があれば
        } if cellCol == 5 {
            // 5行目に読込みたい値があれば
        }
}

自分が作成したシステムで文字列を読み込む場合、列指定で一行ずつ処理しています。
そして、もともと定義しておいたキーワードを見つけ、動的に変化する文章を読み取っています。

最後に

エクセルの読み込みに関しては、リファレンスやWeb上の情報で簡単にできました。

C#とかでも同じ様なライブラリがあり、使い方も似たような部分が多かったので、エクセル読み込まなければいけない場面に出くわしたら参考にしてみてください。

9
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
3