123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- package excel
- import (
- "fmt"
- "sort"
- )
- // 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 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]
- // 最后一行合并单元格时,就不再次移除合并的单元格,避免数组越界
- if rowIndex >= len(newTableData.TableDataList) {
- continue
- }
- tmpColumnDataList := newTableData.TableDataList[rowIndex]
- // 最后一列合并单元格时,就不再次移除合并的单元格,避免数组越界
- if columnIndex >= len(tmpColumnDataList) {
- continue
- }
- newTableData.TableDataList[rowIndex] = append(tmpColumnDataList[:columnIndex], tmpColumnDataList[columnIndex+1:]...) // 删除开头N个元素
- //fmt.Println("row:", rowIndex, "===column:", columnIndex)
- }
- }
- // 数据值处理
- for rowIndex, colList := range newTableData.TableDataList {
- for colIndex, v := range colList {
- v.Monitor = handleCellVal(v)
- colList[colIndex] = v
- }
- newTableData.TableDataList[rowIndex] = colList
- }
- return
- }
- // handleCellVal 处理单元格数据
- func handleCellVal(tmpTableColData LuckySheetDataValue) (valueStr string) {
- valueStr = tmpTableColData.Monitor
- if valueStr == `` {
- //valueStr = fmt.Sprint(cellInfo.Value)
- if valueStr == `` && tmpTableColData.CellType.S != nil {
- //不是设置在单元格上面,而是设置在文本上
- for _, cellS := range tmpTableColData.CellType.S {
- valueStr += fmt.Sprint(cellS.Value)
- }
- }
- }
- return
- }
|