修复导出 excel 错乱
This commit is contained in:
+43
-15
@@ -199,9 +199,11 @@ func fillDataWithMerge(f *excelize.File, sheetName string, header []HeaderCellDa
|
||||
}
|
||||
|
||||
// 设置单元格样式
|
||||
err = setCellStyle(f, sheetName, axis, header[i], alignment)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
if colOffset < len(header) {
|
||||
err = setCellStyle(f, sheetName, axis, header[colOffset], alignment)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
}
|
||||
|
||||
// 设置行高 35-第一行
|
||||
@@ -214,23 +216,33 @@ func fillDataWithMerge(f *excelize.File, sheetName string, header []HeaderCellDa
|
||||
mergeNum = mergeNum + 1
|
||||
mergeNumSlice = append(mergeNumSlice, colName)
|
||||
} else {
|
||||
var sliceFieldNum int // 切片字段数量
|
||||
|
||||
// 最大切片数量,此数量为其余需合并的数量
|
||||
if filedNumSlice < field.Len() {
|
||||
filedNumSlice = field.Len()
|
||||
}
|
||||
|
||||
elemType := field.Type().Elem()
|
||||
if elemType.Kind() == reflect.Ptr {
|
||||
elemType = elemType.Elem()
|
||||
}
|
||||
numSliceFields := 0
|
||||
if elemType.Kind() == reflect.Struct {
|
||||
numSliceFields = elemType.NumField()
|
||||
}
|
||||
|
||||
for j := 0; j < field.Len(); j++ {
|
||||
item := field.Index(j).Interface()
|
||||
v1 := reflect.ValueOf(item)
|
||||
if v1.Kind() == reflect.Ptr {
|
||||
v1 = v1.Elem()
|
||||
}
|
||||
|
||||
for i2 := 0; i2 < field.Index(j).NumField(); i2++ {
|
||||
for i2 := 0; i2 < v1.NumField(); i2++ {
|
||||
// 获取字段值
|
||||
cellValue := v1.Field(i2).Interface()
|
||||
|
||||
// 获取列名
|
||||
colName, err := excelize.ColumnNumberToName(i + i2 + 1)
|
||||
colName, err := excelize.ColumnNumberToName(colOffset + i2 + 1)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
@@ -245,9 +257,11 @@ func fillDataWithMerge(f *excelize.File, sheetName string, header []HeaderCellDa
|
||||
}
|
||||
|
||||
// 设置单元格样式
|
||||
err = setCellStyle(f, sheetName, axis, header[i+i2], alignment)
|
||||
if err != nil {
|
||||
return row, err
|
||||
if colOffset+i2 < len(header) {
|
||||
err = setCellStyle(f, sheetName, axis, header[colOffset+i2], alignment)
|
||||
if err != nil {
|
||||
return row, err
|
||||
}
|
||||
}
|
||||
|
||||
// 设置行高 35-第一行
|
||||
@@ -255,14 +269,28 @@ func fillDataWithMerge(f *excelize.File, sheetName string, header []HeaderCellDa
|
||||
if err != nil {
|
||||
return row, err
|
||||
}
|
||||
|
||||
sliceFieldNum = i2
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// 列偏移量需增加上切片字段数量
|
||||
colOffset = colOffset + sliceFieldNum
|
||||
if field.Len() == 0 {
|
||||
for i2 := 0; i2 < numSliceFields; i2++ {
|
||||
colName, err := excelize.ColumnNumberToName(colOffset + i2 + 1)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
axis = colName + fmt.Sprintf("%d", row+1)
|
||||
if colOffset+i2 < len(header) {
|
||||
_ = setCellStyle(f, sheetName, axis, header[colOffset+i2], alignment)
|
||||
}
|
||||
_ = f.SetRowHeight(sheetName, row+1, 35)
|
||||
}
|
||||
}
|
||||
|
||||
// 列偏移量需增加上切片字段数量(减1是因为循环末尾有colOffset++)
|
||||
if numSliceFields > 0 {
|
||||
colOffset = colOffset + numSliceFields - 1
|
||||
}
|
||||
}
|
||||
|
||||
colOffset++
|
||||
@@ -325,7 +353,7 @@ func setCellStyle(f *excelize.File, sheetName, axis string, header HeaderCellDat
|
||||
}
|
||||
}
|
||||
|
||||
if header.CellType == "float" {
|
||||
if header.CellType == "float" || header.CellType == "float64" {
|
||||
style.NumFmt = 2
|
||||
customNumFmt := "0.000"
|
||||
style.CustomNumFmt = &customNumFmt
|
||||
|
||||
Reference in New Issue
Block a user