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("생성 완료")
}