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.
563 lines
14 KiB
563 lines
14 KiB
import { getObjType,rgbTohex } from '../utils/util';
|
|
import { getSheetIndex } from '../methods/get';
|
|
import server from '../controllers/server';
|
|
import formula from './formula';
|
|
import editor from './editor';
|
|
import { dynamicArrayCompute } from './dynamicArray';
|
|
import sheetmanage from '../controllers/sheetmanage';
|
|
import { isInlineStringCT,isInlineStringCell,convertCssToStyleList } from '../controllers/inlineString';
|
|
import locale from '../locale/locale';
|
|
import Store from '../store';
|
|
|
|
//Get selection range value
|
|
export function getdatabyselection(range, sheetIndex) {
|
|
if(range == null){
|
|
range = Store.luckysheet_select_save[0];
|
|
}
|
|
|
|
if (range["row"] == null || range["row"].length == 0) {
|
|
return [];
|
|
}
|
|
|
|
//取数据
|
|
let d, cfg;
|
|
if(sheetIndex != null && sheetIndex != Store.currentSheetIndex){
|
|
d = Store.luckysheetfile[getSheetIndex(sheetIndex)]["data"];
|
|
cfg = Store.luckysheetfile[getSheetIndex(sheetIndex)]["config"];
|
|
}
|
|
else{
|
|
d = editor.deepCopyFlowData(Store.flowdata);
|
|
cfg = Store.config;
|
|
}
|
|
|
|
let data = [];
|
|
|
|
for (let r = range["row"][0]; r <= range["row"][1]; r++) {
|
|
if(d[r] == null){
|
|
continue;
|
|
}
|
|
|
|
if (cfg["rowhidden"] != null && cfg["rowhidden"][r] != null) {
|
|
continue;
|
|
}
|
|
|
|
let row = [];
|
|
|
|
for (let c = range["column"][0]; c <= range["column"][1]; c++) {
|
|
row.push(d[r][c]);
|
|
}
|
|
|
|
data.push(row);
|
|
}
|
|
|
|
return data;
|
|
}
|
|
|
|
export function getdatabyselectionD(d, range) {
|
|
if (range == null || range["row"] == null || range["row"].length == 0) {
|
|
return [];
|
|
}
|
|
|
|
let dynamicArray_compute = dynamicArrayCompute(Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)]["dynamicArray"]);
|
|
let data = [];
|
|
|
|
if(d==null){
|
|
return data;
|
|
}
|
|
|
|
for (let r = range["row"][0]; r <= range["row"][1]; r++) {
|
|
if(d[r] == null){
|
|
continue;
|
|
}
|
|
|
|
// if (Store.config["rowhidden"] != null && Store.config["rowhidden"][r] != null) {
|
|
// continue;
|
|
// }
|
|
|
|
let row = [];
|
|
|
|
for (let c = range["column"][0]; c <= range["column"][1]; c++) {
|
|
let value;
|
|
|
|
if((r + "_" + c) in dynamicArray_compute){
|
|
value = dynamicArray_compute[r + "_" + c];
|
|
}
|
|
else{
|
|
value = d[r][c];
|
|
}
|
|
|
|
row.push(value);
|
|
}
|
|
|
|
data.push(row);
|
|
}
|
|
|
|
return data;
|
|
}
|
|
|
|
export function getdatabyselectionNoCopy(range) {
|
|
if (range == null || range["row"] == null || range["row"].length == 0) {
|
|
return [];
|
|
}
|
|
|
|
let data = [];
|
|
|
|
for (let r = range["row"][0]; r <= range["row"][1]; r++) {
|
|
let row = [];
|
|
|
|
if (Store.config["rowhidden"] != null && Store.config["rowhidden"][r] != null) {
|
|
continue;
|
|
}
|
|
|
|
for (let c = range["column"][0]; c <= range["column"][1]; c++) {
|
|
let value = "";
|
|
|
|
if (Store.flowdata[r] != null && Store.flowdata[r][c] != null) {
|
|
value = Store.flowdata[r][c];
|
|
}
|
|
|
|
row.push(value);
|
|
}
|
|
|
|
data.push(row);
|
|
}
|
|
|
|
return data;
|
|
}
|
|
|
|
//Get the value of the cell
|
|
export function getcellvalue(r, c, data, type) {
|
|
if (type == null) {
|
|
type = "v";
|
|
}
|
|
|
|
if (data == null) {
|
|
data = Store.flowdata;
|
|
}
|
|
|
|
let d_value;
|
|
|
|
if (r != null && c != null) {
|
|
d_value = data[r][c];
|
|
}
|
|
else if (r != null) {
|
|
d_value = data[r];
|
|
}
|
|
else if (c != null) {
|
|
let newData = data[0].map(function(col, i) {
|
|
return data.map(function(row) {
|
|
return row[i];
|
|
})
|
|
});
|
|
d_value = newData[c];
|
|
}
|
|
else {
|
|
return data;
|
|
}
|
|
|
|
let retv = d_value;
|
|
|
|
if(getObjType(d_value) == "object"){
|
|
retv = d_value[type];
|
|
|
|
if (type == "f" && retv != null) {
|
|
retv = formula.functionHTMLGenerate(retv);
|
|
}
|
|
else if(type == "f") {
|
|
retv = d_value["v"];
|
|
}
|
|
else if(d_value && d_value.ct && d_value.ct.t == 'd') {
|
|
retv = d_value.m;
|
|
}
|
|
}
|
|
|
|
if(retv == undefined){
|
|
retv = null;
|
|
}
|
|
|
|
return retv;
|
|
}
|
|
|
|
//Data increase in rows and columns
|
|
export function datagridgrowth(data, addr, addc, iscallback) {
|
|
if (addr <= 0 && addc <= 0) {
|
|
return data;
|
|
}
|
|
|
|
if (addr <= 0) {
|
|
addr = 0;
|
|
}
|
|
|
|
if (addc <= 0) {
|
|
addc = 0;
|
|
}
|
|
|
|
let dataClen = 0;
|
|
if (data.length == 0) {
|
|
data = [];
|
|
dataClen = 0;
|
|
}
|
|
else {
|
|
dataClen = data[0].length;
|
|
}
|
|
|
|
let coladd = [];//需要额外增加的空列
|
|
for (let c = 0; c < addc; c++) {
|
|
coladd.push(null);
|
|
}
|
|
|
|
let rowadd = [];//完整的一个空行
|
|
for (let r = 0; r < dataClen + addc; r++) {
|
|
rowadd.push(null);
|
|
}
|
|
|
|
for (let r = 0; r < data.length; r++) {
|
|
data[r] = [].concat(data[r].concat(coladd));
|
|
}
|
|
|
|
for (let r = 0; r < addr; r++) {
|
|
data.push([].concat(rowadd));
|
|
}
|
|
|
|
if(!!iscallback){
|
|
server.saveParam("all", Store.currentSheetIndex, data.length, { "k": "row" });
|
|
server.saveParam("all", Store.currentSheetIndex, data[0].length, { "k": "column" });
|
|
}
|
|
|
|
return data;
|
|
}
|
|
|
|
|
|
//Get the formula of the cell
|
|
export function getcellFormula(r, c, i, data) {
|
|
let cell;
|
|
if(data!=null){
|
|
cell = data[r][c];
|
|
}
|
|
else{
|
|
cell = getOrigincell(r,c,i);
|
|
}
|
|
|
|
|
|
if(cell==null){
|
|
return null;
|
|
}
|
|
|
|
return cell.f;
|
|
}
|
|
|
|
|
|
export function getOrigincell(r, c, i) {
|
|
if(r==null || c==null){
|
|
return;
|
|
}
|
|
let data;
|
|
if (i == null) {
|
|
data = Store.flowdata;
|
|
}
|
|
else{
|
|
let sheet = sheetmanage.getSheetByIndex(i);
|
|
data = sheet.data;
|
|
}
|
|
|
|
if(!data || !data[r] || !data[r][c]){
|
|
return;
|
|
}
|
|
|
|
return data[r][c];
|
|
|
|
|
|
}
|
|
|
|
export function getRealCellValue(r, c){
|
|
let value = getcellvalue(r, c, null, "m");
|
|
if(value == null){
|
|
value = getcellvalue(r, c);
|
|
if(value==null){
|
|
let ct = getcellvalue(r, c, null, "ct");
|
|
if(isInlineStringCT(ct)){
|
|
value = ct.s;
|
|
}
|
|
}
|
|
}
|
|
|
|
return value;
|
|
}
|
|
|
|
export function getInlineStringNoStyle(r, c){
|
|
let ct = getcellvalue(r, c, null, "ct");
|
|
if(isInlineStringCT(ct)){
|
|
let strings = ct.s, value="";
|
|
for(let i=0;i<strings.length;i++){
|
|
let strObj = strings[i];
|
|
if(strObj.v!=null){
|
|
value += strObj.v;
|
|
}
|
|
}
|
|
return value;
|
|
}
|
|
|
|
return "";
|
|
}
|
|
|
|
export function getInlineStringStyle(r, c, data){
|
|
let ct = getcellvalue(r, c, data, "ct");
|
|
if (data == null) {
|
|
data = Store.flowdata;
|
|
}
|
|
let cell = data[r][c];
|
|
if(isInlineStringCT(ct)){
|
|
let strings = ct.s, value="";
|
|
for(let i=0;i<strings.length;i++){
|
|
let strObj = strings[i];
|
|
if(strObj.v!=null){
|
|
let style = getFontStyleByCell(strObj);
|
|
value += "<span index='"+ i +"' style='"+ style +"'>" + strObj.v + "</span>";
|
|
}
|
|
}
|
|
return value;
|
|
}
|
|
|
|
return "";
|
|
}
|
|
|
|
export function getFontStyleByCell(cell,checksAF,checksCF, isCheck=true){
|
|
if(cell==null){
|
|
return;
|
|
}
|
|
let style = "";
|
|
const _locale = locale();
|
|
const locale_fontarray = _locale.fontarray;
|
|
for(let key in cell){
|
|
let value = cell[key];
|
|
if(isCheck){
|
|
value = checkstatusByCell(cell, key);
|
|
}
|
|
if(key == "bl" && value != "0"){
|
|
style += "font-weight: bold;";
|
|
}
|
|
|
|
if(key == "it" && value != "0"){
|
|
style += "font-style:italic;";
|
|
}
|
|
|
|
if(key == "ff"){
|
|
let f = value;
|
|
if(!isNaN(parseInt(value))){
|
|
f = locale_fontarray[parseInt(value)];
|
|
}
|
|
else{
|
|
f = value;
|
|
}
|
|
style += "font-family: " + f + ";";
|
|
}
|
|
|
|
if(key == "fs"){
|
|
style += "font-size: "+ value + "pt;";
|
|
}
|
|
|
|
if((key == "fc" && value != "#000000") || checksAF != null || (checksCF != null && checksCF["textColor"] != null)){
|
|
if(checksCF != null && checksCF["textColor"] != null){
|
|
style += "color: " + checksCF["textColor"] + ";";
|
|
}
|
|
else if(checksAF != null){
|
|
style += "color: " + checksAF[0] + ";";
|
|
}
|
|
else{
|
|
style += "color: " + value + ";";
|
|
}
|
|
}
|
|
|
|
if(key == "cl" && value != "0"){
|
|
style += "text-decoration: line-through;";
|
|
}
|
|
|
|
}
|
|
return style;
|
|
}
|
|
|
|
export function checkstatusByCell(cell, a){
|
|
let foucsStatus =cell;
|
|
let tf = {"bl":1, "it":1 , "ff":1, "cl":1, "un":1};
|
|
|
|
if(a in tf || (a=="fs" && isInlineStringCell(cell)) ){
|
|
if(foucsStatus == null){
|
|
foucsStatus = "0";
|
|
}
|
|
else{
|
|
// var w = window.getSelection(), isInlineEdit=false;
|
|
// if(w.type!="None"){
|
|
// var range = w.getRangeAt(0);
|
|
// let startContainer = range.startContainer;
|
|
// if (parseInt($("#luckysheet-input-box").css("top")) > 0 && startContainer.parentNode.tagName=="SPAN" && !range.collapsed) {
|
|
// let span = startContainer.parentNode;
|
|
// let styleList = convertCssToStyleList(span.style.cssText);
|
|
// foucsStatus = styleList[a];
|
|
// isInlineEdit = true;
|
|
// }
|
|
// }
|
|
|
|
// if(!isInlineEdit){
|
|
// if(isInlineStringCell(cell)){
|
|
// foucsStatus = cell.ct.s[0][a];
|
|
// }
|
|
// else{
|
|
// foucsStatus = foucsStatus[a];
|
|
// }
|
|
// }
|
|
|
|
foucsStatus = foucsStatus[a];
|
|
|
|
if(foucsStatus == null){
|
|
foucsStatus = "0";
|
|
}
|
|
}
|
|
}
|
|
else if(a == "fc"){
|
|
if(foucsStatus == null){
|
|
foucsStatus = "#000000";
|
|
}
|
|
else{
|
|
foucsStatus = foucsStatus[a];
|
|
|
|
if(foucsStatus == null){
|
|
foucsStatus = "#000000";
|
|
}
|
|
|
|
if(foucsStatus.indexOf("rgba") > -1){
|
|
foucsStatus = rgbTohex(foucsStatus);
|
|
}
|
|
}
|
|
}
|
|
else if(a == "bg"){
|
|
if(foucsStatus == null){
|
|
foucsStatus = null;
|
|
}
|
|
else{
|
|
foucsStatus = foucsStatus[a];
|
|
|
|
if(foucsStatus == null){
|
|
foucsStatus = null;
|
|
}
|
|
else if(foucsStatus.toString().indexOf("rgba") > -1){
|
|
foucsStatus = rgbTohex(foucsStatus);
|
|
}
|
|
}
|
|
}
|
|
else if(a.substr(0, 2) == "bs"){
|
|
if(foucsStatus == null){
|
|
foucsStatus = "none";
|
|
}
|
|
else{
|
|
foucsStatus = foucsStatus[a];
|
|
if(foucsStatus == null){
|
|
foucsStatus = "none";
|
|
}
|
|
}
|
|
}
|
|
else if(a.substr(0, 2) == "bc"){
|
|
if(foucsStatus == null){
|
|
foucsStatus = "#000000";
|
|
}
|
|
else{
|
|
foucsStatus = foucsStatus[a];
|
|
if(foucsStatus == null){
|
|
foucsStatus = "#000000";
|
|
}
|
|
}
|
|
}
|
|
else if(a == "ht"){
|
|
if(foucsStatus == null){
|
|
foucsStatus = "1";
|
|
}
|
|
else{
|
|
foucsStatus = foucsStatus[a];
|
|
if(foucsStatus == null){
|
|
foucsStatus = "1";
|
|
}
|
|
}
|
|
|
|
if(["0", "1", "2"].indexOf(foucsStatus.toString()) == -1){
|
|
foucsStatus = "1";
|
|
}
|
|
}
|
|
else if(a == "vt"){//默认垂直居中
|
|
if(foucsStatus == null){
|
|
foucsStatus = "0";
|
|
}
|
|
else{
|
|
foucsStatus = foucsStatus[a];
|
|
if(foucsStatus == null){
|
|
foucsStatus = "0";
|
|
}
|
|
}
|
|
|
|
if(["0", "1", "2"].indexOf(foucsStatus.toString()) == -1){
|
|
foucsStatus = "0";
|
|
}
|
|
}
|
|
else if(a == "ct"){
|
|
if(foucsStatus == null){
|
|
foucsStatus = null;
|
|
}
|
|
else{
|
|
foucsStatus = foucsStatus[a];
|
|
if(foucsStatus == null){
|
|
foucsStatus = null;
|
|
}
|
|
}
|
|
}
|
|
else if(a == "fs"){
|
|
if(foucsStatus == null){
|
|
foucsStatus = String(Store.defaultFontSize);
|
|
}
|
|
else{
|
|
foucsStatus = foucsStatus[a];
|
|
if(foucsStatus == null){
|
|
foucsStatus = String(Store.defaultFontSize);
|
|
}
|
|
}
|
|
}
|
|
else if(a == "tb"){
|
|
if(foucsStatus == null){
|
|
foucsStatus = "0";
|
|
}
|
|
else{
|
|
foucsStatus = foucsStatus[a];
|
|
if(foucsStatus == null){
|
|
foucsStatus = "0";
|
|
}
|
|
}
|
|
}
|
|
else if(a == "tr"){
|
|
if(foucsStatus == null){
|
|
foucsStatus = "0";
|
|
}
|
|
else{
|
|
foucsStatus = foucsStatus[a];
|
|
if(foucsStatus == null){
|
|
foucsStatus = "0";
|
|
}
|
|
}
|
|
}
|
|
else if(a == "rt"){
|
|
if(foucsStatus == null){
|
|
foucsStatus = null;
|
|
}
|
|
else{
|
|
foucsStatus = foucsStatus[a];
|
|
if(foucsStatus == null){
|
|
foucsStatus = null;
|
|
}
|
|
}
|
|
}
|
|
|
|
return foucsStatus;
|
|
}
|
|
|
|
export function textTrim(x) {
|
|
if(x==null || x.length==0){
|
|
return x;
|
|
}
|
|
return x.replace(/^\s+|\s+$/gm,'');
|
|
}
|