ExcelファイルをGo言語で読み込むサンプルコード

Go
田中太郎
田中太郎

Go言語でエクセルファイルを読み込むサンプルコードを作成しました

環境

使用モジュール

excelize
エクセルファイルを操作するモジュール

サンプルコード

ファイル構成

・extract_excel.go
このモジュールの関数をほかのモジュールで使用するときに呼び出す関数群
基本的に、このファイルで定義している関数のみを使用する

・extract_excel_internal_func.go
extract_excelで定義している関数の内部処理を実装している関数群
外部ファイルはこちらに書いてある内容を意識しない

コード

extract_excel.go
package main
import "fmt"

func analyze_row_and_col_header_table(arg extract_excel_type) (
    row_h []string,
    col_h []string,
    table_data [][]string,
    ){
    arg = initialize(arg)
    arg = initialize_cell(arg)
    arg = initialize_row_h(arg)
    arg = initialize_col_h(arg)
    row_h = create_row_h(arg)
    col_h = create_col_h(arg)
    table_data = create_table_row_col(arg)
    return
}

func analyze_col_and_row_header_table(arg extract_excel_type) (
    row_h []string,
    col_h []string,
    table_data [][]string,
    ){
    arg = initialize(arg)
    arg = initialize_cell(arg)
    arg = initialize_row_h(arg)
    arg = initialize_col_h(arg)
    row_h = create_row_h(arg)
    col_h = create_col_h(arg)
    table_data = create_table_col_row(arg)
    return
}

func analyze_row_header_table(arg extract_excel_type) (
    row_h []string,
    col_h []string,
    table_data [][]string,
    ){
    arg = initialize(arg)
    arg = initialize_cell(arg)
    arg = initialize_row_h(arg)
    row_h = create_row_h(arg)
    col_h = []string{}
    table_data = create_table_row_col(arg)
    return
}

func analyze_col_header_table(arg extract_excel_type) (
    row_h []string,
    col_h []string,
    table_data [][]string,
    ){
    arg = initialize(arg)
    arg = initialize_cell(arg)
    arg = initialize_col_h(arg)
    row_h = []string{}
    col_h = create_col_h(arg)
    table_data = create_table_col_row(arg)
    return
}

func analyze_row_table(arg extract_excel_type) (
    row_h []string,
    col_h []string,
    table_data [][]string,
    ){
    arg = initialize(arg)
    arg = initialize_cell(arg)
    row_h = []string{}
    col_h = []string{}
    table_data = create_table_row_col(arg)
    return
}

func analyze_col_table(arg extract_excel_type) (
    row_h []string,
    col_h []string,
    table_data [][]string,
    ){
    arg = initialize(arg)
    arg = initialize_cell(arg)
    row_h = []string{}
    col_h = []string{}
    table_data = create_table_col_row(arg)
    return
}
extract_excel_internal_fucn.go
package main
import (
    "fmt"
    "os"
    "github.com/360EntSecGroup-Skylar/excelize"
)

type extract_excel_type struct{
    f *excelize.File
    filepath string
    sheet string
    col_h int
    row_h string
    cell_begin string
    cell_end string
    cell_begin_row int
    cell_begin_col int
    cell_end_row int
    cell_end_col int
}

func create_table_row_col(arg extract_excel_type) [][]string{
    table_data := [][]string{}
    for row:=arg.cell_begin_row;row<=arg.cell_end_row;row++{
        data_tmp := []string{}
        for col:=arg.cell_begin_col;col<=arg.cell_end_col;col++{
            cell_tmp, err := excelize.CoordinatesToCellName(col, row)
            error_check(err)
            cell, err := arg.f.GetCellValue(arg.sheet, cell_tmp)
            error_check(err)
            data_tmp = append(data_tmp, cell)
        }
        table_data = append(table_data, data_tmp)
    }
    return table_data
}

func create_table_col_row(arg extract_excel_type) [][]string{
    table_data := [][]string{}
    for col:=arg.cell_begin_col;col<=arg.cell_end_col;col++{
        data_tmp := []string{}
        for row:=arg.cell_begin_row;row<=arg.cell_end_row;row++{
            cell_tmp, err := excelize.CoordinatesToCellName(col, row)
            error_check(err)
            cell, err := arg.f.GetCellValue(arg.sheet, cell_tmp)
            error_check(err)
            data_tmp = append(data_tmp, cell)
        }
        table_data = append(table_data, data_tmp)
    }
    return table_data
}

func create_row_h(arg extract_excel_type) []string{
    row_h_data := []string{}
    for i:=arg.cell_begin_row;i<=arg.cell_end_row;i++{
        tmp, err := excelize.JoinCellName(arg.row_h, i)
        error_check(err)
        cell, err := arg.f.GetCellValue(arg.sheet, tmp)
        error_check(err)
        row_h_data = append(row_h_data, cell)
    }
    return row_h_data
}

func create_col_h(arg extract_excel_type) []string{
    col_h_data := []string{}
    for i:=arg.cell_begin_col;i<=arg.cell_end_col;i++{
        tmp, err := excelize.CoordinatesToCellName(i, arg.col_h)
        error_check(err)
        cell, err := arg.f.GetCellValue(arg.sheet, tmp)
        error_check(err)
        col_h_data = append(col_h_data, cell)
    }
    return col_h_data
}

func initialize_cell(arg extract_excel_type) extract_excel_type{
    if arg.cell_begin == "" { arg.cell_begin = "B1"}
    if arg.cell_end == "" {
        cols, _ := arg.f.GetCols(arg.sheet)
        rows, _ := arg.f.GetRows(arg.sheet)
        tmp, _ := excelize.ColumnNumberToName(len(cols))
        arg.cell_end, _ = excelize.JoinCellName(tmp, len(rows))
    }
    arg.cell_begin_col, arg.cell_begin_row, _ = excelize.CellNameToCoordinates(arg.cell_begin)
    arg.cell_end_col, arg.cell_end_row, _ = excelize.CellNameToCoordinates(arg.cell_end)
    return arg
}

func initialize(arg extract_excel_type) extract_excel_type{
    var err error
    arg.f, err = excelize.OpenFile(arg.filepath)
    error_check(err)
    return arg
}

func initialize_row_h(arg extract_excel_type) extract_excel_type{
    if arg.row_h == "" { arg.row_h = "A" }
    return arg
}

func initialize_col_h(arg extract_excel_type) extract_excel_type{
    if arg.col_h == 0 { arg.col_h = 1 }
    return arg
}

func error_check(err error){
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }
}

使い方

analyze_row_and_col_header_table()

引数
extract_excel_type型

戻り値
row_h []string: 行ヘッダのリストを返す
col_h []string: 列ヘッダのリストを返す
table_data [][]string: 表のデータ部分を返す

使い方

var arg extract_excel_type
でextract_excelの関数用の引数となる構造体を定義します

arg.filepath: 読み込みたいエクセルファイルのパスを指定します

arg.sheet: シート名を指定します

arg.row_h: 行ヘッダの位置を指定します。デフォルトでA列が行ヘッダになります

arg.col_h: 列ヘッダの位置を指定します。デフォルトで1行目が列ヘッダになります

arg.cell_start: 表の左上を指定します。デフォルトで”B2″です。

arg.cell_end: 表の右下を指定します。デフォルトで読み込むファイルの最終列、最終行です

使用例

Book1.xlsx

var arg extract_excel_type
arg.filepath = "Book1.xlsx"
arg.sheet = "Sheet1"
arg.col_h = 3
arg.row_h = "B"
arg.cell_begin = "D5"
arg.cell_end = "E6"

fmt.Println(analyze_row_and_col_header_table(arg))

結果

[行ヘッダ1 行ヘッダ2] [列ヘッダ1 列ヘッダ2] [[D5 E5] [D6 E6]]

analyze_row_header_table()

