Add setter for default cell value

SetCellStr escapes the value in a cell so the excel sheet cannot use the value in formulas.

SetCellDefault accepts a string value and sets it to a cell as a raw value without escaping it
This commit is contained in:
Sharsie 2017-01-11 19:26:06 +01:00 committed by GitHub
parent 2497ccb876
commit 670a587912
1 changed files with 27 additions and 2 deletions

View File

@ -48,9 +48,9 @@ func (f *File) SetCellValue(sheet string, axis string, value interface{}) {
case int64: case int64:
f.SetCellInt(sheet, axis, int(value.(int64))) f.SetCellInt(sheet, axis, int(value.(int64)))
case float32: case float32:
f.SetCellInt(sheet, axis, int(value.(float32))) f.SetCellDefault(sheet, axis, strconv.FormatFloat(float64(value.(float32)), 'f', -1, 32))
case float64: case float64:
f.SetCellInt(sheet, axis, int(value.(float64))) f.SetCellDefault(sheet, axis, strconv.FormatFloat(float64(value.(float64)), 'f', -1, 64))
case string: case string:
f.SetCellStr(sheet, axis, t) f.SetCellStr(sheet, axis, t)
case []byte: case []byte:
@ -110,6 +110,31 @@ func (f *File) SetCellStr(sheet string, axis string, value string) {
f.saveFileList(name, replaceWorkSheetsRelationshipsNameSpace(string(output))) f.saveFileList(name, replaceWorkSheetsRelationshipsNameSpace(string(output)))
} }
// SetCellDefault provides function to set string type value of a cell as default format without escaping the cell
func (f *File) SetCellDefault(sheet string, axis string, value string) {
axis = strings.ToUpper(axis)
var xlsx xlsxWorksheet
col := string(strings.Map(letterOnlyMapF, axis))
row, _ := strconv.Atoi(strings.Map(intOnlyMapF, axis))
xAxis := row - 1
yAxis := titleToNumber(col)
name := `xl/worksheets/` + strings.ToLower(sheet) + `.xml`
xml.Unmarshal([]byte(f.readXML(name)), &xlsx)
rows := xAxis + 1
cell := yAxis + 1
xlsx = completeRow(xlsx, rows, cell)
xlsx = completeCol(xlsx, rows, cell)
xlsx.SheetData.Row[xAxis].C[yAxis].T = ""
xlsx.SheetData.Row[xAxis].C[yAxis].V = value
output, _ := xml.Marshal(xlsx)
f.saveFileList(name, replaceWorkSheetsRelationshipsNameSpace(string(output)))
}
// Completion column element tags of XML in a sheet. // Completion column element tags of XML in a sheet.
func completeCol(xlsx xlsxWorksheet, row int, cell int) xlsxWorksheet { func completeCol(xlsx xlsxWorksheet, row int, cell int) xlsxWorksheet {
if len(xlsx.SheetData.Row) < cell { if len(xlsx.SheetData.Row) < cell {