mirror of
https://github.com/unidoc/unioffice.git
synced 2025-04-27 13:48:54 +08:00
61 lines
1.2 KiB
Go
61 lines
1.2 KiB
Go
// 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)
|
|
}
|
|
}
|