|
@@ -297,9 +297,9 @@ func (item *LuckySheetData) GetTableDataByLuckySheetDataStr() (selfTableData Tab
|
|
|
rowHeightList = append(rowHeightList, tmpHeight)
|
|
|
|
|
|
tmpRowData, ok := tableDataMap[i]
|
|
|
+
|
|
|
if !ok {
|
|
|
- tableDataList = append(tableDataList, tmpTableColDataList)
|
|
|
- continue
|
|
|
+ tmpRowData = make(map[int64]LuckySheetDataValue)
|
|
|
}
|
|
|
|
|
|
var j int64
|
|
@@ -329,9 +329,41 @@ func (item *LuckySheetData) GetTableDataByLuckySheetDataStr() (selfTableData Tab
|
|
|
tableDataList = append(tableDataList, tmpTableColDataList)
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ tableDataList, tableRemoveNum, rowHeightList, rowWidthList, tableDataMergeList := handleTableDataList(tableDataList, item.Config.Merge, rowHeightList, rowWidthList)
|
|
|
+
|
|
|
+
|
|
|
+ {
|
|
|
+
|
|
|
+ selfTableData.RemoveTopRow = tableRemoveNum.RemoveTopRow
|
|
|
+ selfTableData.RemoveBottomRow = tableRemoveNum.RemoveBottomRow
|
|
|
+ selfTableData.RemoveLeftColumn = tableRemoveNum.RemoveLeftColumn
|
|
|
+ selfTableData.RemoveRightColumn = tableRemoveNum.RemoveRightColumn
|
|
|
+ }
|
|
|
+ selfTableData.TableDataList = tableDataList
|
|
|
+ selfTableData.RowWidthList = rowWidthList
|
|
|
+ selfTableData.RowHeightList = rowHeightList
|
|
|
+ selfTableData.MergeList = tableDataMergeList
|
|
|
+
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+type TableRemoveNum struct {
|
|
|
+ RemoveTopRow int `description:"移除表格上方的行数"`
|
|
|
+ RemoveBottomRow int `description:"移除表格下方的行数"`
|
|
|
+ RemoveLeftColumn int `description:"移除表格左侧的列数"`
|
|
|
+ RemoveRightColumn int `description:"移除表格右侧的列数"`
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+func handleTableDataList(tableDataList [][]LuckySheetDataValue, luckySheetDataConfigMergeList map[string]LuckySheetDataConfigMerge, rowHeightList, rowWidthList []float64) ([][]LuckySheetDataValue, TableRemoveNum, []float64, []float64, []TableDataMerge) {
|
|
|
+
|
|
|
+ var removeTopRow, removeBottomRow, removeLeftColumn, removeRightColumn int
|
|
|
+ tableDataMergeList := make([]TableDataMerge, 0)
|
|
|
+
|
|
|
|
|
|
lenRow := len(tableDataList)
|
|
|
-
|
|
|
|
|
|
deleteRowIndexList := make([]int, 0)
|
|
|
if lenRow > 0 {
|
|
@@ -340,7 +372,7 @@ func (item *LuckySheetData) GetTableDataByLuckySheetDataStr() (selfTableData Tab
|
|
|
for rowIndex := 0; rowIndex < lenRow; rowIndex++ {
|
|
|
isDelete := true
|
|
|
for _, v := range tableDataList[rowIndex] {
|
|
|
- if v.Monitor != `` {
|
|
|
+ if v.Monitor != `` || (v.MergeCell.Row != rowIndex && v.MergeCell.Row != 0) {
|
|
|
isDelete = false
|
|
|
flag = true
|
|
|
break
|
|
@@ -350,7 +382,7 @@ func (item *LuckySheetData) GetTableDataByLuckySheetDataStr() (selfTableData Tab
|
|
|
break
|
|
|
}
|
|
|
if isDelete {
|
|
|
- selfTableData.RemoveTopRow++
|
|
|
+ removeTopRow++
|
|
|
deleteRowIndexList = append(deleteRowIndexList, rowIndex)
|
|
|
}
|
|
|
}
|
|
@@ -362,7 +394,7 @@ func (item *LuckySheetData) GetTableDataByLuckySheetDataStr() (selfTableData Tab
|
|
|
for rowIndex := lenRow - 1; rowIndex >= 0; rowIndex-- {
|
|
|
isDelete := true
|
|
|
for _, v := range tableDataList[rowIndex] {
|
|
|
- if v.Monitor != `` || (v.MergeCell.Row != rowIndex && v.MergeCell.Row != 0) {
|
|
|
+ if v.Monitor != `` {
|
|
|
isDelete = false
|
|
|
flag = true
|
|
|
break
|
|
@@ -373,7 +405,7 @@ func (item *LuckySheetData) GetTableDataByLuckySheetDataStr() (selfTableData Tab
|
|
|
}
|
|
|
if isDelete {
|
|
|
deleteBottomRowIndexList = append(deleteBottomRowIndexList, rowIndex)
|
|
|
- selfTableData.RemoveBottomRow++
|
|
|
+ removeBottomRow++
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -393,12 +425,12 @@ func (item *LuckySheetData) GetTableDataByLuckySheetDataStr() (selfTableData Tab
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+
|
|
|
deleteColumnIndexList := make([]int, 0)
|
|
|
if len(tableDataList) > 0 {
|
|
|
var flag = false
|
|
|
lenColumn := len(tableDataList[0])
|
|
|
-
|
|
|
+
|
|
|
for columnIndex := 0; columnIndex < lenColumn; columnIndex++ {
|
|
|
isDelete := true
|
|
|
for _, v := range tableDataList {
|
|
@@ -406,7 +438,7 @@ func (item *LuckySheetData) GetTableDataByLuckySheetDataStr() (selfTableData Tab
|
|
|
if len(v) <= 0 {
|
|
|
continue
|
|
|
}
|
|
|
- if v[columnIndex].Monitor != `` {
|
|
|
+ if v[columnIndex].Monitor != `` || (v[columnIndex].MergeCell.Column != columnIndex && v[columnIndex].MergeCell.Column != 0) {
|
|
|
isDelete = false
|
|
|
flag = true
|
|
|
break
|
|
@@ -416,18 +448,22 @@ func (item *LuckySheetData) GetTableDataByLuckySheetDataStr() (selfTableData Tab
|
|
|
break
|
|
|
}
|
|
|
if isDelete {
|
|
|
- selfTableData.RemoveLeftColumn++
|
|
|
+ removeLeftColumn++
|
|
|
deleteColumnIndexList = append(deleteColumnIndexList, columnIndex)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+
|
|
|
flag = false
|
|
|
-
|
|
|
+
|
|
|
deleteTailColumnIndexList := make([]int, 0)
|
|
|
for columnIndex := lenColumn - 1; columnIndex >= 0; columnIndex-- {
|
|
|
isDelete := true
|
|
|
for _, v := range tableDataList {
|
|
|
+
|
|
|
+ if len(v) <= 0 {
|
|
|
+ continue
|
|
|
+ }
|
|
|
if v[columnIndex].Monitor != `` || (v[columnIndex].MergeCell.Column != columnIndex && v[columnIndex].MergeCell.Column != 0) {
|
|
|
isDelete = false
|
|
|
flag = true
|
|
@@ -439,7 +475,7 @@ func (item *LuckySheetData) GetTableDataByLuckySheetDataStr() (selfTableData Tab
|
|
|
}
|
|
|
if isDelete {
|
|
|
deleteTailColumnIndexList = append(deleteTailColumnIndexList, columnIndex)
|
|
|
- selfTableData.RemoveRightColumn++
|
|
|
+ removeRightColumn++
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -462,10 +498,9 @@ func (item *LuckySheetData) GetTableDataByLuckySheetDataStr() (selfTableData Tab
|
|
|
}
|
|
|
|
|
|
|
|
|
- tableDataMergeList := make([]TableDataMerge, 0)
|
|
|
- for _, v := range item.Config.Merge {
|
|
|
- indexRow := v.Row - selfTableData.RemoveTopRow
|
|
|
- indexColumn := v.Column - selfTableData.RemoveLeftColumn
|
|
|
+ for _, v := range luckySheetDataConfigMergeList {
|
|
|
+ indexRow := v.Row - removeTopRow
|
|
|
+ indexColumn := v.Column - removeLeftColumn
|
|
|
|
|
|
tableDataMerge := TableDataMerge{
|
|
|
StartRowIndex: indexRow,
|
|
@@ -476,13 +511,12 @@ func (item *LuckySheetData) GetTableDataByLuckySheetDataStr() (selfTableData Tab
|
|
|
tableDataMergeList = append(tableDataMergeList, tableDataMerge)
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- selfTableData.TableDataList = tableDataList
|
|
|
- selfTableData.RowWidthList = rowWidthList
|
|
|
- selfTableData.RowHeightList = rowHeightList
|
|
|
- selfTableData.MergeList = tableDataMergeList
|
|
|
-
|
|
|
- return
|
|
|
+ return tableDataList, TableRemoveNum{
|
|
|
+ RemoveTopRow: removeTopRow,
|
|
|
+ RemoveBottomRow: removeBottomRow,
|
|
|
+ RemoveLeftColumn: removeLeftColumn,
|
|
|
+ RemoveRightColumn: removeRightColumn,
|
|
|
+ }, rowHeightList, rowWidthList, tableDataMergeList
|
|
|
}
|
|
|
|
|
|
|
|
@@ -573,3 +607,241 @@ func HandleTableCell(oldTableData TableData) (newTableData TableData) {
|
|
|
|
|
|
return
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+func (item *LuckySheetData) GetTableDataByLuckySheetDataStrBak() (selfTableData TableData, err error) {
|
|
|
+ luckySheetCellDataList := item.CellData
|
|
|
+
|
|
|
+ tableDataMap := make(map[int64]map[int64]LuckySheetDataValue)
|
|
|
+
|
|
|
+ var maxRow, maxCol int64
|
|
|
+ for _, v := range luckySheetCellDataList {
|
|
|
+
|
|
|
+ if v.Row > maxRow {
|
|
|
+ maxRow = v.Row
|
|
|
+ }
|
|
|
+ if v.Col > maxCol {
|
|
|
+ maxCol = v.Col
|
|
|
+ }
|
|
|
+ var tmpRow map[int64]LuckySheetDataValue
|
|
|
+
|
|
|
+ tmpRow, ok := tableDataMap[v.Row]
|
|
|
+ if ok {
|
|
|
+ tmpRow[v.Col] = v.Value
|
|
|
+ } else {
|
|
|
+ tmpRow = make(map[int64]LuckySheetDataValue)
|
|
|
+ tmpRow[v.Col] = v.Value
|
|
|
+ }
|
|
|
+ tableDataMap[v.Row] = tmpRow
|
|
|
+ }
|
|
|
+
|
|
|
+ tableDataList := make([][]LuckySheetDataValue, 0)
|
|
|
+ var i int64
|
|
|
+
|
|
|
+
|
|
|
+ configColumnConf := item.Config.Columnlen
|
|
|
+ rowWidthMap := make(map[int]float64)
|
|
|
+ rowWidthList := make([]float64, 0)
|
|
|
+
|
|
|
+
|
|
|
+ configRowConf := item.Config.Rowlen
|
|
|
+ rowHeightList := make([]float64, 0)
|
|
|
+
|
|
|
+ for i = 0; i <= maxRow; i++ {
|
|
|
+
|
|
|
+ tmpTableColDataList := make([]LuckySheetDataValue, 0)
|
|
|
+
|
|
|
+ tmpHeight, ok := configRowConf[fmt.Sprint(i)]
|
|
|
+ if !ok {
|
|
|
+ tmpHeight = 0
|
|
|
+ }
|
|
|
+ rowHeightList = append(rowHeightList, tmpHeight)
|
|
|
+
|
|
|
+ tmpRowData, ok := tableDataMap[i]
|
|
|
+
|
|
|
+ if !ok {
|
|
|
+ tmpRowData = make(map[int64]LuckySheetDataValue)
|
|
|
+ }
|
|
|
+
|
|
|
+ var j int64
|
|
|
+ for j = 0; j <= maxCol; j++ {
|
|
|
+ tmpTableColData, ok := tmpRowData[j]
|
|
|
+ if !ok {
|
|
|
+ tmpTableColData = LuckySheetDataValue{}
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ tmpTableColData.Monitor = handleCellVal(tmpTableColData)
|
|
|
+
|
|
|
+ tmpTableColDataList = append(tmpTableColDataList, tmpTableColData)
|
|
|
+
|
|
|
+
|
|
|
+ tmpWidth, ok := configColumnConf[fmt.Sprint(j)]
|
|
|
+ if !ok {
|
|
|
+ tmpWidth = 0
|
|
|
+ }
|
|
|
+ rowIndex := len(tmpTableColDataList) - 1
|
|
|
+ if _, ok2 := rowWidthMap[rowIndex]; !ok2 {
|
|
|
+ rowWidthList = append(rowWidthList, tmpWidth)
|
|
|
+ }
|
|
|
+ rowWidthMap[rowIndex] = tmpWidth
|
|
|
+ }
|
|
|
+
|
|
|
+ tableDataList = append(tableDataList, tmpTableColDataList)
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ lenRow := len(tableDataList)
|
|
|
+
|
|
|
+
|
|
|
+ deleteRowIndexList := make([]int, 0)
|
|
|
+ if lenRow > 0 {
|
|
|
+ var flag = false
|
|
|
+
|
|
|
+ for rowIndex := 0; rowIndex < lenRow; rowIndex++ {
|
|
|
+ isDelete := true
|
|
|
+ for _, v := range tableDataList[rowIndex] {
|
|
|
+ if v.Monitor != `` {
|
|
|
+ isDelete = false
|
|
|
+ flag = true
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if flag {
|
|
|
+ break
|
|
|
+ }
|
|
|
+ if isDelete {
|
|
|
+ selfTableData.RemoveTopRow++
|
|
|
+ deleteRowIndexList = append(deleteRowIndexList, rowIndex)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ flag = false
|
|
|
+
|
|
|
+ deleteBottomRowIndexList := make([]int, 0)
|
|
|
+ for rowIndex := lenRow - 1; rowIndex >= 0; rowIndex-- {
|
|
|
+ isDelete := true
|
|
|
+ for _, v := range tableDataList[rowIndex] {
|
|
|
+ if v.Monitor != `` || (v.MergeCell.Row != rowIndex && v.MergeCell.Row != 0) {
|
|
|
+ isDelete = false
|
|
|
+ flag = true
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if flag {
|
|
|
+ break
|
|
|
+ }
|
|
|
+ if isDelete {
|
|
|
+ deleteBottomRowIndexList = append(deleteBottomRowIndexList, rowIndex)
|
|
|
+ selfTableData.RemoveBottomRow++
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if len(deleteBottomRowIndexList) > 0 {
|
|
|
+ deleteRowIndexList = append(deleteRowIndexList, utils.RevSlice(deleteBottomRowIndexList)...)
|
|
|
+ }
|
|
|
+
|
|
|
+ lenDeleteRow := len(deleteRowIndexList)
|
|
|
+ if lenDeleteRow > 0 {
|
|
|
+ for rowIndex := lenDeleteRow - 1; rowIndex >= 0; rowIndex-- {
|
|
|
+
|
|
|
+ tableDataList = append(tableDataList[:deleteRowIndexList[rowIndex]], tableDataList[deleteRowIndexList[rowIndex]+1:]...)
|
|
|
+
|
|
|
+
|
|
|
+ rowHeightList = append(rowHeightList[:deleteRowIndexList[rowIndex]], rowHeightList[deleteRowIndexList[rowIndex]+1:]...)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ deleteColumnIndexList := make([]int, 0)
|
|
|
+ if len(tableDataList) > 0 {
|
|
|
+ var flag = false
|
|
|
+ lenColumn := len(tableDataList[0])
|
|
|
+
|
|
|
+ for columnIndex := 0; columnIndex < lenColumn; columnIndex++ {
|
|
|
+ isDelete := true
|
|
|
+ for _, v := range tableDataList {
|
|
|
+
|
|
|
+ if len(v) <= 0 {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ if v[columnIndex].Monitor != `` {
|
|
|
+ isDelete = false
|
|
|
+ flag = true
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if flag {
|
|
|
+ break
|
|
|
+ }
|
|
|
+ if isDelete {
|
|
|
+ selfTableData.RemoveLeftColumn++
|
|
|
+ deleteColumnIndexList = append(deleteColumnIndexList, columnIndex)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ flag = false
|
|
|
+
|
|
|
+ deleteTailColumnIndexList := make([]int, 0)
|
|
|
+ for columnIndex := lenColumn - 1; columnIndex >= 0; columnIndex-- {
|
|
|
+ isDelete := true
|
|
|
+ for _, v := range tableDataList {
|
|
|
+ if v[columnIndex].Monitor != `` || (v[columnIndex].MergeCell.Column != columnIndex && v[columnIndex].MergeCell.Column != 0) {
|
|
|
+ isDelete = false
|
|
|
+ flag = true
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if flag {
|
|
|
+ break
|
|
|
+ }
|
|
|
+ if isDelete {
|
|
|
+ deleteTailColumnIndexList = append(deleteTailColumnIndexList, columnIndex)
|
|
|
+ selfTableData.RemoveRightColumn++
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if len(deleteTailColumnIndexList) > 0 {
|
|
|
+ deleteColumnIndexList = append(deleteColumnIndexList, utils.RevSlice(deleteTailColumnIndexList)...)
|
|
|
+ }
|
|
|
+
|
|
|
+ lenDeleteColumn := len(deleteColumnIndexList)
|
|
|
+ if lenDeleteColumn > 0 {
|
|
|
+ for columnIndex := lenDeleteColumn - 1; columnIndex >= 0; columnIndex-- {
|
|
|
+
|
|
|
+ for k, v := range tableDataList {
|
|
|
+ tableDataList[k] = append(v[:deleteColumnIndexList[columnIndex]], v[deleteColumnIndexList[columnIndex]+1:]...)
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ rowWidthList = append(rowWidthList[:deleteColumnIndexList[columnIndex]], rowWidthList[deleteColumnIndexList[columnIndex]+1:]...)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ tableDataMergeList := make([]TableDataMerge, 0)
|
|
|
+ for _, v := range item.Config.Merge {
|
|
|
+ indexRow := v.Row - selfTableData.RemoveTopRow
|
|
|
+ indexColumn := v.Column - selfTableData.RemoveLeftColumn
|
|
|
+
|
|
|
+ tableDataMerge := TableDataMerge{
|
|
|
+ StartRowIndex: indexRow,
|
|
|
+ StartColumnIndex: indexColumn,
|
|
|
+ MergeRowNum: v.Rs - 1,
|
|
|
+ MergeColumnNum: v.Cs - 1,
|
|
|
+ }
|
|
|
+ tableDataMergeList = append(tableDataMergeList, tableDataMerge)
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ selfTableData.TableDataList = tableDataList
|
|
|
+ selfTableData.RowWidthList = rowWidthList
|
|
|
+ selfTableData.RowHeightList = rowHeightList
|
|
|
+ selfTableData.MergeList = tableDataMergeList
|
|
|
+
|
|
|
+ return
|
|
|
+}
|