Go언어 golang
고랭 엑셀 - golang excel #1
미래의 고
2023. 3. 4. 19:34
현업에 있다 보면 엑셀 출력 코딩을 할 때가 종종 있습니다.
고랭으로 엑셀 출력 오픈소스중 excelize를 추천해 드려 봅니다.
장점은 호환성이 좋아서 오피스 엑셀에서 열어도 경고 메시지가 안 뜹니다.
카드사나, 공공기관에 있는 다운로드된 엑셀은 경고창이 떠서 찝찝한 면이 없지는 않은데, 이 오픈소스는 그런 부분은 좋은 것 같습니다. ?
문서도 한글 번역되어 있습니다.
기본코드를 시작으로 문자, 셀 스타일, 차트, 기존 문서 로딩 등 여러번 업로드 해볼까 합니다.
우선 기본 엑셀 출력을 해보겠습니다.
다음과 같은 결과가 출력됩니다.
package main
import (
"fmt"
"github.com/xuri/excelize/v2"
"time"
)
func genMockData() [][]string {
//시간, 사용처, 금액, 비고
return [][]string{
{"2023-03-04 11:66", "하늘나라", "12000", "신용카드"},
{"2023-03-03 11:66", "우리나라", "8000", "체크카드"},
{"2023-03-02 11:66", "재미나라", "7000", "현금"},
{"2023-03-01 11:66", "김밥나라", "13000", "신용카드"},
}
}
func main() {
f := excelize.NewFile()
sheetName := "ex1"
sheet, err := f.NewSheet(sheetName)
if err != nil {
fmt.Println(err)
return
}
rs := genMockData()
// print header
f.SetCellValue(sheetName, "A1", "시간")
f.SetCellValue(sheetName, "B1", "사용처")
f.SetCellValue(sheetName, "C1", "금액")
f.SetCellValue(sheetName, "D1", "비고")
// print data
for i, row := range rs {
f.SetCellValue(sheetName, fmt.Sprintf("A%d", i+2), row[0])
f.SetCellValue(sheetName, fmt.Sprintf("B%d", i+2), row[1])
f.SetCellValue(sheetName, fmt.Sprintf("C%d", i+2), row[2])
f.SetCellValue(sheetName, fmt.Sprintf("D%d", i+2), row[3])
}
filename := fmt.Sprintf("%s.xlsx", time.Now().Format("2006-01-02-1504"))
f.SetActiveSheet(sheet)
if err := f.SaveAs(filename); err != nil {
fmt.Println(err)
}
fmt.Println("생성 완료")
}