You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2531 lines
86 KiB
2531 lines
86 KiB
import editor from './editor';
|
|
import formula from './formula';
|
|
import { jfrefreshgrid_adRC, jfrefreshgrid_deleteCell, jfrefreshgrid_rhcw } from './refresh';
|
|
import { datagridgrowth, getcellFormula } from './getdata';
|
|
import { setcellvalue } from './setdata';
|
|
import conditionformat from '../controllers/conditionformat';
|
|
import luckysheetFreezen from '../controllers/freezen';
|
|
import { selectHightlightShow } from '../controllers/select';
|
|
import { luckysheet_searcharray } from '../controllers/sheetSearch';
|
|
import {checkProtectionAuthorityNormal,checkProtectionNotEnable} from '../controllers/protection';
|
|
import { getSheetIndex } from '../methods/get';
|
|
import Store from '../store';
|
|
|
|
//增加行列
|
|
function luckysheetextendtable(type, index, value, direction, sheetIndex) {
|
|
sheetIndex = sheetIndex || Store.currentSheetIndex;
|
|
|
|
if(type=='row' && !checkProtectionAuthorityNormal(sheetIndex, "insertRows")){
|
|
return;
|
|
}
|
|
else if(type=='column' && !checkProtectionAuthorityNormal(sheetIndex, "insertColumns")){
|
|
return;
|
|
}
|
|
|
|
let curOrder = getSheetIndex(sheetIndex);
|
|
let file = Store.luckysheetfile[curOrder];
|
|
let d = $.extend(true, [], file.data);
|
|
|
|
value = Math.floor(value);
|
|
let cfg = $.extend(true, {}, file.config);
|
|
|
|
//合并单元格配置变动
|
|
if(cfg["merge"] == null){
|
|
cfg["merge"] = {};
|
|
}
|
|
|
|
let merge_new = {};
|
|
for(let m in cfg["merge"]){
|
|
let mc = cfg["merge"][m];
|
|
|
|
let r = mc.r,
|
|
c = mc.c,
|
|
rs = mc.rs,
|
|
cs = mc.cs;
|
|
|
|
if(type == "row"){
|
|
if(index < r){
|
|
merge_new[(r + value) + "_" + c] = { "r": r + value, "c": c, "rs": rs, "cs": cs };
|
|
}
|
|
else if(index == r){
|
|
if(direction == "lefttop"){
|
|
merge_new[(r + value) + "_" + c] = { "r": r + value, "c": c, "rs": rs, "cs": cs };
|
|
}
|
|
else{
|
|
merge_new[r + "_" + c] = { "r": r, "c": c, "rs": rs + value, "cs": cs };
|
|
}
|
|
}
|
|
else if(index < r + rs - 1){
|
|
merge_new[r + "_" + c] = { "r": r, "c": c, "rs": rs + value, "cs": cs };
|
|
}
|
|
else if(index == r + rs - 1){
|
|
if(direction == "lefttop"){
|
|
merge_new[r + "_" + c] = { "r": r, "c": c, "rs": rs + value, "cs": cs };
|
|
}
|
|
else{
|
|
merge_new[r + "_" + c] = { "r": r, "c": c, "rs": rs, "cs": cs };
|
|
}
|
|
}
|
|
else{
|
|
merge_new[r + "_" + c] = { "r": r, "c": c, "rs": rs, "cs": cs };
|
|
}
|
|
}
|
|
else if(type == "column"){
|
|
if(index < c){
|
|
merge_new[r + "_" + (c + value)] = { "r": r, "c": c + value, "rs": rs, "cs": cs };
|
|
}
|
|
else if(index == c){
|
|
if(direction == "lefttop"){
|
|
merge_new[r + "_" + (c + value)] = { "r": r, "c": c + value, "rs": rs, "cs": cs };
|
|
}
|
|
else{
|
|
merge_new[r + "_" + c] = { "r": r, "c": c, "rs": rs, "cs": cs + value };
|
|
}
|
|
}
|
|
else if(index < c + cs - 1){
|
|
merge_new[r + "_" + c] = { "r": r, "c": c, "rs": rs, "cs": cs + value };
|
|
}
|
|
else if(index == c + cs - 1){
|
|
if(direction == "lefttop"){
|
|
merge_new[r + "_" + c] = { "r": r, "c": c, "rs": rs, "cs": cs + value };
|
|
}
|
|
else{
|
|
merge_new[r + "_" + c] = { "r": r, "c": c, "rs": rs, "cs": cs };
|
|
}
|
|
}
|
|
else{
|
|
merge_new[r + "_" + c] = { "r": r, "c": c, "rs": rs, "cs": cs };
|
|
}
|
|
}
|
|
}
|
|
cfg["merge"] = merge_new;
|
|
|
|
//公式配置变动
|
|
let calcChain = file.calcChain;
|
|
let newCalcChain = [];
|
|
if(calcChain != null && calcChain.length > 0){
|
|
for(let i = 0; i < calcChain.length; i++){
|
|
let calc = $.extend(true, {}, calcChain[i]);
|
|
let calc_r = calc.r, calc_c = calc.c, calc_i = calc.index, calc_funcStr = getcellFormula(calc_r, calc_c, calc_i);
|
|
|
|
if(type == "row"){
|
|
let functionStr = "=" + formula.functionStrChange(calc_funcStr, "add", "row", direction, index, value);
|
|
|
|
if(d[calc_r][calc_c] && d[calc_r][calc_c].f == calc_funcStr){
|
|
d[calc_r][calc_c].f = functionStr;
|
|
}
|
|
|
|
if(direction == "lefttop"){
|
|
if(calc_r >= index){
|
|
calc.r += value;
|
|
}
|
|
}
|
|
else if(direction == "rightbottom"){
|
|
if(calc_r > index){
|
|
calc.r += value;
|
|
}
|
|
}
|
|
|
|
newCalcChain.push(calc);
|
|
}
|
|
else if(type == "column"){
|
|
let functionStr = "=" + formula.functionStrChange(calc_funcStr, "add", "col", direction, index, value);
|
|
|
|
if(d[calc_r][calc_c] && d[calc_r][calc_c].f == calc_funcStr){
|
|
d[calc_r][calc_c].f = functionStr;
|
|
}
|
|
|
|
if(direction == "lefttop"){
|
|
if(calc_c >= index){
|
|
calc.c += value;
|
|
}
|
|
}
|
|
else if(direction == "rightbottom"){
|
|
if(calc_c > index){
|
|
calc.c += value;
|
|
}
|
|
}
|
|
|
|
newCalcChain.push(calc);
|
|
}
|
|
}
|
|
}
|
|
|
|
//筛选配置变动
|
|
let filter_select = file.filter_select;
|
|
let filter = file.filter;
|
|
let newFilterObj = null;
|
|
if(filter_select != null && JSON.stringify(filter_select) != "{}"){
|
|
newFilterObj = { "filter_select": null, "filter": null };
|
|
|
|
let f_r1 = filter_select.row[0], f_r2 = filter_select.row[1];
|
|
let f_c1 = filter_select.column[0], f_c2 = filter_select.column[1];
|
|
|
|
if(type == "row"){
|
|
if(f_r1 < index){
|
|
if(f_r2 == index && direction == "lefttop"){
|
|
f_r2 += value;
|
|
}
|
|
else if(f_r2 > index){
|
|
f_r2 += value;
|
|
}
|
|
}
|
|
else if(f_r1 == index){
|
|
if(direction == "lefttop"){
|
|
f_r1 += value;
|
|
f_r2 += value;
|
|
}
|
|
else if(direction == "rightbottom" && f_r2 > index){
|
|
f_r2 += value;
|
|
}
|
|
}
|
|
else{
|
|
f_r1 += value;
|
|
f_r2 += value;
|
|
}
|
|
|
|
if(filter != null){
|
|
newFilterObj.filter = {};
|
|
|
|
for(let k in filter){
|
|
let f_rowhidden = filter[k].rowhidden;
|
|
let f_rowhidden_new = {};
|
|
|
|
for(let n in f_rowhidden){
|
|
n = parseFloat(n);
|
|
|
|
if(n < index){
|
|
f_rowhidden_new[n] = 0;
|
|
}
|
|
else if(n == index){
|
|
if(direction == "lefttop"){
|
|
f_rowhidden_new[n + value] = 0;
|
|
}
|
|
else if(direction == "rightbottom"){
|
|
f_rowhidden_new[n] = 0;
|
|
}
|
|
}
|
|
else{
|
|
f_rowhidden_new[n + value] = 0;
|
|
}
|
|
}
|
|
|
|
newFilterObj.filter[k] = $.extend(true, {}, filter[k]);
|
|
newFilterObj.filter[k].rowhidden = f_rowhidden_new;
|
|
newFilterObj.filter[k].str = f_r1;
|
|
newFilterObj.filter[k].edr = f_r2;
|
|
}
|
|
}
|
|
}
|
|
else if(type == "column"){
|
|
if(f_c1 < index){
|
|
if(f_c2 == index && direction == "lefttop"){
|
|
f_c2 += value;
|
|
}
|
|
else if(f_c2 > index){
|
|
f_c2 += value;
|
|
}
|
|
}
|
|
else if(f_c1 == index){
|
|
if(direction == "lefttop"){
|
|
f_c1 += value;
|
|
f_c2 += value;
|
|
}
|
|
else if(direction == "rightbottom" && f_c2 > index){
|
|
f_c2 += value;
|
|
}
|
|
}
|
|
else{
|
|
f_c1 += value;
|
|
f_c2 += value;
|
|
}
|
|
|
|
if(filter != null){
|
|
newFilterObj.filter = {};
|
|
|
|
for(let k in filter){
|
|
let f_cindex = filter[k].cindex;
|
|
|
|
if(f_cindex == index && direction == "lefttop"){
|
|
f_cindex += value;
|
|
}
|
|
else if(f_cindex > index){
|
|
f_cindex += value;
|
|
}
|
|
|
|
newFilterObj.filter[f_cindex - f_c1] = $.extend(true, {}, filter[k]);
|
|
newFilterObj.filter[f_cindex - f_c1].cindex = f_cindex;
|
|
newFilterObj.filter[f_cindex - f_c1].stc = f_c1;
|
|
newFilterObj.filter[f_cindex - f_c1].edc = f_c2;
|
|
}
|
|
}
|
|
}
|
|
|
|
newFilterObj.filter_select = { "row": [f_r1, f_r2], "column": [f_c1, f_c2] };
|
|
}
|
|
|
|
if(newFilterObj != null && newFilterObj.filter != null){
|
|
if(cfg["rowhidden"] == null){
|
|
cfg["rowhidden"] = {};
|
|
}
|
|
|
|
for(let k in newFilterObj.filter){
|
|
let f_rowhidden = newFilterObj.filter[k].rowhidden;
|
|
|
|
for(let n in f_rowhidden){
|
|
cfg["rowhidden"][n] = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
//条件格式配置变动
|
|
let CFarr = file.luckysheet_conditionformat_save;
|
|
let newCFarr = [];
|
|
if(CFarr != null && CFarr.length > 0){
|
|
for(let i = 0; i < CFarr.length; i++){
|
|
let cf_range = CFarr[i].cellrange;
|
|
let cf_new_range = [];
|
|
|
|
for(let j = 0; j < cf_range.length; j++){
|
|
let CFr1 = cf_range[j].row[0],
|
|
CFr2 = cf_range[j].row[1],
|
|
CFc1 = cf_range[j].column[0],
|
|
CFc2 = cf_range[j].column[1];
|
|
|
|
if(type == "row"){
|
|
if(CFr1 < index){
|
|
if(CFr2 == index && direction == "lefttop"){
|
|
CFr2 += value;
|
|
}
|
|
else if(CFr2 > index){
|
|
CFr2 += value;
|
|
}
|
|
}
|
|
else if(CFr1 == index){
|
|
if(direction == "lefttop"){
|
|
CFr1 += value;
|
|
CFr2 += value;
|
|
}
|
|
else if(direction == "rightbottom" && CFr2 > index){
|
|
CFr2 += value;
|
|
}
|
|
}
|
|
else{
|
|
CFr1 += value;
|
|
CFr2 += value;
|
|
}
|
|
}
|
|
else if(type == "column"){
|
|
if(CFc1 < index){
|
|
if(CFc2 == index && direction == "lefttop"){
|
|
CFc2 += value;
|
|
}
|
|
else if(CFc2 > index){
|
|
CFc2 += value;
|
|
}
|
|
}
|
|
else if(CFc1 == index){
|
|
if(direction == "lefttop"){
|
|
CFc1 += value;
|
|
CFc2 += value;
|
|
}
|
|
else if(direction == "rightbottom" && CFc2 > index){
|
|
CFc2 += value;
|
|
}
|
|
}
|
|
else{
|
|
CFc1 += value;
|
|
CFc2 += value;
|
|
}
|
|
}
|
|
|
|
cf_new_range.push({ "row": [CFr1, CFr2], "column": [CFc1, CFc2] });
|
|
}
|
|
|
|
let cf = $.extend(true, {}, CFarr[i]);
|
|
cf.cellrange = cf_new_range;
|
|
|
|
newCFarr.push(cf);
|
|
}
|
|
}
|
|
|
|
//交替颜色配置变动
|
|
let AFarr = file.luckysheet_alternateformat_save;
|
|
let newAFarr = [];
|
|
if(AFarr != null && AFarr.length > 0){
|
|
for(let i = 0; i < AFarr.length; i++){
|
|
let AFr1 = AFarr[i].cellrange.row[0],
|
|
AFr2 = AFarr[i].cellrange.row[1],
|
|
AFc1 = AFarr[i].cellrange.column[0],
|
|
AFc2 = AFarr[i].cellrange.column[1];
|
|
|
|
let af = $.extend(true, {}, AFarr[i]);
|
|
|
|
if(type == "row"){
|
|
if(AFr1 < index){
|
|
if(AFr2 == index && direction == "lefttop"){
|
|
AFr2 += value;
|
|
}
|
|
else if(AFr2 > index){
|
|
AFr2 += value;
|
|
}
|
|
}
|
|
else if(AFr1 == index){
|
|
if(direction == "lefttop"){
|
|
AFr1 += value;
|
|
AFr2 += value;
|
|
}
|
|
else if(direction == "rightbottom" && AFr2 > index){
|
|
AFr2 += value;
|
|
}
|
|
}
|
|
else{
|
|
AFr1 += value;
|
|
AFr2 += value;
|
|
}
|
|
}
|
|
else if(type == "column"){
|
|
if(AFc1 < index){
|
|
if(AFc2 == index && direction == "lefttop"){
|
|
AFc2 += value;
|
|
}
|
|
else if(AFc2 > index){
|
|
AFc2 += value;
|
|
}
|
|
}
|
|
else if(AFc1 == index){
|
|
if(direction == "lefttop"){
|
|
AFc1 += value;
|
|
AFc2 += value;
|
|
}
|
|
else if(direction == "rightbottom" && AFc2 > index){
|
|
AFc2 += value;
|
|
}
|
|
}
|
|
else{
|
|
AFc1 += value;
|
|
AFc2 += value;
|
|
}
|
|
}
|
|
|
|
af.cellrange = { "row": [AFr1, AFr2], "column": [AFc1, AFc2] };
|
|
|
|
newAFarr.push(af);
|
|
}
|
|
}
|
|
|
|
//冻结配置变动
|
|
let newFreezen = { "freezenhorizontaldata": null, "freezenverticaldata": null };
|
|
if(luckysheetFreezen.freezenhorizontaldata != null && type == "row"){
|
|
let freezen_scrollTop = luckysheetFreezen.freezenhorizontaldata[2];
|
|
let freezen_row_st = luckysheetFreezen.freezenhorizontaldata[1] - 1;
|
|
|
|
if(freezen_row_st == index && direction == "lefttop"){
|
|
freezen_row_st += value;
|
|
}
|
|
else if(freezen_row_st > index){
|
|
freezen_row_st += value;
|
|
}
|
|
|
|
let freezen_top = Store.visibledatarow[freezen_row_st] - 2 - freezen_scrollTop + Store.columeHeaderHeight;
|
|
|
|
newFreezen.freezenhorizontaldata = [
|
|
Store.visibledatarow[freezen_row_st],
|
|
freezen_row_st + 1,
|
|
freezen_scrollTop,
|
|
luckysheetFreezen.cutVolumn(Store.visibledatarow, freezen_row_st + 1),
|
|
freezen_top
|
|
];
|
|
}
|
|
else{
|
|
newFreezen.freezenhorizontaldata = luckysheetFreezen.freezenhorizontaldata;
|
|
}
|
|
|
|
if(luckysheetFreezen.freezenverticaldata != null && type == "column"){
|
|
let freezen_scrollLeft = luckysheetFreezen.freezenverticaldata[2];
|
|
let freezen_col_st = luckysheetFreezen.freezenverticaldata[1] - 1;
|
|
|
|
if(freezen_col_st == index && direction == "lefttop"){
|
|
freezen_col_st += value;
|
|
}
|
|
else if(freezen_col_st > index){
|
|
freezen_col_st += value;
|
|
}
|
|
|
|
let freezen_left = Store.visibledatacolumn[freezen_col_st] - 2 - freezen_scrollLeft + Store.rowHeaderWidth;
|
|
|
|
newFreezen.freezenverticaldata = [
|
|
Store.visibledatacolumn[freezen_col_st],
|
|
freezen_col_st + 1,
|
|
freezen_scrollLeft,
|
|
luckysheetFreezen.cutVolumn(Store.visibledatacolumn, freezen_col_st + 1),
|
|
freezen_left
|
|
];
|
|
}
|
|
else{
|
|
newFreezen.freezenverticaldata = luckysheetFreezen.freezenverticaldata;
|
|
}
|
|
|
|
//数据验证配置变动
|
|
let dataVerification = file.dataVerification;
|
|
let newDataVerification = {};
|
|
if(dataVerification != null){
|
|
for(let key in dataVerification){
|
|
let r = Number(key.split('_')[0]),
|
|
c = Number(key.split('_')[1]);
|
|
let item = dataVerification[key];
|
|
|
|
if(type == "row"){
|
|
if(index < r){
|
|
newDataVerification[(r + value) + "_" + c] = item;
|
|
}
|
|
else if(index == r){
|
|
if(direction == "lefttop"){
|
|
newDataVerification[(r + value) + "_" + c] = item;
|
|
|
|
for(let i = 0; i < value; i++){
|
|
newDataVerification[(r + i) + "_" + c] = item;
|
|
}
|
|
}
|
|
else{
|
|
newDataVerification[r + "_" + c] = item;
|
|
|
|
for(let i = 0; i < value; i++){
|
|
newDataVerification[(r + i + 1) + "_" + c] = item;
|
|
}
|
|
}
|
|
}
|
|
else{
|
|
newDataVerification[r + "_" + c] = item;
|
|
}
|
|
}
|
|
else if(type == "column"){
|
|
if(index < c){
|
|
newDataVerification[r + "_" + (c + value)] = item;
|
|
}
|
|
else if(index == c){
|
|
if(direction == "lefttop"){
|
|
newDataVerification[r + "_" + (c + value)] = item;
|
|
|
|
for(let i = 0; i < value; i++){
|
|
newDataVerification[r + "_" + (c + i)] = item;
|
|
}
|
|
}
|
|
else{
|
|
newDataVerification[r + "_" + c] = item;
|
|
|
|
for(let i = 0; i < value; i++){
|
|
newDataVerification[r + "_" + (c + i + 1)] = item;
|
|
}
|
|
}
|
|
}
|
|
else{
|
|
newDataVerification[r + "_" + c] = item;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
let type1;
|
|
if (type == "row") {
|
|
type1 = "r";
|
|
|
|
//行高配置变动
|
|
if(cfg["rowlen"] != null){
|
|
let rowlen_new = {};
|
|
|
|
for(let r in cfg["rowlen"]){
|
|
r = parseFloat(r);
|
|
|
|
if(r < index){
|
|
rowlen_new[r] = cfg["rowlen"][r];
|
|
}
|
|
else if(r == index){
|
|
if(direction == "lefttop"){
|
|
rowlen_new[(r + value)] = cfg["rowlen"][r];
|
|
}
|
|
else if(direction == "rightbottom"){
|
|
rowlen_new[r] = cfg["rowlen"][r];
|
|
}
|
|
}
|
|
else{
|
|
rowlen_new[(r + value)] = cfg["rowlen"][r];
|
|
}
|
|
}
|
|
|
|
cfg["rowlen"] = rowlen_new;
|
|
}
|
|
|
|
//隐藏行配置变动
|
|
if(cfg["rowhidden"] != null){
|
|
let rowhidden_new = {};
|
|
|
|
for(let r in cfg["rowhidden"]){
|
|
r = parseFloat(r);
|
|
|
|
if(r < index){
|
|
rowhidden_new[r] = cfg["rowhidden"][r];
|
|
}
|
|
else if(r == index){
|
|
if(direction == "lefttop"){
|
|
rowhidden_new[(r + value)] = cfg["rowhidden"][r];
|
|
}
|
|
else if(direction == "rightbottom"){
|
|
rowhidden_new[r] = cfg["rowhidden"][r];
|
|
}
|
|
}
|
|
else{
|
|
rowhidden_new[(r + value)] = cfg["rowhidden"][r];
|
|
}
|
|
}
|
|
|
|
cfg["rowhidden"] = rowhidden_new;
|
|
}
|
|
|
|
//空行模板
|
|
let row = [];
|
|
for(let c = 0; c < d[0].length; c++){
|
|
row.push(null);
|
|
}
|
|
|
|
//边框
|
|
if(cfg["borderInfo"] && cfg["borderInfo"].length > 0){
|
|
let borderInfo = [];
|
|
|
|
for(let i = 0; i < cfg["borderInfo"].length; i++){
|
|
let rangeType = cfg["borderInfo"][i].rangeType;
|
|
|
|
if(rangeType == "range"){
|
|
let borderRange = cfg["borderInfo"][i].range;
|
|
|
|
let emptyRange = [];
|
|
|
|
for(let j = 0; j < borderRange.length; j++){
|
|
let bd_r1 = borderRange[j].row[0],
|
|
bd_r2 = borderRange[j].row[1];
|
|
|
|
if(direction == "lefttop"){
|
|
if(index <= bd_r1){
|
|
bd_r1 += value;
|
|
bd_r2 += value;
|
|
}
|
|
else if(index <= bd_r2){
|
|
bd_r2 += value;
|
|
}
|
|
}
|
|
else{
|
|
if(index < bd_r1){
|
|
bd_r1 += value;
|
|
bd_r2 += value;
|
|
}
|
|
else if(index < bd_r2){
|
|
bd_r2 += value;
|
|
}
|
|
}
|
|
|
|
if(bd_r2 >= bd_r1){
|
|
emptyRange.push({ "row": [bd_r1, bd_r2], "column": borderRange[j].column });
|
|
}
|
|
}
|
|
|
|
if(emptyRange.length > 0){
|
|
let bd_obj = {
|
|
"rangeType": "range",
|
|
"borderType": cfg["borderInfo"][i].borderType,
|
|
"style": cfg["borderInfo"][i].style,
|
|
"color": cfg["borderInfo"][i].color,
|
|
"range": emptyRange
|
|
}
|
|
|
|
borderInfo.push(bd_obj);
|
|
}
|
|
}
|
|
else if(rangeType == "cell"){
|
|
let row_index = cfg["borderInfo"][i].value.row_index;
|
|
|
|
if(direction == "lefttop"){
|
|
if(index <= row_index){
|
|
row_index += value;
|
|
}
|
|
}
|
|
else{
|
|
if(index < row_index){
|
|
row_index += value;
|
|
}
|
|
}
|
|
|
|
cfg["borderInfo"][i].value.row_index = row_index;
|
|
borderInfo.push(cfg["borderInfo"][i]);
|
|
}
|
|
}
|
|
|
|
cfg["borderInfo"] = borderInfo;
|
|
}
|
|
|
|
let arr = [];
|
|
for (let r = 0; r < value; r++) {
|
|
arr.push(JSON.stringify(row));
|
|
}
|
|
|
|
if(direction == "lefttop"){
|
|
if(index == 0){
|
|
eval('d.unshift(' + arr.join(",") + ')');
|
|
}
|
|
else{
|
|
eval('d.splice(' + index + ', 0, ' + arr.join(",") + ')');
|
|
}
|
|
}
|
|
else{
|
|
eval('d.splice(' + (index + 1) + ', 0, ' + arr.join(",") + ')');
|
|
}
|
|
}
|
|
else {
|
|
type1 = "c";
|
|
|
|
//行高配置变动
|
|
if(cfg["columnlen"] != null){
|
|
let columnlen_new = {};
|
|
|
|
for(let c in cfg["columnlen"]){
|
|
c = parseFloat(c);
|
|
|
|
if(c < index){
|
|
columnlen_new[c] = cfg["columnlen"][c];
|
|
}
|
|
else if(c == index){
|
|
if(direction == "lefttop"){
|
|
columnlen_new[(c + value)] = cfg["columnlen"][c];
|
|
}
|
|
else if(direction == "rightbottom"){
|
|
columnlen_new[c] = cfg["columnlen"][c];
|
|
}
|
|
}
|
|
else{
|
|
columnlen_new[(c + value)] = cfg["columnlen"][c];
|
|
}
|
|
}
|
|
|
|
cfg["columnlen"] = columnlen_new;
|
|
}
|
|
|
|
//隐藏列配置变动
|
|
if(cfg["colhidden"] != null){
|
|
let colhidden_new = {};
|
|
|
|
for(let c in cfg["colhidden"]){
|
|
c = parseFloat(c);
|
|
|
|
if(c < index){
|
|
colhidden_new[c] = cfg["colhidden"][c];
|
|
}
|
|
else if(c == index){
|
|
if(direction == "lefttop"){
|
|
colhidden_new[(c + value)] = cfg["colhidden"][c];
|
|
}
|
|
else if(direction == "rightbottom"){
|
|
colhidden_new[c] = cfg["colhidden"][c];
|
|
}
|
|
}
|
|
else{
|
|
colhidden_new[(c + value)] = cfg["colhidden"][c];
|
|
}
|
|
}
|
|
|
|
cfg["colhidden"] = colhidden_new;
|
|
}
|
|
|
|
//空列模板
|
|
let col = [];
|
|
for(let r = 0; r < d.length; r++){
|
|
col.push(null);
|
|
}
|
|
|
|
//边框
|
|
if(cfg["borderInfo"] && cfg["borderInfo"].length > 0){
|
|
let borderInfo = [];
|
|
|
|
for(let i = 0; i < cfg["borderInfo"].length; i++){
|
|
let rangeType = cfg["borderInfo"][i].rangeType;
|
|
|
|
if(rangeType == "range"){
|
|
let borderRange = cfg["borderInfo"][i].range;
|
|
|
|
let emptyRange = [];
|
|
|
|
for(let j = 0; j < borderRange.length; j++){
|
|
let bd_c1 = borderRange[j].column[0],
|
|
bd_c2 = borderRange[j].column[1];
|
|
|
|
if(direction == "lefttop"){
|
|
if(index <= bd_c1){
|
|
bd_c1 += value;
|
|
bd_c2 += value;
|
|
}
|
|
else if(index <= bd_c2){
|
|
bd_c2 += value;
|
|
}
|
|
}
|
|
else{
|
|
if(index < bd_c1){
|
|
bd_c1 += value;
|
|
bd_c2 += value;
|
|
}
|
|
else if(index < bd_c2){
|
|
bd_c2 += value;
|
|
}
|
|
}
|
|
|
|
if(bd_c2 >= bd_c1){
|
|
emptyRange.push({ "row": borderRange[j].row, "column": [bd_c1, bd_c2] });
|
|
}
|
|
}
|
|
|
|
if(emptyRange.length > 0){
|
|
let bd_obj = {
|
|
"rangeType": "range",
|
|
"borderType": cfg["borderInfo"][i].borderType,
|
|
"style": cfg["borderInfo"][i].style,
|
|
"color": cfg["borderInfo"][i].color,
|
|
"range": emptyRange
|
|
}
|
|
|
|
borderInfo.push(bd_obj);
|
|
}
|
|
}
|
|
else if(rangeType == "cell"){
|
|
let col_index = cfg["borderInfo"][i].value.col_index;
|
|
|
|
if(direction == "lefttop"){
|
|
if(index <= col_index){
|
|
col_index += value;
|
|
}
|
|
}
|
|
else{
|
|
if(index < col_index){
|
|
col_index += value;
|
|
}
|
|
}
|
|
|
|
cfg["borderInfo"][i].value.col_index = col_index;
|
|
borderInfo.push(cfg["borderInfo"][i]);
|
|
}
|
|
}
|
|
|
|
cfg["borderInfo"] = borderInfo;
|
|
}
|
|
|
|
for (let r = 0; r < d.length; r++) {
|
|
let row = d[r];
|
|
|
|
for(let i = 0; i < value; i++){
|
|
if(direction == "lefttop"){
|
|
if(index == 0){
|
|
row.unshift(col[r]);
|
|
}
|
|
else{
|
|
row.splice(index, 0, col[r]);
|
|
}
|
|
}
|
|
else{
|
|
row.splice((index + 1), 0, col[r]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// 修改当前sheet页时刷新
|
|
if (file.index == Store.currentSheetIndex) {
|
|
jfrefreshgrid_adRC(
|
|
d,
|
|
cfg,
|
|
"addRC",
|
|
{ "index": index, "len": value, "direction": direction, "rc": type1, "restore": false },
|
|
newCalcChain,
|
|
newFilterObj,
|
|
newCFarr,
|
|
newAFarr,
|
|
newFreezen,
|
|
newDataVerification
|
|
);
|
|
}
|
|
else{
|
|
file.data = d;
|
|
file.config = cfg;
|
|
file.calcChain = newCalcChain;
|
|
file.filter = newFilterObj.filter;
|
|
file.filter_select = newFilterObj.filter_select;
|
|
file.luckysheet_conditionformat_save = newCFarr;
|
|
file.luckysheet_alternateformat_save = newAFarr;
|
|
file.dataVerification = newDataVerification;
|
|
}
|
|
|
|
let range = null;
|
|
if(type == "row"){
|
|
if(direction == "lefttop"){
|
|
range = [{ "row": [index, index + value - 1], "column": [0 , d[0].length - 1] }];
|
|
}
|
|
else{
|
|
range = [{ "row": [index + 1, index + value], "column": [0 , d[0].length - 1] }];
|
|
}
|
|
}
|
|
else{
|
|
if(direction == "lefttop"){
|
|
range = [{ "row": [0, d.length - 1], "column": [index, index + value - 1] }];
|
|
}
|
|
else{
|
|
range = [{ "row": [0, d.length - 1], "column": [index + 1, index + value] }];
|
|
}
|
|
}
|
|
|
|
file.luckysheet_select_save = range;
|
|
if (file.index == Store.currentSheetIndex) {
|
|
Store.luckysheet_select_save = range;
|
|
selectHightlightShow();
|
|
}
|
|
|
|
if (type == "row"){
|
|
let scrollLeft = $("#luckysheet-cell-main").scrollLeft(),
|
|
scrollTop = $("#luckysheet-cell-main").scrollTop();
|
|
let winH = $("#luckysheet-cell-main").height(),
|
|
winW = $("#luckysheet-cell-main").width();
|
|
|
|
let row = Store.visibledatarow[range[0].row[1]],
|
|
row_pre = range[0].row[0] - 1 == -1 ? 0 : Store.visibledatarow[range[0].row[0] - 1];
|
|
|
|
if (row - scrollTop - winH + 20 > 0) {
|
|
$("#luckysheet-scrollbar-y").scrollTop(row - winH + 20);
|
|
}
|
|
else if (row_pre - scrollTop - 20 < 0) {
|
|
$("#luckysheet-scrollbar-y").scrollTop(row_pre - 20);
|
|
}
|
|
|
|
if(value > 30){
|
|
$("#luckysheet-row-count-show").hide();
|
|
$("#luckysheet-column-count-show").hide();
|
|
}
|
|
}
|
|
}
|
|
|
|
function luckysheetextendData(rowlen, newData) {
|
|
let d = editor.deepCopyFlowData(Store.flowdata);
|
|
|
|
let cfg = $.extend(true, {}, Store.config);
|
|
if(cfg["merge"] == null){
|
|
cfg["merge"] = {};
|
|
}
|
|
|
|
let collen = d[0].length;
|
|
let addNullData = datagridgrowth([], rowlen, collen);
|
|
|
|
d = d.concat(addNullData);
|
|
|
|
for(let i = 0; i < newData.length; i++){
|
|
let r = newData[i].r,
|
|
c = newData[i].c,
|
|
v = newData[i].v;
|
|
|
|
setcellvalue(r, c, d, v);
|
|
|
|
if(v != null && v.mc != null && v.mc.rs != null){
|
|
cfg["merge"][v.mc.r + "_" + v.mc.c] = $.extend(true, {}, v.mc);
|
|
}
|
|
}
|
|
|
|
//luckysheet.flowdata
|
|
Store.flowdata = d;
|
|
editor.webWorkerFlowDataCache(Store.flowdata);//worker存数据
|
|
Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)].data = d;
|
|
|
|
//config
|
|
Store.config = cfg;
|
|
Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)].config = Store.config;
|
|
|
|
//行高、列宽刷新
|
|
jfrefreshgrid_rhcw(Store.flowdata.length, Store.flowdata[0].length);
|
|
}
|
|
|
|
//删除行列
|
|
function luckysheetdeletetable(type, st, ed, sheetIndex) {
|
|
|
|
sheetIndex = sheetIndex || Store.currentSheetIndex;
|
|
|
|
if(type=='row' && !checkProtectionAuthorityNormal(sheetIndex, "deleteRows")){
|
|
return;
|
|
}
|
|
else if(type=='column' && !checkProtectionAuthorityNormal(sheetIndex, "deleteColumns")){
|
|
return;
|
|
}
|
|
|
|
let curOrder = getSheetIndex(sheetIndex);
|
|
|
|
let file = Store.luckysheetfile[curOrder];
|
|
let d = $.extend(true, [], file.data);
|
|
|
|
let slen = ed - st + 1;
|
|
let cfg = $.extend(true, {}, file.config);
|
|
|
|
//合并单元格配置变动
|
|
if(cfg["merge"] == null){
|
|
cfg["merge"] = {};
|
|
}
|
|
|
|
let merge_new = {};
|
|
for(let m in cfg["merge"]){
|
|
let mc = cfg["merge"][m];
|
|
|
|
let r = mc.r,
|
|
c = mc.c,
|
|
rs = mc.rs,
|
|
cs = mc.cs;
|
|
|
|
if(type == "row"){
|
|
if(r < st){
|
|
if(r + rs - 1 < st){
|
|
merge_new[r + "_" + c] = { "r": r, "c": c, "rs": rs, "cs": cs };
|
|
}
|
|
else if(r + rs - 1 >= st && r + rs - 1 < ed){
|
|
merge_new[r + "_" + c] = { "r": r, "c": c, "rs": st - r, "cs": cs };
|
|
}
|
|
else if(r + rs - 1 >= ed){
|
|
merge_new[r + "_" + c] = { "r": r, "c": c, "rs": rs - slen, "cs": cs };
|
|
}
|
|
}
|
|
else if(r >= st && r <= ed){
|
|
if(r + rs - 1 > ed){
|
|
merge_new[st + "_" + c] = { "r": st, "c": c, "rs": r + rs - 1 - ed, "cs": cs };
|
|
}
|
|
}
|
|
else if(r > ed){
|
|
merge_new[(r - slen) + "_" + c] = { "r": r - slen, "c": c, "rs": rs, "cs": cs };
|
|
}
|
|
}
|
|
else if(type == "column"){
|
|
if(c < st){
|
|
if(c + cs - 1 < st){
|
|
merge_new[r + "_" + c] = { "r": r, "c": c, "rs": rs, "cs": cs };
|
|
}
|
|
else if(c + cs - 1 >= st && c + cs - 1 < ed){
|
|
merge_new[r + "_" + c] = { "r": r, "c": c, "rs": rs, "cs": st - c };
|
|
}
|
|
else if(c + cs - 1 >= ed){
|
|
merge_new[r + "_" + c] = { "r": r, "c": c, "rs": rs, "cs": cs - slen };
|
|
}
|
|
}
|
|
else if(c >= st && c <= ed){
|
|
if(c + cs - 1 > ed){
|
|
merge_new[r + "_" + st] = { "r": r, "c": st, "rs": rs, "cs": c + cs - 1 - ed };
|
|
}
|
|
}
|
|
else if(c > ed){
|
|
merge_new[r + "_" + (c - slen)] = { "r": r, "c": c - slen, "rs": rs, "cs": cs };
|
|
}
|
|
}
|
|
}
|
|
cfg["merge"] = merge_new;
|
|
|
|
//公式配置变动
|
|
let calcChain = file.calcChain;
|
|
let newCalcChain = [];
|
|
if(calcChain != null && calcChain.length > 0){
|
|
for(let i = 0; i < calcChain.length; i++){
|
|
let calc = $.extend(true, {}, calcChain[i]);
|
|
let calc_r = calc.r, calc_c = calc.c, calc_i = calc.index, calc_funcStr = getcellFormula(calc_r, calc_c, calc_i);
|
|
|
|
if(type == "row"){
|
|
if(calc_r < st || calc_r > ed){
|
|
let functionStr = "=" + formula.functionStrChange(calc_funcStr, "del", "row", null, st, slen);
|
|
|
|
if(d[calc_r][calc_c] && d[calc_r][calc_c].f == calc_funcStr){
|
|
d[calc_r][calc_c].f = functionStr;
|
|
}
|
|
|
|
if(calc_r > ed){
|
|
calc.r = calc_r - slen;
|
|
}
|
|
|
|
newCalcChain.push(calc);
|
|
}
|
|
}
|
|
else if(type == "column"){
|
|
if(calc_c < st || calc_c > ed){
|
|
let functionStr = "=" + formula.functionStrChange(calc_funcStr, "del", "col", null, st, slen);
|
|
|
|
if(d[calc_r][calc_c] && d[calc_r][calc_c].f == calc_funcStr){
|
|
d[calc_r][calc_c].f = functionStr;
|
|
}
|
|
|
|
if(calc_c > ed){
|
|
calc.c = calc_c - slen;
|
|
}
|
|
|
|
newCalcChain.push(calc);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//筛选配置变动
|
|
let filter_select = file.filter_select;
|
|
let filter = file.filter;
|
|
let newFilterObj = null;
|
|
if(filter_select != null && JSON.stringify(filter_select) != "{}"){
|
|
newFilterObj = { "filter_select": null, "filter": null };
|
|
|
|
let f_r1 = filter_select.row[0], f_r2 = filter_select.row[1];
|
|
let f_c1 = filter_select.column[0], f_c2 = filter_select.column[1];
|
|
|
|
if(type == "row"){
|
|
if(f_r1 > ed){
|
|
f_r1 -= slen;
|
|
f_r2 -= slen;
|
|
|
|
newFilterObj.filter_select = { "row": [f_r1, f_r2], "column": [f_c1, f_c2] };
|
|
}
|
|
else if(f_r1 < st){
|
|
if(f_r2 < st){
|
|
|
|
}
|
|
else if(f_r2 <= ed){
|
|
f_r2 = st - 1;
|
|
}
|
|
else{
|
|
f_r2 -= slen;
|
|
}
|
|
|
|
newFilterObj.filter_select = { "row": [f_r1, f_r2], "column": [f_c1, f_c2] };
|
|
}
|
|
|
|
if(newFilterObj.filter_select != null && filter != null){
|
|
for(let k in filter){
|
|
let f_rowhidden = filter[k].rowhidden;
|
|
let f_rowhidden_new = {};
|
|
|
|
for(let n in f_rowhidden){
|
|
if(n < st){
|
|
f_rowhidden_new[n] = 0;
|
|
}
|
|
else if(n > ed){
|
|
f_rowhidden_new[n - slen] = 0;
|
|
}
|
|
}
|
|
|
|
if(JSON.stringify(f_rowhidden_new) != "{}"){
|
|
if(newFilterObj.filter == null){
|
|
newFilterObj.filter = {};
|
|
}
|
|
|
|
newFilterObj.filter[k] = $.extend(true, {}, filter[k]);
|
|
newFilterObj.filter[k].rowhidden = f_rowhidden_new;
|
|
newFilterObj.filter[k].str = f_r1;
|
|
newFilterObj.filter[k].edr = f_r2;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if(type == "column"){
|
|
if(f_c1 > ed){
|
|
f_c1 -= slen;
|
|
f_c2 -= slen;
|
|
|
|
newFilterObj.filter_select = { "row": [f_r1, f_r2], "column": [f_c1, f_c2] };
|
|
}
|
|
else if(f_c1 < st){
|
|
if(f_c2 < st){
|
|
|
|
}
|
|
else if(f_c2 <= ed){
|
|
f_c2 = st - 1;
|
|
}
|
|
else{
|
|
f_c2 -= slen;
|
|
}
|
|
|
|
newFilterObj.filter_select = { "row": [f_r1, f_r2], "column": [f_c1, f_c2] };
|
|
}
|
|
else{
|
|
if(f_c2 > ed){
|
|
f_c1 = st;
|
|
f_c2 -= slen;
|
|
|
|
newFilterObj.filter_select = { "row": [f_r1, f_r2], "column": [f_c1, f_c2] };
|
|
}
|
|
}
|
|
|
|
if(newFilterObj.filter_select != null && filter != null){
|
|
for(let k in filter){
|
|
let f_cindex = filter[k].cindex;
|
|
|
|
if(f_cindex < st){
|
|
if(newFilterObj.filter == null){
|
|
newFilterObj.filter = {};
|
|
}
|
|
|
|
newFilterObj.filter[f_cindex - f_c1] = $.extend(true, {}, filter[k]);
|
|
newFilterObj.filter[f_cindex - f_c1].edc = f_c2;
|
|
}
|
|
else if(f_cindex > ed){
|
|
f_cindex -= slen;
|
|
|
|
if(newFilterObj.filter == null){
|
|
newFilterObj.filter = {};
|
|
}
|
|
|
|
newFilterObj.filter[f_cindex - f_c1] = $.extend(true, {}, filter[k]);
|
|
newFilterObj.filter[f_cindex - f_c1].cindex = f_cindex;
|
|
newFilterObj.filter[f_cindex - f_c1].stc = f_c1;
|
|
newFilterObj.filter[f_cindex - f_c1].edc = f_c2;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if(newFilterObj != null && newFilterObj.filter != null){
|
|
if(cfg["rowhidden"] == null){
|
|
cfg["rowhidden"] = {};
|
|
}
|
|
|
|
for(let k in newFilterObj.filter){
|
|
let f_rowhidden = newFilterObj.filter[k].rowhidden;
|
|
|
|
for(let n in f_rowhidden){
|
|
cfg["rowhidden"][n] = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
//条件格式配置变动
|
|
let CFarr = file.luckysheet_conditionformat_save;
|
|
let newCFarr = [];
|
|
if(CFarr != null && CFarr.length > 0){
|
|
for(let i = 0; i < CFarr.length; i++){
|
|
let cf_range = CFarr[i].cellrange;
|
|
let cf_new_range = [];
|
|
|
|
for(let j = 0; j < cf_range.length; j++){
|
|
let CFr1 = cf_range[j].row[0],
|
|
CFr2 = cf_range[j].row[1],
|
|
CFc1 = cf_range[j].column[0],
|
|
CFc2 = cf_range[j].column[1];
|
|
|
|
if(type == "row"){
|
|
if(!(CFr1 >= st && CFr2 <= ed)){
|
|
if(CFr1 > ed){
|
|
CFr1 -= slen;
|
|
CFr2 -= slen;
|
|
}
|
|
else if(CFr1 < st){
|
|
if(CFr2 < st){
|
|
|
|
}
|
|
else if(CFr2 <= ed){
|
|
CFr2 = st - 1;
|
|
}
|
|
else{
|
|
CFr2 -= slen;
|
|
}
|
|
}
|
|
else{
|
|
if(CFr2 > ed){
|
|
CFr1 = st;
|
|
CFr2 -= slen;
|
|
}
|
|
}
|
|
|
|
cf_new_range.push({ "row": [CFr1, CFr2], "column": [CFc1, CFc2] });
|
|
}
|
|
}
|
|
else if(type == "column"){
|
|
if(!(CFc1 >= st && CFc2 <= ed)){
|
|
if(CFc1 > ed){
|
|
CFc1 -= slen;
|
|
CFc2 -= slen;
|
|
}
|
|
else if(CFc1 < st){
|
|
if(CFc2 < st){
|
|
|
|
}
|
|
else if(CFc2 <= ed){
|
|
CFc2 = st - 1;
|
|
}
|
|
else{
|
|
CFc2 -= slen;
|
|
}
|
|
}
|
|
else{
|
|
if(CFc2 > ed){
|
|
CFc1 = st;
|
|
CFc2 -= slen;
|
|
}
|
|
}
|
|
|
|
cf_new_range.push({ "row": [CFr1, CFr2], "column": [CFc1, CFc2] });
|
|
}
|
|
}
|
|
}
|
|
|
|
if(cf_new_range.length > 0){
|
|
let cf = $.extend(true, {}, CFarr[i]);
|
|
cf.cellrange = cf_new_range;
|
|
|
|
newCFarr.push(cf);
|
|
}
|
|
}
|
|
}
|
|
|
|
//交替颜色配置变动
|
|
let AFarr = file.luckysheet_alternateformat_save;
|
|
let newAFarr = [];
|
|
if(AFarr != null && AFarr.length > 0){
|
|
for(let i = 0; i < AFarr.length; i++){
|
|
let AFr1 = AFarr[i].cellrange.row[0],
|
|
AFr2 = AFarr[i].cellrange.row[1],
|
|
AFc1 = AFarr[i].cellrange.column[0],
|
|
AFc2 = AFarr[i].cellrange.column[1];
|
|
|
|
if(type == "row"){
|
|
if(!(AFr1 >= st && AFr2 <= ed)){
|
|
let af = $.extend(true, {}, AFarr[i]);
|
|
|
|
if(AFr1 > ed){
|
|
AFr1 -= slen;
|
|
AFr2 -= slen;
|
|
}
|
|
else if(AFr1 < st){
|
|
if(AFr2 < st){
|
|
|
|
}
|
|
else if(AFr2 <= ed){
|
|
AFr2 = st - 1;
|
|
}
|
|
else{
|
|
AFr2 -= slen;
|
|
}
|
|
}
|
|
else{
|
|
if(AFr2 > ed){
|
|
AFr1 = st;
|
|
AFr2 -= slen;
|
|
}
|
|
}
|
|
|
|
af.cellrange = { "row": [AFr1, AFr2], "column": [AFc1, AFc2] };
|
|
|
|
newAFarr.push(af);
|
|
}
|
|
}
|
|
else if(type == "column"){
|
|
if(!(AFc1 >= st && AFc2 <= ed)){
|
|
let af = $.extend(true, {}, AFarr[i]);
|
|
|
|
if(AFc1 > ed){
|
|
AFc1 -= slen;
|
|
AFc2 -= slen;
|
|
}
|
|
else if(AFc1 < st){
|
|
if(AFc2 < st){
|
|
|
|
}
|
|
else if(AFc2 <= ed){
|
|
AFc2 = st - 1;
|
|
}
|
|
else{
|
|
AFc2 -= slen;
|
|
}
|
|
}
|
|
else{
|
|
if(AFc2 > ed){
|
|
AFc1 = st;
|
|
AFc2 -= slen;
|
|
}
|
|
}
|
|
|
|
af.cellrange = { "row": [AFr1, AFr2], "column": [AFc1, AFc2] };
|
|
|
|
newAFarr.push(af);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//冻结配置变动
|
|
let newFreezen = { "freezenhorizontaldata": null, "freezenverticaldata": null };
|
|
if(luckysheetFreezen.freezenhorizontaldata != null && type == "row"){
|
|
let freezen_scrollTop = luckysheetFreezen.freezenhorizontaldata[2];
|
|
let freezen_st = luckysheet_searcharray(Store.visibledatarow, freezen_scrollTop);
|
|
if(freezen_st == -1){
|
|
freezen_st = 0;
|
|
}
|
|
|
|
let freezen_row_st = luckysheetFreezen.freezenhorizontaldata[1] - 1;
|
|
|
|
if(freezen_row_st >= st){
|
|
if(freezen_row_st < ed){
|
|
freezen_row_st = st - 1;
|
|
}
|
|
else{
|
|
freezen_row_st -= slen;
|
|
}
|
|
}
|
|
|
|
if(freezen_row_st < freezen_st){
|
|
freezen_row_st = freezen_st;
|
|
}
|
|
|
|
let freezen_top = Store.visibledatarow[freezen_row_st] - 2 - freezen_scrollTop + Store.columeHeaderHeight;
|
|
|
|
newFreezen.freezenhorizontaldata = [
|
|
Store.visibledatarow[freezen_row_st],
|
|
freezen_row_st + 1,
|
|
freezen_scrollTop,
|
|
luckysheetFreezen.cutVolumn(Store.visibledatarow, freezen_row_st + 1),
|
|
freezen_top
|
|
];
|
|
}
|
|
else{
|
|
newFreezen.freezenhorizontaldata = luckysheetFreezen.freezenhorizontaldata;
|
|
}
|
|
|
|
if(luckysheetFreezen.freezenverticaldata != null && type == "column"){
|
|
let freezen_scrollLeft = luckysheetFreezen.freezenverticaldata[2];
|
|
let freezen_st2 = luckysheet_searcharray(Store.visibledatacolumn, freezen_scrollLeft);
|
|
if(freezen_st2 == -1){
|
|
freezen_st2 = 0;
|
|
}
|
|
|
|
let freezen_col_st = luckysheetFreezen.freezenverticaldata[1] - 1;
|
|
|
|
if(freezen_col_st >= st){
|
|
if(freezen_col_st < ed){
|
|
freezen_col_st = st - 1;
|
|
}
|
|
else{
|
|
freezen_col_st -= slen;
|
|
}
|
|
}
|
|
|
|
if(freezen_col_st < freezen_st2){
|
|
freezen_col_st = freezen_st2;
|
|
}
|
|
|
|
let freezen_left = Store.visibledatacolumn[freezen_col_st] - 2 - freezen_scrollLeft + Store.rowHeaderWidth;
|
|
|
|
newFreezen.freezenverticaldata = [
|
|
Store.visibledatacolumn[freezen_col_st],
|
|
freezen_col_st + 1,
|
|
freezen_scrollLeft,
|
|
luckysheetFreezen.cutVolumn(Store.visibledatacolumn, freezen_col_st + 1),
|
|
freezen_left
|
|
];
|
|
}
|
|
else{
|
|
newFreezen.freezenverticaldata = luckysheetFreezen.freezenverticaldata;
|
|
}
|
|
|
|
//数据验证配置变动
|
|
let dataVerification = file.dataVerification;
|
|
let newDataVerification = {};
|
|
if(dataVerification != null){
|
|
for(let key in dataVerification){
|
|
let r = Number(key.split('_')[0]),
|
|
c = Number(key.split('_')[1]);
|
|
let item = dataVerification[key];
|
|
|
|
if(type == "row"){
|
|
if(r < st){
|
|
newDataVerification[r + "_" + c] = item;
|
|
}
|
|
else if(r > ed){
|
|
newDataVerification[(r - slen) + "_" + c] = item;
|
|
}
|
|
}
|
|
else if(type == "column"){
|
|
if(c < st){
|
|
newDataVerification[r + "_" + c] = item;
|
|
}
|
|
else if(c > ed){
|
|
newDataVerification[r + "_" + (c - slen)] = item;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//主逻辑
|
|
let type1;
|
|
if (type == "row") {
|
|
type1 = "r";
|
|
|
|
//行高配置变动
|
|
if(cfg["rowlen"] == null){
|
|
cfg["rowlen"] = {};
|
|
}
|
|
|
|
let rowlen_new = {};
|
|
for(let r in cfg["rowlen"]){
|
|
if(r < st){
|
|
rowlen_new[r] = cfg["rowlen"][r];
|
|
}
|
|
else if(r > ed){
|
|
rowlen_new[r - slen] = cfg["rowlen"][r];
|
|
}
|
|
}
|
|
|
|
cfg["rowlen"] = rowlen_new;
|
|
|
|
//隐藏行配置变动
|
|
if(cfg["rowhidden"] == null){
|
|
cfg["rowhidden"] = {};
|
|
}
|
|
|
|
let rowhidden_new = {};
|
|
for(let r in cfg["rowhidden"]){
|
|
if(r < st){
|
|
rowhidden_new[r] = cfg["rowhidden"][r];
|
|
}
|
|
else if(r > ed){
|
|
rowhidden_new[r - slen] = cfg["rowhidden"][r];
|
|
}
|
|
}
|
|
|
|
cfg["rowhidden"] = rowhidden_new;
|
|
|
|
//边框配置变动
|
|
if(cfg["borderInfo"] && cfg["borderInfo"].length > 0){
|
|
let borderInfo = [];
|
|
|
|
for(let i = 0; i < cfg["borderInfo"].length; i++){
|
|
let rangeType = cfg["borderInfo"][i].rangeType;
|
|
|
|
if(rangeType == "range"){
|
|
let borderRange = cfg["borderInfo"][i].range;
|
|
|
|
let emptyRange = [];
|
|
|
|
for(let j = 0; j < borderRange.length; j++){
|
|
let bd_r1 = borderRange[j].row[0],
|
|
bd_r2 = borderRange[j].row[1];
|
|
|
|
for(let r = st; r <= ed; r++){
|
|
if(r < borderRange[j].row[0]){
|
|
bd_r1 -= 1;
|
|
bd_r2 -= 1;
|
|
}
|
|
else if(r <= borderRange[j].row[1]){
|
|
bd_r2 -= 1;
|
|
}
|
|
}
|
|
|
|
if(bd_r2 >= bd_r1){
|
|
emptyRange.push({ "row": [bd_r1, bd_r2], "column": borderRange[j].column });
|
|
}
|
|
}
|
|
|
|
if(emptyRange.length > 0){
|
|
let bd_obj = {
|
|
"rangeType": "range",
|
|
"borderType": cfg["borderInfo"][i].borderType,
|
|
"style": cfg["borderInfo"][i].style,
|
|
"color": cfg["borderInfo"][i].color,
|
|
"range": emptyRange
|
|
}
|
|
|
|
borderInfo.push(bd_obj);
|
|
}
|
|
}
|
|
else if(rangeType == "cell"){
|
|
let row_index = cfg["borderInfo"][i].value.row_index;
|
|
|
|
if(row_index < st){
|
|
borderInfo.push(cfg["borderInfo"][i]);
|
|
}
|
|
else if(row_index > ed){
|
|
cfg["borderInfo"][i].value.row_index = row_index - (ed - st + 1);
|
|
borderInfo.push(cfg["borderInfo"][i]);
|
|
}
|
|
}
|
|
}
|
|
|
|
cfg["borderInfo"] = borderInfo;
|
|
}
|
|
|
|
//删除选中行
|
|
d.splice(st, slen);
|
|
|
|
//空白行模板
|
|
let row = [];
|
|
for (let c = 0; c < d[0].length; c++) {
|
|
row.push(null);
|
|
}
|
|
|
|
//删除多少行,增加多少行空白行
|
|
for (let r = 0; r < slen; r++) {
|
|
d.push(row);
|
|
}
|
|
}
|
|
else {
|
|
type1 = "c";
|
|
|
|
//列宽配置变动
|
|
if(cfg["columnlen"] == null){
|
|
cfg["columnlen"] = {};
|
|
}
|
|
|
|
let columnlen_new = {};
|
|
for(let c in cfg["columnlen"]){
|
|
if(c < st){
|
|
columnlen_new[c] = cfg["columnlen"][c];
|
|
}
|
|
else if(c > ed){
|
|
columnlen_new[c - slen] = cfg["columnlen"][c];
|
|
}
|
|
}
|
|
|
|
cfg["columnlen"] = columnlen_new;
|
|
|
|
//隐藏列配置变动
|
|
if(cfg["colhidden"] == null){
|
|
cfg["colhidden"] = {};
|
|
}
|
|
|
|
let colhidden_new = {};
|
|
for(let c in cfg["colhidden"]){
|
|
if(c < st){
|
|
colhidden_new[c] = cfg["colhidden"][c];
|
|
}
|
|
else if(c > ed){
|
|
colhidden_new[c - slen] = cfg["colhidden"][c];
|
|
}
|
|
}
|
|
|
|
cfg["colhidden"] = colhidden_new;
|
|
|
|
//边框配置变动
|
|
if(cfg["borderInfo"] && cfg["borderInfo"].length > 0){
|
|
let borderInfo = [];
|
|
|
|
for(let i = 0; i < cfg["borderInfo"].length; i++){
|
|
let rangeType = cfg["borderInfo"][i].rangeType;
|
|
|
|
if(rangeType == "range"){
|
|
let borderRange = cfg["borderInfo"][i].range;
|
|
|
|
let emptyRange = [];
|
|
|
|
for(let j = 0; j < borderRange.length; j++){
|
|
let bd_c1 = borderRange[j].column[0],
|
|
bd_c2 = borderRange[j].column[1];
|
|
|
|
for(let c = st; c <= ed; c++){
|
|
if(c < borderRange[j].column[0]){
|
|
bd_c1 -= 1;
|
|
bd_c2 -= 1;
|
|
}
|
|
else if(c <= borderRange[j].column[1]){
|
|
bd_c2 -= 1;
|
|
}
|
|
}
|
|
|
|
if(bd_c2 >= bd_c1){
|
|
emptyRange.push({ "row": borderRange[j].row, "column": [bd_c1, bd_c2] });
|
|
}
|
|
}
|
|
|
|
if(emptyRange.length > 0){
|
|
let bd_obj = {
|
|
"rangeType": "range",
|
|
"borderType": cfg["borderInfo"][i].borderType,
|
|
"style": cfg["borderInfo"][i].style,
|
|
"color": cfg["borderInfo"][i].color,
|
|
"range": emptyRange
|
|
}
|
|
|
|
borderInfo.push(bd_obj);
|
|
}
|
|
}
|
|
else if(rangeType == "cell"){
|
|
let col_index = cfg["borderInfo"][i].value.col_index;
|
|
|
|
if(col_index < st){
|
|
borderInfo.push(cfg["borderInfo"][i]);
|
|
}
|
|
else if(col_index > ed){
|
|
cfg["borderInfo"][i].value.col_index = col_index - (ed - st + 1);
|
|
borderInfo.push(cfg["borderInfo"][i]);
|
|
}
|
|
}
|
|
}
|
|
|
|
cfg["borderInfo"] = borderInfo;
|
|
}
|
|
|
|
//空白列模板
|
|
let addcol = [];
|
|
for (let r = 0; r < slen; r++) {
|
|
addcol.push(null);
|
|
}
|
|
|
|
for (let r = 0; r < d.length; r++) {
|
|
let row = [].concat(d[r]);
|
|
|
|
//删除选中列
|
|
row.splice(st, slen);
|
|
|
|
d[r] = row.concat(addcol);
|
|
}
|
|
}
|
|
|
|
// 修改当前sheet页时刷新
|
|
if (file.index == Store.currentSheetIndex) {
|
|
jfrefreshgrid_adRC(
|
|
d,
|
|
cfg,
|
|
"delRC",
|
|
{ "index": st, "len": ed - st + 1, "rc": type1 },
|
|
newCalcChain,
|
|
newFilterObj,
|
|
newCFarr,
|
|
newAFarr,
|
|
newFreezen,
|
|
newDataVerification
|
|
);
|
|
}
|
|
else{
|
|
file.data = d;
|
|
file.config = cfg;
|
|
file.calcChain = newCalcChain;
|
|
file.filter = newFilterObj.filter;
|
|
file.filter_select = newFilterObj.filter_select;
|
|
file.luckysheet_conditionformat_save = newCFarr;
|
|
file.luckysheet_alternateformat_save = newAFarr;
|
|
file.dataVerification = newDataVerification;
|
|
}
|
|
}
|
|
|
|
//删除单元格
|
|
function luckysheetDeleteCell(type, str, edr, stc, edc, sheetIndex) {
|
|
sheetIndex = sheetIndex || Store.currentSheetIndex;
|
|
if(!checkProtectionNotEnable(sheetIndex)){
|
|
return;
|
|
}
|
|
|
|
let curOrder = getSheetIndex(sheetIndex);
|
|
let file = Store.luckysheetfile[curOrder];
|
|
|
|
let d = $.extend(true, [], file.data);
|
|
|
|
let rlen = edr - str + 1;
|
|
let clen = edc - stc + 1;
|
|
let cfg = $.extend(true, {}, Store.config);
|
|
|
|
//合并单元格配置变动
|
|
if(cfg["merge"] == null){
|
|
cfg["merge"] = {};
|
|
}
|
|
|
|
let merge_new = {};
|
|
for(let m in cfg["merge"]){
|
|
let mc = cfg["merge"][m];
|
|
|
|
let r = mc.r,
|
|
c = mc.c,
|
|
rs = mc.rs,
|
|
cs = mc.cs;
|
|
|
|
if(type == "moveLeft"){
|
|
if(str > r + rs - 1 || edr < r || stc > c + cs - 1){
|
|
merge_new[r + "_" + c] = { "r": r, "c": c, "rs": rs, "cs": cs };
|
|
}
|
|
else if(str <= r && edr >= r + rs - 1 && edc < c){
|
|
merge_new[r + "_" + (c - clen)] = { "r": r, "c": c - clen, "rs": rs, "cs": cs };
|
|
}
|
|
else{
|
|
for(let r_i = r; r_i <= r + rs - 1; r_i++){
|
|
for(let c_i = c; c_i <= c + cs - 1; c_i++){
|
|
delete d[r_i][c_i].mc;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if(type == "moveUp"){
|
|
if(stc > c + cs - 1 || edc < c || str > r + rs - 1){
|
|
merge_new[r + "_" + c] = { "r": r, "c": c, "rs": rs, "cs": cs };
|
|
}
|
|
else if(stc <= c && edc >= c + cs - 1 && edr < r){
|
|
merge_new[(r - rlen) + "_" + c] = { "r": r - rlen, "c": c, "rs": rs, "cs": cs };
|
|
}
|
|
else{
|
|
for(let r_i = r; r_i <= r + rs - 1; r_i++){
|
|
for(let c_i = c; c_i <= c + cs - 1; c_i++){
|
|
delete d[r_i][c_i].mc;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
cfg["merge"] = merge_new;
|
|
|
|
//公式配置变动
|
|
let calcChain = file.calcChain;
|
|
let newCalcChain = [];
|
|
if(calcChain != null && calcChain.length > 0){
|
|
for(let i = 0; i < calcChain.length; i++){
|
|
let calc = $.extend(true, {}, calcChain[i]);
|
|
let calc_r = calc.r, calc_c = calc.c, calc_i = calc.index, calc_funcStr = getcellFormula(calc_r, calc_c, calc_i);
|
|
|
|
if(calc_r < str || calc_r > edr || calc_c < stc || calc_c > edc){
|
|
let functionStr;
|
|
|
|
if(type == 'moveLeft'){
|
|
functionStr = "=" + formula.functionStrChange(calc_funcStr, "del", "col", null, stc, clen);
|
|
|
|
if(calc_c > edc && calc_r >= str && calc_r <= edr){
|
|
calc.c = calc_c - clen;
|
|
}
|
|
}
|
|
else if(type == 'moveUp'){
|
|
functionStr = "=" + formula.functionStrChange(calc_funcStr, "del", "row", null, str, rlen);
|
|
|
|
if(calc_r > edr && calc_c >= stc && calc_c <= edc){
|
|
calc.r = calc_r - rlen;
|
|
}
|
|
}
|
|
|
|
if(d[calc_r][calc_c] && d[calc_r][calc_c].f == calc_funcStr){
|
|
d[calc_r][calc_c].f = functionStr;
|
|
}
|
|
|
|
newCalcChain.push(calc);
|
|
}
|
|
}
|
|
}
|
|
|
|
//筛选配置变动
|
|
let filter_select = file.filter_select;
|
|
let filter = file.filter;
|
|
let newFilterObj = null;
|
|
if(filter_select != null && JSON.stringify(filter_select) != "{}"){
|
|
newFilterObj = { "filter_select": null, "filter": null };
|
|
|
|
let f_r1 = filter_select.row[0], f_r2 = filter_select.row[1];
|
|
let f_c1 = filter_select.column[0], f_c2 = filter_select.column[1];
|
|
|
|
if(type == 'moveUp'){
|
|
if(f_c1 >= stc && f_c2 <= edc){
|
|
if(f_r1 > edr){
|
|
newFilterObj.filter_select = {
|
|
"row": [f_r1 - rlen, f_r2 - rlen],
|
|
"column": [f_c1, f_c2]
|
|
}
|
|
}
|
|
else if(f_r2 < str){
|
|
newFilterObj.filter_select = {
|
|
"row": [f_r1, f_r2],
|
|
"column": [f_c1, f_c2]
|
|
}
|
|
}
|
|
else if(f_r1 < str){
|
|
if(f_r2 > edr){
|
|
newFilterObj.filter_select = {
|
|
"row": [f_r1, f_r2 - rlen],
|
|
"column": [f_c1, f_c2]
|
|
}
|
|
}
|
|
else{
|
|
newFilterObj.filter_select = {
|
|
"row": [f_r1, str - 1],
|
|
"column": [f_c1, f_c2]
|
|
}
|
|
}
|
|
}
|
|
|
|
if(newFilterObj.filter_select != null && filter != null){
|
|
for(let k in filter){
|
|
let f_rowhidden = filter[k].rowhidden;
|
|
let f_rowhidden_new = {};
|
|
|
|
for(let n in f_rowhidden){
|
|
if(n < str){
|
|
f_rowhidden_new[n] = 0;
|
|
}
|
|
else if(n > edr){
|
|
f_rowhidden_new[n - slen] = 0;
|
|
}
|
|
}
|
|
|
|
if(newFilterObj.filter == null){
|
|
newFilterObj.filter = {};
|
|
}
|
|
newFilterObj.filter[k] = $.extend(true, {}, filter[k]);
|
|
|
|
if(JSON.stringify(f_rowhidden_new) != "{}"){
|
|
newFilterObj.filter[k].rowhidden = f_rowhidden_new;
|
|
}
|
|
|
|
newFilterObj.filter[k].str = newFilterObj.filter_select.row[0];
|
|
newFilterObj.filter[k].edr = newFilterObj.filter_select.row[1];
|
|
}
|
|
}
|
|
}
|
|
else if(f_r1 >= str && f_r2 <= edr){
|
|
if(f_c1 > edc){
|
|
newFilterObj.filter_select = {
|
|
"row": [f_r1, f_r2],
|
|
"column": [f_c1, f_c2]
|
|
}
|
|
}
|
|
else if(f_c1 >= stc){
|
|
if(f_c2 > edc){
|
|
newFilterObj.filter_select = {
|
|
"row": [f_r1, f_r2],
|
|
"column": [stc, f_c2 - clen]
|
|
}
|
|
}
|
|
}
|
|
else{
|
|
if(f_c2 < stc){
|
|
newFilterObj.filter_select = {
|
|
"row": [f_r1, f_r2],
|
|
"column": [f_c1, f_c2]
|
|
}
|
|
}
|
|
else if(f_c2 <= edc){
|
|
newFilterObj.filter_select = {
|
|
"row": [f_r1, f_r2],
|
|
"column": [f_c1, stc - 1]
|
|
}
|
|
}
|
|
else{
|
|
newFilterObj.filter_select = {
|
|
"row": [f_r1, f_r2],
|
|
"column": [f_c1, f_c2 - clen]
|
|
}
|
|
}
|
|
}
|
|
|
|
if(newFilterObj.filter_select != null && filter != null){
|
|
for(let k in filter){
|
|
let f_stc = newFilterObj.filter_select.column[0];
|
|
let f_edc = newFilterObj.filter_select.column[1];
|
|
let f_cindex = filter[k].cindex;
|
|
|
|
if(f_cindex < stc || f_cindex > edc){
|
|
if(newFilterObj.filter == null){
|
|
newFilterObj.filter = {};
|
|
}
|
|
|
|
if(f_cindex > edc){
|
|
f_cindex -= clen;
|
|
}
|
|
|
|
let k2 = f_cindex - f_stc;
|
|
|
|
newFilterObj.filter[k2] = $.extend(true, {}, filter[k]);
|
|
newFilterObj.filter[k2].cindex = f_cindex;
|
|
newFilterObj.filter[k2].stc = f_stc;
|
|
newFilterObj.filter[k2].edc = f_edc;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else{
|
|
newFilterObj.filter_select = {
|
|
"row": [f_r1, f_r2],
|
|
"column": [f_c1, f_c2]
|
|
}
|
|
|
|
if(filter != null){
|
|
newFilterObj.filter = filter;
|
|
}
|
|
}
|
|
}
|
|
else if(type == 'moveLeft'){
|
|
if(f_r1 >= str && f_r2 <= edr){
|
|
if(f_c1 > edc){
|
|
newFilterObj.filter_select = {
|
|
"row": [f_r1, f_r2],
|
|
"column": [f_c1 - clen, f_c2 - clen]
|
|
}
|
|
}
|
|
else if(f_c2 < stc){
|
|
newFilterObj.filter_select = {
|
|
"row": [f_r1, f_r2],
|
|
"column": [f_c1, f_c2]
|
|
}
|
|
}
|
|
else if(f_c1 < stc){
|
|
if(f_c2 > edc){
|
|
newFilterObj.filter_select = {
|
|
"row": [f_r1, f_r2],
|
|
"column": [f_c1, f_c2 - clen]
|
|
}
|
|
}
|
|
else{
|
|
newFilterObj.filter_select = {
|
|
"row": [f_r1, f_r2],
|
|
"column": [f_c1, stc - 1]
|
|
}
|
|
}
|
|
}
|
|
|
|
if(newFilterObj.filter_select != null && filter != null){
|
|
for(let k in filter){
|
|
let f_stc = newFilterObj.filter_select.column[0];
|
|
let f_edc = newFilterObj.filter_select.column[1];
|
|
let f_cindex = filter[k].cindex;
|
|
|
|
if(f_cindex < stc || f_cindex > edc){
|
|
if(newFilterObj.filter == null){
|
|
newFilterObj.filter = {};
|
|
}
|
|
|
|
if(f_cindex > edc){
|
|
f_cindex -= clen;
|
|
}
|
|
|
|
let k2 = f_cindex - f_stc;
|
|
|
|
newFilterObj.filter[k2] = $.extend(true, {}, filter[k]);
|
|
newFilterObj.filter[k2].cindex = f_cindex;
|
|
newFilterObj.filter[k2].stc = f_stc;
|
|
newFilterObj.filter[k2].edc = f_edc;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if(f_c1 >= stc && f_c2 <= edc){
|
|
if(f_r1 < str || f_r1 > edr){
|
|
newFilterObj.filter_select = {
|
|
"row": [f_r1, f_r2],
|
|
"column": [f_c1, f_c2]
|
|
}
|
|
|
|
if(filter != null){
|
|
newFilterObj.filter = filter;
|
|
}
|
|
}
|
|
}
|
|
else{
|
|
newFilterObj.filter_select = {
|
|
"row": [f_r1, f_r2],
|
|
"column": [f_c1, f_c2]
|
|
}
|
|
|
|
if(filter != null){
|
|
newFilterObj.filter = filter;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if(newFilterObj != null && newFilterObj.filter != null){
|
|
if(cfg["rowhidden"] == null){
|
|
cfg["rowhidden"] = {};
|
|
}
|
|
|
|
for(let k in newFilterObj.filter){
|
|
let f_rowhidden = newFilterObj.filter[k].rowhidden;
|
|
|
|
for(let n in f_rowhidden){
|
|
cfg["rowhidden"][n] = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
//条件格式配置变动
|
|
let CFarr = file.luckysheet_conditionformat_save;
|
|
let newCFarr = [];
|
|
if(CFarr != null && CFarr.length > 0){
|
|
for(let i = 0; i < CFarr.length; i++){
|
|
let cf_range = CFarr[i].cellrange;
|
|
let cf_new_range = [];
|
|
|
|
for(let j = 0; j < cf_range.length; j++){
|
|
let CFr1 = cf_range[j].row[0],
|
|
CFr2 = cf_range[j].row[1],
|
|
CFc1 = cf_range[j].column[0],
|
|
CFc2 = cf_range[j].column[1];
|
|
|
|
if(!(str <= CFr1 && edr >= CFr2 && stc <= CFc1 && edc >= CFc2)){
|
|
cf_new_range = getMoveRange(type, str, edr, stc, edc, CFr1, CFr2, CFc1, CFc2, rlen, clen);
|
|
}
|
|
}
|
|
|
|
if(cf_new_range.length > 0){
|
|
let cf = $.extend(true, {}, CFarr[i]);
|
|
cf.cellrange = cf_new_range;
|
|
|
|
newCFarr.push(cf);
|
|
}
|
|
}
|
|
}
|
|
|
|
//数据验证配置变动
|
|
let dataVerification = file.dataVerification;
|
|
let newDataVerification = {};
|
|
if(dataVerification != null){
|
|
for(let key in dataVerification){
|
|
let r = Number(key.split('_')[0]),
|
|
c = Number(key.split('_')[1]);
|
|
let item = dataVerification[key];
|
|
|
|
if(r < str || r > edr || c < stc || c > edc){
|
|
if(type == "moveLeft"){
|
|
if(c > edc && r >= str && r <= edr){
|
|
newDataVerification[r + "_" + (c - clen)] = item;
|
|
}
|
|
else{
|
|
newDataVerification[r + "_" + c] = item;
|
|
}
|
|
}
|
|
else if(type == "moveUp"){
|
|
if(r > edr && c >= stc && c <= edc){
|
|
newDataVerification[(r - rlen) + "_" + c] = item;
|
|
}
|
|
else{
|
|
newDataVerification[r + "_" + c] = item;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//边框配置变动
|
|
if(cfg["borderInfo"] && cfg["borderInfo"].length > 0){
|
|
let borderInfo = [];
|
|
|
|
for(let i = 0; i < cfg["borderInfo"].length; i++){
|
|
let rangeType = cfg["borderInfo"][i].rangeType;
|
|
|
|
if(rangeType == "range"){
|
|
let borderRange = cfg["borderInfo"][i].range;
|
|
|
|
let emptyRange = [];
|
|
|
|
for(let j = 0; j < borderRange.length; j++){
|
|
let bd_r1 = borderRange[j].row[0],
|
|
bd_r2 = borderRange[j].row[1],
|
|
bd_c1 = borderRange[j].column[0],
|
|
bd_c2 = borderRange[j].column[1];
|
|
|
|
if(!(str <= bd_r1 && edr >= bd_r2 && stc <= bd_c1 && edc >= bd_c2)){
|
|
emptyRange = getMoveRange(type, str, edr, stc, edc, bd_r1, bd_r2, bd_c1, bd_c2, rlen, clen);
|
|
}
|
|
}
|
|
|
|
if(emptyRange.length > 0){
|
|
let bd_obj = {
|
|
"rangeType": "range",
|
|
"borderType": cfg["borderInfo"][i].borderType,
|
|
"style": cfg["borderInfo"][i].style,
|
|
"color": cfg["borderInfo"][i].color,
|
|
"range": emptyRange
|
|
}
|
|
|
|
borderInfo.push(bd_obj);
|
|
}
|
|
}
|
|
else if(rangeType == "cell"){
|
|
let row_index = cfg["borderInfo"][i].value.row_index;
|
|
let col_index = cfg["borderInfo"][i].value.col_index;
|
|
|
|
if(row_index < str || row_index > edr || col_index < stc || col_index > edc){
|
|
if(type == 'moveLeft'){
|
|
if(col_index > edc && row_index >= str && row_index <= edr){
|
|
col_index -= clen;
|
|
cfg["borderInfo"][i].value.col_index = col_index;
|
|
}
|
|
}
|
|
else if(type == 'moveUp'){
|
|
if(row_index > edr && col_index >= stc && col_index <= edc){
|
|
row_index -= rlen;
|
|
cfg["borderInfo"][i].value.row_index = row_index;
|
|
}
|
|
}
|
|
|
|
borderInfo.push(cfg["borderInfo"][i]);
|
|
}
|
|
}
|
|
}
|
|
|
|
cfg["borderInfo"] = borderInfo;
|
|
}
|
|
|
|
//空白列模板
|
|
let addcol = [];
|
|
for (let c = stc; c <= edc; c++) {
|
|
addcol.push(null);
|
|
}
|
|
|
|
if(type == 'moveUp'){//上移
|
|
let data = [];
|
|
|
|
for(let r = str; r <= d.length - 1; r++){
|
|
let row = [];
|
|
|
|
for(let c = stc; c <= edc; c++){
|
|
row.push(d[r][c]);
|
|
}
|
|
|
|
data.push(row);
|
|
}
|
|
|
|
data.splice(0, rlen);
|
|
|
|
//空白行模板
|
|
let addrow = [];
|
|
for (let r = str; r <= edr; r++) {
|
|
addrow.push(addcol);
|
|
}
|
|
|
|
data = data.concat(addrow);
|
|
|
|
for(let r = str; r <= d.length - 1; r++){
|
|
for(let c = stc; c <= edc; c++){
|
|
d[r][c] = data[r - str][c - stc];
|
|
}
|
|
}
|
|
}
|
|
else if(type == 'moveLeft'){//左移
|
|
for(let r = str; r <= edr; r++){
|
|
d[r].splice(stc, clen);
|
|
d[r] = d[r].concat(addcol);
|
|
}
|
|
}
|
|
|
|
if(file.index == Store.currentSheetIndex){
|
|
jfrefreshgrid_deleteCell(
|
|
d,
|
|
cfg,
|
|
{ type: type, 'str': str, 'edr': edr, 'stc': stc, 'edc': edc },
|
|
newCalcChain,
|
|
newFilterObj,
|
|
newCFarr,
|
|
newDataVerification
|
|
);
|
|
}
|
|
else{
|
|
file.data = d;
|
|
file.config = cfg;
|
|
file.calcChain = newCalcChain;
|
|
file.filter = newFilterObj.filter;
|
|
file.filter_select = newFilterObj.filter_select;
|
|
file.luckysheet_conditionformat_save = newCFarr;
|
|
file.dataVerification = newDataVerification;
|
|
}
|
|
}
|
|
|
|
function getMoveRange(type, str, edr, stc, edc, r1, r2, c1, c2, rlen, clen) {
|
|
let newRange = [];
|
|
|
|
if(type == "moveLeft"){
|
|
if(str > r2 || edr < r1 || stc > c2){
|
|
newRange.push({
|
|
"row": [r1, r2],
|
|
"column": [c1, c2]
|
|
});
|
|
}
|
|
else if(edc < c1){
|
|
if(str <= r1 && edr >= r2){
|
|
newRange.push({
|
|
"row": [r1, r2],
|
|
"column": [c1 - clen, c2 - clen]
|
|
});
|
|
}
|
|
else if(str > r1 && edr < r2){
|
|
let range= [
|
|
{ "row": [r1, str - 1], "column": [c1, c2] },
|
|
{ "row": [edr + 1, r2], "column": [c1, c2] },
|
|
{ "row": [str, edr], "column": [c1 - clen, c2 - clen] }
|
|
];
|
|
newRange = newRange.concat(range);
|
|
}
|
|
else if(str > r1){
|
|
let range= [
|
|
{ "row": [r1, str - 1], "column": [c1, c2] },
|
|
{ "row": [str, r2], "column": [c1 - clen, c2 - clen] },
|
|
];
|
|
newRange = newRange.concat(range);
|
|
}
|
|
else if(edr < r2){
|
|
let range= [
|
|
{ "row": [r1, edr], "column": [c1 - clen, c2 - clen] },
|
|
{ "row": [edr + 1, r2], "column": [c1, c2] },
|
|
];
|
|
newRange = newRange.concat(range);
|
|
}
|
|
}
|
|
else if(edc >= c1){
|
|
if(stc <= c1 && edc >= c2){
|
|
if(str > r1 && edr < r2){
|
|
let range= [
|
|
{ "row": [r1, str - 1], "column": [c1, c2] },
|
|
{ "row": [edr + 1, r2], "column": [c1, c2] },
|
|
];
|
|
newRange = newRange.concat(range);
|
|
}
|
|
else if(str > r1){
|
|
let range= [
|
|
{ "row": [r1, str - 1], "column": [c1, c2] },
|
|
];
|
|
newRange = newRange.concat(range);
|
|
}
|
|
else if(edr < r2){
|
|
let range= [
|
|
{ "row": [edr + 1, r2], "column": [c1, c2] },
|
|
];
|
|
newRange = newRange.concat(range);
|
|
}
|
|
}
|
|
else if(stc > c1 && edc < c2){
|
|
if(str <= r1 && edr >= r2){
|
|
newRange.push({
|
|
"row": [r1, r2],
|
|
"column": [c1, c2 - clen]
|
|
});
|
|
}
|
|
else if(str > r1 && edr < r2){
|
|
let range= [
|
|
{ "row": [r1, str - 1], "column": [c1, c2] },
|
|
{ "row": [edr + 1, r2], "column": [c1, c2] },
|
|
{ "row": [str, edr], "column": [c1, c2 - clen] }
|
|
];
|
|
newRange = newRange.concat(range);
|
|
}
|
|
else if(str > r1){
|
|
let range= [
|
|
{ "row": [r1, str - 1], "column": [c1, c2] },
|
|
{ "row": [str, r2], "column": [c1, c2 - clen] },
|
|
];
|
|
newRange = newRange.concat(range);
|
|
}
|
|
else if(edr < r2){
|
|
let range= [
|
|
{ "row": [r1, edr], "column": [c1, c2 - clen] },
|
|
{ "row": [edr + 1, r2], "column": [c1, c2] },
|
|
];
|
|
newRange = newRange.concat(range);
|
|
}
|
|
}
|
|
else if(stc > c1){
|
|
if(str <= r1 && edr >= r2){
|
|
newRange.push({
|
|
"row": [r1, r2],
|
|
"column": [c1, stc - 1]
|
|
});
|
|
}
|
|
else if(str > r1 && edr < r2){
|
|
let range= [
|
|
{ "row": [r1, str - 1], "column": [c1, c2] },
|
|
{ "row": [edr + 1, r2], "column": [c1, c2] },
|
|
{ "row": [str, edr], "column": [c1, stc - 1] }
|
|
];
|
|
newRange = newRange.concat(range);
|
|
}
|
|
else if(str > r1){
|
|
let range= [
|
|
{ "row": [r1, str - 1], "column": [c1, c2] },
|
|
{ "row": [str, r2], "column": [c1, stc - 1] },
|
|
];
|
|
newRange = newRange.concat(range);
|
|
}
|
|
else if(edr < r2){
|
|
let range= [
|
|
{ "row": [r1, edr], "column": [c1, stc - 1] },
|
|
{ "row": [edr + 1, r2], "column": [c1, c2] },
|
|
];
|
|
newRange = newRange.concat(range);
|
|
}
|
|
}
|
|
else if(edc < c2){
|
|
if(str <= r1 && edr >= r2){
|
|
newRange.push({
|
|
"row": [r1, r2],
|
|
"column": [c1 - clen, c2 - clen]
|
|
});
|
|
}
|
|
else if(str > r1 && edr < r2){
|
|
let range= [
|
|
{ "row": [r1, str - 1], "column": [c1, c2] },
|
|
{ "row": [edr + 1, r2], "column": [c1, c2] },
|
|
{ "row": [str, edr], "column": [c1 - clen, c2 - clen] }
|
|
];
|
|
newRange = newRange.concat(range);
|
|
}
|
|
else if(str > r1){
|
|
let range= [
|
|
{ "row": [r1, str - 1], "column": [c1, c2] },
|
|
{ "row": [str, r2], "column": [c1 - clen, c2 - clen] },
|
|
];
|
|
newRange = newRange.concat(range);
|
|
}
|
|
else if(edr < r2){
|
|
let range= [
|
|
{ "row": [r1, edr], "column": [c1 - clen, c2 - clen] },
|
|
{ "row": [edr + 1, r2], "column": [c1, c2] },
|
|
];
|
|
newRange = newRange.concat(range);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if(type == "moveUp"){
|
|
if(stc > c2 || edc < c1 || str > r2){
|
|
newRange.push({
|
|
"row": [r1, r2],
|
|
"column": [c1, c2]
|
|
});
|
|
}
|
|
else if(edr < r1){
|
|
if(stc <= c1 && edc >= c2){
|
|
newRange.push({
|
|
"row": [r1 - rlen, r2 - rlen],
|
|
"column": [c1, c2]
|
|
});
|
|
}
|
|
else if(stc > c1 && edc < c2){
|
|
let range= [
|
|
{ "row": [r1, r2], "column": [c1, stc - 1] },
|
|
{ "row": [r1, r2], "column": [edc + 1, c2] },
|
|
{ "row": [r1 - rlen, r2 - rlen], "column": [stc, edc] }
|
|
];
|
|
newRange = newRange.concat(range);
|
|
}
|
|
else if(stc > c1){
|
|
let range= [
|
|
{ "row": [r1, r2], "column": [c1, stc - 1] },
|
|
{ "row": [r1 - rlen, r2 - rlen], "column": [stc, c2] },
|
|
];
|
|
newRange = newRange.concat(range);
|
|
}
|
|
else if(edc < c2){
|
|
let range= [
|
|
{ "row": [r1 - rlen, r2 - rlen], "column": [c1, edc] },
|
|
{ "row": [r1, r2], "column": [edc + 1, c2] },
|
|
];
|
|
newRange = newRange.concat(range);
|
|
}
|
|
}
|
|
else if(edr >= r1){
|
|
if(str <= r1 && edr >= r2){
|
|
if(stc > c1 && edc < c2){
|
|
let range= [
|
|
{ "row": [r1, r2], "column": [c1, stc - 1] },
|
|
{ "row": [r1, r2], "column": [edc + 1, c2] },
|
|
];
|
|
newRange = newRange.concat(range);
|
|
}
|
|
else if(stc > c1){
|
|
let range= [
|
|
{ "row": [r1, r2], "column": [c1, stc - 1] },
|
|
];
|
|
newRange = newRange.concat(range);
|
|
}
|
|
else if(edc < c2){
|
|
let range= [
|
|
{ "row": [r1, r2], "column": [edc + 1, c2] },
|
|
];
|
|
newRange = newRange.concat(range);
|
|
}
|
|
}
|
|
else if(str > r1 && edr < r2){
|
|
if(stc <= c1 && edc >= c2){
|
|
newRange.push({
|
|
"row": [r1, r2 - rlen],
|
|
"column": [c1, c2]
|
|
});
|
|
}
|
|
else if(stc > c1 && edc < c2){
|
|
let range= [
|
|
{ "row": [r1, r2], "column": [c1, stc - 1] },
|
|
{ "row": [r1, r2], "column": [edc + 1, c2] },
|
|
{ "row": [r1, r2 - rlen], "column": [stc, edc] }
|
|
];
|
|
newRange = newRange.concat(range);
|
|
}
|
|
else if(stc > c1){
|
|
let range= [
|
|
{ "row": [r1, r2], "column": [c1, stc - 1] },
|
|
{ "row": [r1, r2 - rlen], "column": [stc, c2] },
|
|
];
|
|
newRange = newRange.concat(range);
|
|
}
|
|
else if(edc < c2){
|
|
let range= [
|
|
{ "row": [r1, r2 - rlen], "column": [c1, edc] },
|
|
{ "row": [r1, r2], "column": [edc + 1, c2] },
|
|
];
|
|
newRange = newRange.concat(range);
|
|
}
|
|
}
|
|
else if(str > r1){
|
|
if(stc <= c1 && edc >= c2){
|
|
newRange.push({
|
|
"row": [r1, str - 1],
|
|
"column": [c1, c2]
|
|
});
|
|
}
|
|
else if(stc > c1 && edc < c2){
|
|
let range= [
|
|
{ "row": [r1, r2], "column": [c1, stc - 1] },
|
|
{ "row": [r1, r2], "column": [edc + 1, c2] },
|
|
{ "row": [r1, str - 1], "column": [stc, edc] }
|
|
];
|
|
newRange = newRange.concat(range);
|
|
}
|
|
else if(stc > c1){
|
|
let range= [
|
|
{ "row": [r1, r2], "column": [c1, stc - 1] },
|
|
{ "row": [r1, str - 1], "column": [stc, c2] },
|
|
];
|
|
newRange = newRange.concat(range);
|
|
}
|
|
else if(edc < c2){
|
|
let range= [
|
|
{ "row": [r1, str - 1], "column": [c1, edc] },
|
|
{ "row": [r1, r2], "column": [edc + 1, c2] },
|
|
];
|
|
newRange = newRange.concat(range);
|
|
}
|
|
}
|
|
else if(edr < r2){
|
|
if(stc <= c1 && edc >= c2){
|
|
newRange.push({
|
|
"row": [r1 - rlen, r2 - rlen],
|
|
"column": [c1, c2]
|
|
});
|
|
}
|
|
else if(stc > c1 && edc < c2){
|
|
let range= [
|
|
{ "row": [r1, r2], "column": [c1, stc - 1] },
|
|
{ "row": [r1, r2], "column": [edc + 1, c2] },
|
|
{ "row": [r1 - rlen, r2 - rlen], "column": [stc, edc] }
|
|
];
|
|
newRange = newRange.concat(range);
|
|
}
|
|
else if(stc > c1){
|
|
let range= [
|
|
{ "row": [r1, r2], "column": [c1, stc - 1] },
|
|
{ "row": [r1 - rlen, r2 - rlen], "column": [stc, c2] },
|
|
];
|
|
newRange = newRange.concat(range);
|
|
}
|
|
else if(edc < c2){
|
|
let range= [
|
|
{ "row": [r1 - rlen, r2 - rlen], "column": [c1, edc] },
|
|
{ "row": [r1, r2], "column": [edc + 1, c2] },
|
|
];
|
|
newRange = newRange.concat(range);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return newRange;
|
|
}
|
|
|
|
export {
|
|
luckysheetextendtable,
|
|
luckysheetextendData,
|
|
luckysheetdeletetable,
|
|
luckysheetDeleteCell,
|
|
}
|