引数
extract_excel_type型

戻り値
row_h []string:行ヘッダのリストを返す
col_h []string:空のリストを返す
table_data [][]string:表のデータ部分を返す

使い方

var arg extract_excel_type
でextract_excelの関数用の引数となる構造体を定義します

arg.filepath: 読み込みたいエクセルファイルのパスを指定します

arg.sheet: シート名を指定します

arg.row_h: 行ヘッダの位置を指定します。デフォルトでA列が行ヘッダになります

arg.cell_start: 表の左上を指定します。デフォルトで”B1″です。

arg.cell_end: 表の右下を指定します。デフォルトで読み込むファイルの最終列、最終行です

使用例

Book1.xlsx

var arg extract_excel_type
arg.filepath = "Book1.xlsx"
arg.sheet = "Sheet1"
arg.row_h = "B"
arg.cell_begin = "D5"
arg.cell_end = "E6"

fmt.Println(analyze_row_header_table(arg))

結果

[行ヘッダ1 行ヘッダ2] [[D5 E5] [D6 E6]]

analyze_col_header_table()

引数
extract_excel_type型

戻り値
row_h []string: 空のリストを返す
col_h []string: 列ヘッダのリストを返す
table_data [][]string: 表のデータ部分を返す

使い方

var arg extract_excel_type
でextract_excelの関数用の引数となる構造体を定義します

arg.filepath: 読み込みたいエクセルファイルのパスを指定します

arg.sheet: シート名を指定します

arg.col_h: 列ヘッダの位置を指定します。デフォルトで1行目が列ヘッダになります

arg.cell_start: 表の左上を指定します。デフォルトで”A2″です。

arg.cell_end: 表の右下を指定します。デフォルトで読み込むファイルの最終列、最終行です

使用例

Book1.xlsx

var arg extract_excel_type
arg.filepath = "Book1.xlsx"
arg.sheet = "Sheet1"
arg.col_h = 3
arg.cell_begin = "D5"
arg.cell_end = "E6"

fmt.Println(analyze_col_header_table(arg))

結果

[列ヘッダ1 列ヘッダ2] [[D5 D6] [E5 E6]]

analyze_row_table()

引数
extract_excel_type型

戻り値
row_h []string: 空のリストを返す
col_h []string: 空のリストを返す
table_data [][]string: 表のデータ部分を返す

使い方

var arg extract_excel_type
でextract_excelの関数用の引数となる構造体を定義します

arg.filepath: 読み込みたいエクセルファイルのパスを指定します

arg.sheet: シート名を指定します

arg.cell_start: 表の左上を指定します。デフォルトで”A1″です。

arg.cell_end: 表の右下を指定します。デフォルトで読み込むファイルの最終列、最終行です

使用例

Book1.xlsx

var arg extract_excel_type
arg.filepath = "Book1.xlsx"
arg.sheet = "Sheet1"
arg.cell_begin = "D5"
arg.cell_end = "E6"

fmt.Println(analyze_row_table(arg))

結果

[[D5 E5] [D6 E6]]

analyze_col_table()

引数
extract_excel_type型

戻り値
row_h []string: 空のリストを返す
col_h []string: 空のリストを返す
table_data [][]string: 表のデータ部分を返す

使い方

var arg extract_excel_type
でextract_excelの関数用の引数となる構造体を定義します

arg.filepath: 読み込みたいエクセルファイルのパスを指定します

arg.sheet: シート名を指定します

arg.cell_start: 表の左上を指定します。デフォルトで”A1″です。

arg.cell_end: 表の右下を指定します。デフォルトで読み込むファイルの最終列、最終行です

使用例

Book1.xlsx

var arg extract_excel_type
arg.filepath = "Book1.xlsx"
arg.sheet = "Sheet1"
arg.cell_begin = "D5"
arg.cell_end = "E6"

fmt.Println(analyze_col_table(arg))

結果

[[D5 D6] [E5 E6]]

コメント

タイトルとURLをコピーしました