Skip to content

Commit

Permalink
Add comma-separator flag
Browse files Browse the repository at this point in the history
  • Loading branch information
igorrius committed Mar 24, 2020
1 parent b860ee0 commit ca863c9
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 9 deletions.
24 changes: 17 additions & 7 deletions action/xls2csv.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,17 @@ import (
)

const (
InputFilenameFlag = "input"
OutputFilenameFlag = "output"
SheetNameFlag = "sheet-name"
SheetNumberFlag = "sheet-number"
InputFilenameFlag = "input"
OutputFilenameFlag = "output"
SheetNameFlag = "sheet-name"
SheetNumberFlag = "sheet-number"
SeparatorCharacterFlag = "separator"
)

var (
ErrEmptyInputFileName = errors.New("input filename can not be empty")
ErrInvalidInputParametersSheetNameAndNumberSet = errors.New("invalid input parameters: sheet name and number set at the same time")
ErrInvalidInputParametersSeparatorLength = errors.New("invalid input parameters: separator length must be one character")
)

func Xls2CsvFlags() []cli.Flag {
Expand All @@ -35,12 +37,18 @@ func Xls2CsvFlags() []cli.Flag {
&cli.StringFlag{Name: SheetNameFlag, Aliases: []string{"sname"}, Usage: "Processing sheet name"},
// Processing sheet number in input XLS file
&cli.IntFlag{Name: SheetNumberFlag, Aliases: []string{"snum"}, Usage: "Processing sheet number"},
// CSV file separator character
&cli.StringFlag{Name: SeparatorCharacterFlag, Aliases: []string{"sep"}, Usage: "CSV separator character", Value: ",", DefaultText: ","},
}
}

func Xls2CsvFlagsValidation(c *cli.Context) error {
cli.ShowVersion(c)

if separator := c.String(SeparatorCharacterFlag); len(separator) != 1 {
return ErrInvalidInputParametersSeparatorLength
}

name := c.String(SheetNameFlag)
number := c.Int(SheetNumberFlag)
if name != "" && number > 0 {
Expand Down Expand Up @@ -74,10 +82,12 @@ func Xls2Csv() cli.ActionFunc {
}
defer func() { _ = outputFile.Close() }()

job := converter.NewXls2CsvJob(inputFile, outputFile, c.String(SheetNameFlag), c.Int(SheetNumberFlag))
sep := []rune(c.String(SeparatorCharacterFlag))

job := converter.NewXls2CsvJob(inputFile, outputFile, c.String(SheetNameFlag), c.Int(SheetNumberFlag), sep[0])
_, _ = fmt.Fprintf(c.App.Writer,
"[+] converting %s to %s, using sheet with name [%s]\n",
inputFileName, outputFileName, job.SheetName())
"[+] converting %s to %s, using sheet with name [%s], using CSV separator %c\n",
inputFileName, outputFileName, job.SheetName(), sep)

return converter.Xls2Csv(job)
}
Expand Down
3 changes: 2 additions & 1 deletion converter/xls2csv.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,14 @@ func (j *Xls2CsvJob) SheetName() string {
return j.xls.GetSheetMap()[j.xls.GetActiveSheetIndex()]
}

func NewXls2CsvJob(input io.Reader, output io.WriteCloser, sheetName string, sheetNumber int) *Xls2CsvJob {
func NewXls2CsvJob(input io.Reader, output io.WriteCloser, sheetName string, sheetNumber int, separator rune) *Xls2CsvJob {
xls, err := excelize.OpenReader(input)
if err != nil {
panic(err)
}

csvWriter := csv.NewWriter(output)
csvWriter.Comma = separator

return &Xls2CsvJob{
sheetName: sheetName,
Expand Down
2 changes: 1 addition & 1 deletion xls2csv.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (

func main() {
app := &cli.App{
Version: "1.0.0",
Version: "1.0.1",
Name: "XLS to CSV converter",
Usage: "xls2csv -i in.xls -o out.csv",
Action: action.Xls2Csv(),
Expand Down

0 comments on commit ca863c9

Please sign in to comment.