mirror of
https://github.com/unidoc/unioffice.git
synced 2025-04-25 13:48:53 +08:00
demo: add csv2xlsx demo program
This commit is contained in:
parent
c4f7c3a881
commit
981b0b205c
60
cmd/csv2xlsx/main.go
Normal file
60
cmd/csv2xlsx/main.go
Normal file
@ -0,0 +1,60 @@
|
||||
// Copyright 2017 Baliance. All rights reserved.
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/csv"
|
||||
"flag"
|
||||
"log"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"baliance.com/gooxml/spreadsheet"
|
||||
"baliance.com/gooxml/spreadsheet/format"
|
||||
)
|
||||
|
||||
func main() {
|
||||
flag.Parse()
|
||||
if flag.NArg() != 1 {
|
||||
log.Fatalf("pass a single document as a parameter")
|
||||
}
|
||||
f, err := os.Open(flag.Arg(0))
|
||||
if err != nil {
|
||||
log.Fatalf("error opening: %s", err)
|
||||
}
|
||||
|
||||
cv := csv.NewReader(f)
|
||||
wb := spreadsheet.New()
|
||||
sheet := wb.AddSheet()
|
||||
for {
|
||||
rec, err := cv.Read()
|
||||
if err != nil {
|
||||
break
|
||||
}
|
||||
// one row per CSV row
|
||||
row := sheet.AddRow()
|
||||
for _, c := range rec {
|
||||
cell := row.AddCell()
|
||||
// go ahead and use SetNumber/SetString so the cell types get set
|
||||
// correctly, in practice this doesn't matter too much as Excel will
|
||||
// automatically treat number-like string as numbers.
|
||||
if format.IsNumber(c) {
|
||||
v, _ := strconv.ParseFloat(c, 64)
|
||||
cell.SetNumber(v)
|
||||
} else {
|
||||
cell.SetString(c)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if err := wb.Validate(); err != nil {
|
||||
log.Fatalf("error validating spreadsheet: %s", err)
|
||||
}
|
||||
|
||||
outFile := strings.Replace(flag.Arg(0), ".csv", ".xlsx", -1)
|
||||
if err := wb.SaveToFile(outFile); err != nil {
|
||||
log.Fatalf("error saving spreadsheet: %s", err)
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user