Skip to content

日本語説明

Mike Shimura edited this page Jan 24, 2016 · 10 revisions

goexcelについて  

このプログラムは github.com/tealeg/xlsx を Excel作成に利用しています。

生成した Excel サンプル Simple1

excel

インストール

go get -u github.com/mikeshimura/goexcel

概要

  • Excel が簡単に生成できます。

  • 色は 定数として定義済です。 (github.com/golang/image/colornames を使用)

  • 色濃度も使用出来ます。

  • 罫線も 定数として定義済です。

  • 網掛けパターンも 定数として定義済です。

  • 基本スタイル (フォント名など) を容易に継承出来ます。

定義済みの罫線、網掛けのサンプル Sample

excel

セットアップ Command

  • 新規 Excel
    CreateGoexcel()

  • 既存 Excelの読み込み
    OpenFile(filename string) error

  • シート
    AddSheet(name string) error
    AddSheetPanic(name string)
    SetSheet(name string) error
    SetSheetPanic(name string)

ファイル書き出し Command

Save(filename string) error
Write(writer io.Writer) error

事前定義済み色

色は CLR_Blue の様に、定義済みです

  • 色のセット ge.CLR_Blue // ge.CLR_Blue の様に使用

ColorDencity(color string, dencity int) string
// ColorDencity(ge.CLR_Blue, 20) の様に使用

スタイル Command

スタイルは map[string]*xlsx.Style として管理しています。

  • スタイルの新規作成
    CreateStyleByKey(keyname string, font string, size int, border string, borderPattern string)

  • スタイルのコピー
    CopyStyle(oldkey string, newkey string)
    //このコマンドを使用して、スタイルを継承する事が出来ます。  

  • フォント
    SetFontName(keyname string, fontName string)
    SetFontSize(keyname string, fontSize int)
    SetFontColor(keyname string, color string)
    SetItalic(keyname string, italic bool)
    SetBold(keyname string, bold bool)
    SetUnderline(keyname string, underline bool)

  • 罫線
    SetBorder(keyname string, border string, borderPattern string)
    // border "T" top "B" bottom "L" left "R" right

SetBorderColor(keyname string, border string, color string)

  • 網掛け
    SetFill(keyname string, pattern string, fgColor string, bgColor string)

  • 配置
    SetHorizontalAlign(keyname string, alignment string)
    //alignment like H_Right

SetVerticalAlign(keyname string, alignment string)
//alignment like V_Center

  • 欄幅の設定
    SetColWidth(startCol int, endCol int, width float64)

  • セルの統合
    Merge(rowno int, colno int, toRowNo int, toColNo int)

##値 / フォーマット 設定 Command
SetInt(rowno int, colno int, i int)
SetIntFormat(rowno int, colno int, i int, fmt string)
SetFloat(rowno int, colno int, f float64)
SetFloatFormat(rowno int, colno int, f float64, fmt string)
SetDate(rowno int, colno int, t time.Time)
SetDateFormat(rowno int, colno int, t time.Time, fmt string)
SetDateTime(rowno int, colno int, t time.Time)
SetDateTimeFormat(rowno int, colno int, t time.Time, fmt string)
SetString(rowno int, colno int, s string)
SetFormula(rowno int, colno int, formula string)
SetFormulaFormat(rowno int, colno int, formula string, fmt string) SetFormat(rowno int, colno int, fmt string)

##ライセンス

goexcelは MIT Licenseです。 コピーライトは志村正信に属します。 (Gmail mikeshimura)

##サンプル program

サンプルのソース

package example

import (
	"fmt"
	ge "github.com/mikeshimura/goexcel"
	"io/ioutil"
	"strconv"
	"strings"
	"time"
)

