Ver código fonte

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
Sharsie 9 anos atrás
pai
commit
670a587912
1 arquivos alterados com 27 adições e 2 exclusões
  1. 27 2
      excelize.go

+ 27 - 2
excelize.go

@@ -48,9 +48,9 @@ func (f *File) SetCellValue(sheet string, axis string, value interface{}) {
 	case int64:
 		f.SetCellInt(sheet, axis, int(value.(int64)))
 	case float32:
-		f.SetCellInt(sheet, axis, int(value.(float32)))
+		f.SetCellDefault(sheet, axis, strconv.FormatFloat(float64(value.(float32)), 'f', -1, 32))
 	case float64:
-		f.SetCellInt(sheet, axis, int(value.(float64)))
+		f.SetCellDefault(sheet, axis, strconv.FormatFloat(float64(value.(float64)), 'f', -1, 64))
 	case string:
 		f.SetCellStr(sheet, axis, t)
 	case []byte:
@@ -110,6 +110,31 @@ func (f *File) SetCellStr(sheet string, axis string, value string) {
 	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.
 func completeCol(xlsx xlsxWorksheet, row int, cell int) xlsxWorksheet {
 	if len(xlsx.SheetData.Row) < cell {