|
@@ -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
|
|
|
+}
|
|
|
+
|
|
|
+// TableRemoveNum 上下左右移除的空行空列数量
|
|
|
+type TableRemoveNum struct {
|
|
|
+ RemoveTopRow int `description:"移除表格上方的行数"`
|
|
|
+ RemoveBottomRow int `description:"移除表格下方的行数"`
|
|
|
+ RemoveLeftColumn int `description:"移除表格左侧的列数"`
|
|
|
+ RemoveRightColumn int `description:"移除表格右侧的列数"`
|
|
|
+}
|
|
|
+
|
|
|
+// handleTableDataList 表格数据处理(移除上下左右的空行空列)
|
|
|
+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
|
|
|
}
|
|
|
|
|
|
// handleCellVal 处理单元格数据
|
|
@@ -573,3 +607,241 @@ func HandleTableCell(oldTableData TableData) (newTableData TableData) {
|
|
|
|
|
|
return
|
|
|
}
|
|
|
+
|
|
|
+// GetTableDataByLuckySheetDataStrBak 通过LuckySheet的string数据获取表格数据(备份:2022-08-23 10:30:32)
|
|
|
+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 {
|
|
|
+ //fmt.Println("row:", v.Row, "=====col:", v.Col)
|
|
|
+ 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:]...) // 删除开头N个元素
|
|
|
+
|
|
|
+ //表格高度
|
|
|
+ rowHeightList = append(rowHeightList[:deleteRowIndexList[rowIndex]], rowHeightList[deleteRowIndexList[rowIndex]+1:]...) // 删除开头N个元素
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //移除前后空列
|
|
|
+ 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:]...) // 删除开头N个元素
|
|
|
+ }
|
|
|
+
|
|
|
+ //表格宽度
|
|
|
+ rowWidthList = append(rowWidthList[:deleteColumnIndexList[columnIndex]], rowWidthList[deleteColumnIndexList[columnIndex]+1:]...) // 删除开头N个元素
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //处理合并单元格
|
|
|
+ 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
|
|
|
+}
|