0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GoでtxtファイルをExcelファイルに変換

Posted at

作成背景

Goの勉強としてテキストファイルからExcelファイルを作成し、そのデータを元にグラフを描画してみようと思ったので、記録のため、今回の記事を書きました。

準備

テスト用テキストファイル

test.txt
商品名 値段(円)
プロテイン 3000

また、GoでExcelファイルを扱うために以下のライブラリを使用しました。今回、Go Modulesを利用したので、

go get github.com/xuri/excelize/v2

※詳しくはこちら

実装

main.go
package main

import (
	"bufio"
	"fmt"
	"log"
	"os"
	"strconv"
	"strings"

	"github.com/xuri/excelize/v2"
)

func main() {
	// 読み込むテキストファイルと書き出すExcelファイルの名前を決める
	var import_file, out_file string
	fmt.Scanf("%s %s", &import_file, &out_file)

	log.Printf("File Name: %s", import_file)

	file, err := os.Open(import_file)
	if err != nil {
		log.Fatal(err)
	}
	defer file.Close()

	// 打ち込んだExcelファイルが存在しなければ新しく作成
	var ef *excelize.File
	if _, err := os.Stat(out_file); err != nil {
		ef = excelize.NewFile()
		defer func() {
			if err := ef.Close(); err != nil {
				log.Println(err)
			}
		}()
	} else {
		ef, _ = excelize.OpenFile("./" + out_file)
	}

	// テキストファイルを一行ごと読み込む
	var txtSlice []string
	scanner := bufio.NewScanner(file)
	rowNum := 2
	for scanner.Scan() {
		// 空白ごとに区切り、セルに一つずつ入れる
		txtSlice = strings.Split(scanner.Text(), " ")
		for i, v := range txtSlice {
			//シートに記述
			if i == 0 {
				ef.SetCellValue("Sheet1", "A"+strconv.Itoa(rowNum), v)
			} else if i == 1 {
				ef.SetCellValue("Sheet1", "B"+strconv.Itoa(rowNum), v)
			}
		}

		if ef.SaveAs(out_file); err != nil {
			log.Fatal(err)
		}

		rowNum++
	}

	if err := scanner.Err(); err != nil {
		log.Fatal(err)
	}
}

実装の手順としては以下のようになっています。

  1. 読み込むテキストファイル名と作成するExcelファイル名を入力
  2. テキストファイルのデータを一行ごと読み込み、さらに空白で区切ってスライスに代入。
  3. スライスの中身を一つずつセルに挿入する

あとがき

今回は2列のみのデータを用いたので力技で作成しましたが、数が多かったりデータの数がわからない場合に対応できないため、今後改善する必要があります。
何か良い案があれば是非教えていただきたいです。

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?