func Simple1() {
	list := ReadTextFile("simple1.txt", 8)
	excel := ge.CreateGoexcel()
	excel.AddSheetPanic("Sheet1")
	excel.CreateStyleByKey("base", "Verdana", 10, "", "")

	//Style TBLR
	excel.CopyStyle("base", "TBLR")
	excel.SetBorder("TBLR", "TBLR", ge.BDR_Hair)
	excel.SetFill("TBLR", ge.PTN_Solid,
   ge.ColorDencity(ge.CLR_Blue, 20), ge.CLR_Yellow)

	//Style TBLR_Right
	excel.CopyStyle("TBLR", "TBLR_R")
	excel.SetHorizontalAlign("TBLR_R", ge.H_Right)

	//Style TITLE
	excel.CreateStyleByKey("TITLE", "Arial", 24, "TBLR", ge.BDR_Double)
	excel.SetFill("TITLE", ge.PTN_Gray125,
   ge.ColorDencity(ge.CLR_Black, 50), "CCCCFF")
	excel.SetItalic("TITLE", true)
	excel.SetHorizontalAlign("TITLE", ge.H_Center)
	//Style DATE
	excel.CreateStyleByKey("DATE", "Arial", 11, "", "")
	excel.SetFontColor("DATE", ge.ColorDencity(ge.CLR_Black, 60))

	//Style Header
	excel.CopyStyle("TBLR", "HEADER")
	excel.SetBold("HEADER", true)
	excel.SetFill("HEADER", ge.PTN_Solid, ge.ColorDencity(ge.CLR_Blue, 40),  
 ge.CLR_Yellow)
	excel.SetBorder("HEADER", "TB", ge.BDR_Medium)
	excel.SetHorizontalAlign("HEADER", ge.H_Center)

	//Style Header Left
	excel.CopyStyle("HEADER", "HEADER_L")
	excel.SetBorder("HEADER_L", "L", ge.BDR_Medium)

	//Style Header Right
	excel.CopyStyle("HEADER", "HEADER_R")
	excel.SetBorder("HEADER_R", "R", ge.BDR_Medium)
	excel.SetColWidth(0, 0, 9)
	excel.SetColWidth(1, 1, 6)
	excel.SetColWidth(2, 2, 11)
	excel.SetColWidth(3, 3, 8)
	excel.SetColWidth(4, 4, 13)
	excel.SetColWidth(5, 5, 7)
	excel.SetColWidth(6, 6, 9)
	excel.SetColWidth(7, 7, 6)
	excel.SetColWidth(8, 8, 11)
	for col := 1; col < 7; col++ {
		excel.SetStyleByKey(1, col, "TITLE")
	}
	excel.Merge(1, 1, 1, 6)
	excel.SetString(1, 1, "Goexcel Sample Report-Simple1")

	excel.SetStyleByKey(0, 8, "DATE")
	excel.SetDateFormat(0, 8, time.Now(), "yyyy/mm/dd")

	excel.SetStyleByKey(4, 0, "HEADER_L")
	for col := 1; col < 8; col++ {
		excel.SetStyleByKey(4, col, "HEADER")
	}
	excel.SetStyleByKey(4, 8, "HEADER_R")
	excel.SetString(4, 0, "Date")
	excel.SetString(4, 1, "Deptno")
	excel.SetString(4, 2, "Dept")
	excel.SetString(4, 3, "Slip")
	excel.SetString(4, 4, "Stock Code")
	excel.SetString(4, 5, "Name")
	excel.SetString(4, 6, "Unit Price")
	excel.SetString(4, 7, "Qty")
	excel.SetString(4, 8, "Amount")
	for i, l := range list {
		cols := l.([]string)
		excel.SetStyleByKey(5+i, 0, "TBLR")
		excel.SetStyleByKey(5+i, 1, "TBLR")
		excel.SetStyleByKey(5+i, 2, "TBLR")
		excel.SetStyleByKey(5+i, 3, "TBLR")
		excel.SetStyleByKey(5+i, 4, "TBLR")
		excel.SetStyleByKey(5+i, 5, "TBLR")
		excel.SetStyleByKey(5+i, 6, "TBLR_R")
		excel.SetStyleByKey(5+i, 7, "TBLR_R")
		excel.SetStyleByKey(5+i, 8, "TBLR_R")
		t, err := time.Parse("2006/01/02", cols[0])
		if err != nil {
			panic(cols[0] + " is not Date")
		}
		excel.SetDateFormat(5+i, 0, t, "yyyy/mm/dd")
		excel.SetString(5+i, 1, cols[1])
		excel.SetString(5+i, 2, cols[2])
		excel.SetString(5+i, 3, cols[3])
		excel.SetString(5+i, 4, cols[4])
		excel.SetString(5+i, 5, cols[5])
		excel.SetFloatFormat(5+i, 6, ge.ParseFloatPanic(cols[6]), "#,##0.00")
		excel.SetIntFormat(5+i, 7, ge.AtoiPanic(cols[7]), "#,##0")
		excel.SetFormat(5+i, 8, "#,##0.00")
		excel.SetFormula(5+i, 8, "G"+strconv.Itoa(6+i)+"*H"+strconv.Itoa(6+i))
	}

	err := excel.Save("simple1.xlsx")
	if err != nil {
		panic(err)
	}
	fmt.Println("Simple1")
	//	excel2 := ge.CreateGoexcel()
	//	excel2.OpenFile("simple1.xlsx")
	//	excel2.Save("simple1_test.xlsx")

}
func ReadTextFile(filename string, colno int) []interface{} {
	res, _ := ioutil.ReadFile(filename)
	lines := strings.Split(string(res), "\r\n")
	list := make([]interface{}, 0, 100)
	for _, line := range lines {
		cols := strings.Split(line, "\t")
		if len(cols) < colno {
			continue
		}
		list = append(list, cols)
	}
	return list
}