Browse Source

fix:处理table数据,移除合并单元格多出来的数据

Roc 2 years ago
parent
commit
779fe8f134
2 changed files with 78 additions and 0 deletions
  1. 3 0
      controllers/excel_info.go
  2. 75 0
      services/excel/lucky_sheet.go

+ 3 - 0
controllers/excel_info.go

@@ -74,6 +74,9 @@ func (this *ExcelInfoController) GetTableDetail() {
 		fmt.Println("err:", err)
 		return
 	}
+
+	tableData = excel.HandleTableCell(tableData)
+
 	resp.TableInfo = tableData
 	resp.ExcelName = excelInfo.ExcelName
 	resp.ExcelImage = excelInfo.ExcelImage

+ 75 - 0
services/excel/lucky_sheet.go

@@ -4,6 +4,7 @@ import (
 	"encoding/json"
 	"fmt"
 	"hongze/hongze_chart_lib/utils"
+	"sort"
 )
 
 type LuckySheetDataBak struct {
@@ -494,3 +495,77 @@ func handleCellVal(tmpTableColData LuckySheetDataValue) (valueStr string) {
 	}
 	return
 }
+
+type CellPosition struct {
+	RowIndex    int
+	ColumnIndex int
+}
+
+// HandleTableCell 前端d毛需要我根据合并单元格处理掉多余的单元格
+func HandleTableCell(oldTableData TableData) (newTableData TableData) {
+	newTableData = oldTableData
+
+	mergeList := oldTableData.MergeList
+	lenMergeList := len(mergeList)
+	if lenMergeList <= 0 {
+		return
+	}
+
+	deleteRowMap := make(map[int]map[int]int)
+	deleteRowList := make([]int, 0)
+	deleteColumnMap := make(map[int][]int, 0)
+	for i := lenMergeList - 1; i >= 0; i-- {
+		tmpMerge := mergeList[i]
+
+		//
+		for rowIndex := tmpMerge.MergeRowNum; rowIndex >= 0; rowIndex-- {
+			tmpColumnMap := make(map[int]int)
+			if columnMap, ok := deleteRowMap[tmpMerge.StartRowIndex+rowIndex]; ok {
+				tmpColumnMap = columnMap
+			} else {
+				deleteRowList = append(deleteRowList, tmpMerge.StartRowIndex+rowIndex)
+			}
+
+			deleteColumnList := make([]int, 0)
+			if columnList, ok := deleteColumnMap[tmpMerge.StartRowIndex+rowIndex]; ok {
+				deleteColumnList = columnList
+			}
+
+			for columnIndex := tmpMerge.MergeColumnNum; columnIndex >= 0; columnIndex-- {
+				if rowIndex == 0 && columnIndex == 0 {
+					continue
+				}
+				tmpColumnMap[tmpMerge.StartColumnIndex+columnIndex] = tmpMerge.StartColumnIndex + columnIndex
+				deleteColumnList = append(deleteColumnList, tmpMerge.StartColumnIndex+columnIndex)
+			}
+
+			// 待删除的行
+			deleteRowMap[tmpMerge.StartRowIndex+rowIndex] = tmpColumnMap
+			// 该行待删除的列
+			deleteColumnMap[tmpMerge.StartRowIndex+rowIndex] = deleteColumnList
+		}
+	}
+
+	sort.Ints(deleteRowList)
+	//for k, v := range deleteRowList {
+	//	fmt.Println("k:", k, "v:", v)
+	//}
+	//return
+	//fmt.Println("===============")
+
+	for i := len(deleteRowList) - 1; i >= 0; i-- {
+		rowIndex := deleteRowList[i]
+		deleteColumnList := deleteColumnMap[rowIndex]
+		sort.Ints(deleteColumnList)
+		for i := len(deleteColumnList) - 1; i >= 0; i-- {
+			columnIndex := deleteColumnList[i]
+
+			tmpColumnDataList := newTableData.TableDataList[rowIndex]
+
+			newTableData.TableDataList[rowIndex] = append(tmpColumnDataList[:columnIndex], tmpColumnDataList[columnIndex+1:]...) // 删除开头N个元素
+			//fmt.Println("row:", rowIndex, "===column:", columnIndex)
+		}
+	}
+
+	return
+}