Commit 3eb9d9a7 by liyijie

fix row_cell merge logic

parent da71d9f8
......@@ -91,9 +91,14 @@ module TalltyImportExport
headers.each_with_index do |header, col_index|
_data = handle_data(record, header, index)
if header[:merge].present? && last_row.present? && _data == last_row[col_index]
merge_column_hash[col_index] ||= []
merge_column_hash[col_index] << index + first_content_row_index
merge_column_hash[col_index] << index + first_content_row_index + 1
# 这里使用二维数组,每个数组里都是列内容相同的各行
merge_column_hash[col_index] ||= [[]]
if merge_column_hash[col_index].last.last == index + first_content_row_index - 1
# 说明内容和上面的是延续的,继续加入之前的数组
merge_column_hash[col_index].last << index + first_content_row_index
else
merge_column_hash[col_index] << [index + first_content_row_index - 1, index + first_content_row_index]
end
end
row.push(_data)
end
......@@ -103,7 +108,7 @@ module TalltyImportExport
# 需要根据column进行多行的内容合并
if merge_column_hash.present?
merge_column_hash.each do |col_index, row_arr|
split_arr(row_arr).each do |arr|
row_arr.each do |arr|
sheet.merge_cells(
Axlsx::cell_r(col_index, arr.first) + ':' + Axlsx::cell_r(col_index, arr.last)
)
......@@ -169,28 +174,5 @@ module TalltyImportExport
data
end
end
private
def split_arr continuous_arr
continuous_arr.sort.each_with_index.reduce([]) do |arr, (i, _index)|
if arr.last.nil?
arr << i
elsif i - arr.last > 2
arr << nil
arr << i
else
if arr[-2].blank?
arr << i
elsif arr[-1] - arr[-2] == i - arr[-1]
arr << i
else
arr << nil
arr << i
end
end
arr
end.split
end
end
end
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment