Go言語(golang)でエクセルファイルを読み込むサンプルコードを作成しました
環境
使用モジュール
・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]]
コメント