123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968 |
- import func_methods from '../global/func_methods';
- import formula from '../global/formula';
- import tooltip from '../global/tooltip';
- import { isRealNum, valueIsError,error } from '../global/validate';
- import { getdatabyselectionD } from '../global/getdata';
- import { genarate } from '../global/format';
- import { inverse } from '../function/matrix_methods';
- import { getSheetIndex, getluckysheetfile, getRangetxt } from '../methods/get';
- import { getObjType, ABCatNum } from '../utils/util';
- import Store from '../store';
- import numeral from 'numeral';
- //函数功能:比较或运算
- function luckysheet_compareWith() {
- //第一个参数和第三个参数,返回比较结果的布尔值或者运算值
- //formula.operatorjson; 存储运算符和比较符
- let sp = arguments[1]; //操作符
- //参数一
- let data_fp = arguments[0];
- let fp;
- if(getObjType(data_fp) == "object" && data_fp.startCell != null){ //参数是选区
- if(sp == "&"){
- fp = func_methods.getCellDataDyadicArr(data_fp, "text");
- }
- else{
- fp = func_methods.getCellDataDyadicArr(data_fp, "number");
- }
- if(fp.length == 1 && fp[0].length == 1){
- fp = fp[0][0];
- }
- }
- else{
- fp = data_fp;
- }
- //参数二
- let data_tp = arguments[2];
- let tp;
- if(getObjType(data_tp) == "object" && data_tp.startCell != null){ //参数是选区
- if(sp == "&"){
- tp = func_methods.getCellDataDyadicArr(data_tp, "text");
- }
- else{
- tp = func_methods.getCellDataDyadicArr(data_tp, "number");
- }
- if(tp.length == 1 && tp[0].length == 1){
- tp = tp[0][0];
- }
- }
- else{
- tp = data_tp;
- }
- if(valueIsError(fp)){
- return fp;
- }
- if(valueIsError(tp)){
- return tp;
- }
- //参数是不规则二维数组 时 return #VALUE! 错误
- if(getObjType(fp) == "array" && getObjType(fp[0]) == "array" && !func_methods.isDyadicArr(fp)){
- return error.v;
- }
- if(getObjType(tp) == "array" && getObjType(tp[0]) == "array" && !func_methods.isDyadicArr(tp)){
- return error.v;
- }
- if(sp == "<>"){
- sp = "!=";
- }
- if(sp == "="){
- sp = "==";
- }
- if(fp==null && tp==null){
- return "#INVERSE!";
- }
- else if(fp=="#INVERSE!"){
- fp =0;
- if(sp=="-"){
- sp = "+";
- }
- else if(sp=="+"){
- sp = "-";
- }
- }
- else if(sp == "-" && fp == null){
- fp = 0;
- }
- else if(sp == "/" && (tp == 0 || tp == null)){
- return error.d;
- }
- //计算result
- function booleanOperation(a, operator, b){
- if(isRealNum(a)){
- a = parseFloat(a);
- }
- if(isRealNum(b)){
- b = parseFloat(b);
- }
- if(operator == "=="){
- if(a == b){
- return true;
- }
- else{
- return false;
- }
- }
- else if(operator == "!="){
- if(a != b){
- return true;
- }
- else{
- return false;
- }
- }
- else if(operator == ">="){
- if(a >= b){
- return true;
- }
- else{
- return false;
- }
- }
- else if(operator == "<="){
- if(a <= b){
- return true;
- }
- else{
- return false;
- }
- }
- else if(operator == ">"){
- if(a > b){
- return true;
- }
- else{
- return false;
- }
- }
- else if(operator == "<"){
- if(a < b){
- return true;
- }
- else{
- return false;
- }
- }
- }
- //布尔值对应数字(true = 1, false = 1)
- function booleanToNum(v){
- if(v == null){
- return v;
- }
- if(v.toString().toLowerCase() == "true"){
- return 1;
- }
- if(v.toString().toLowerCase() == "false"){
- return 0;
- }
- return v;
- }
-
- if(sp == "*"){ //乘
- if(getObjType(fp) == "array" && getObjType(tp) == "array"){
- let result = [];
- if(getObjType(fp[0]) == "array" && getObjType(tp[0]) == "array"){
- //二维数组相乘(m*n 与 m*n 等于 m*n;m*p 与 p*n 等于 m*n;其它错误)
- if(fp.length == tp.length && fp[0].length == tp[0].length){
- for(let m = 0; m < fp.length; m++){
- let rowArr = [];
- for(let n = 0; n < fp[m].length; n++){
- fp[m][n] = booleanToNum(fp[m][n]);
- tp[m][n] = booleanToNum(tp[m][n]);
- let value;
- if(isRealNum(fp[m][n]) && isRealNum(tp[m][n])){
- value = luckysheet_calcADPMM(fp[m][n], sp, tp[m][n]);//parseFloat(fp[m][n]) * parseFloat(tp[m][n]);
- }
- else{
- value = error.v;
- }
- rowArr.push(value);
- }
- result.push(rowArr);
- }
- }
- else if(fp[0].length == tp.length){
- let rowlen = fp.length;
- let collen = tp[0].length;
- for(let m = 0; m < rowlen; m++){
- let rowArr = [];
- for(let n = 0; n < collen; n++){
- let value = 0;
- for(let p = 0; p < fp[0].length; p++){
- fp[m][p] = booleanToNum(fp[m][p]);
- tp[p][n] = booleanToNum(tp[p][n]);
- if(isRealNum(fp[m][p]) && isRealNum(tp[p][n])){
- value += luckysheet_calcADPMM(fp[m][p], sp, tp[p][n]);//parseFloat(fp[m][p]) * parseFloat(tp[p][n]);
- }
- else{
- value += error.v;
- }
- }
- if(value.toString() == "NaN"){
- value = error.v;
- }
- rowArr.push(value);
- }
- result.push(rowArr);
- }
- }
- else if(fp.length == tp[0].length){
- let rowlen = tp.length;
- let collen = fp[0].length;
- for(let m = 0; m < rowlen; m++){
- let rowArr = [];
- for(let n = 0; n < collen; n++){
- let value = 0;
- for(let p = 0; p < tp[0].length; p++){
- fp[p][n] = booleanToNum(fp[p][n]);
- tp[m][p] = booleanToNum(tp[m][p]);
- if(isRealNum(tp[m][p]) && isRealNum(fp[p][n])){
- value += luckysheet_calcADPMM(fp[p][n], sp, tp[m][p]);//parseFloat(tp[m][p]) * parseFloat(fp[p][n]);
- }
- else{
- value += error.v;
- }
- }
- if(value.toString() == "NaN"){
- value = error.v;
- }
- rowArr.push(value);
- }
- result.push(rowArr);
- }
- }
- else{
- return error.na;
- }
- }
- else if(getObjType(fp[0]) == "array"){
- //二维数组与一维数组相乘(m*n 与 n 等于 m*n;m*1 与 n 等于 m*n;其它错误)
- if(fp[0].length == tp.length){
- for(let m = 0; m < fp.length; m++){
- let rowArr = [];
- for(let n = 0; n < fp[m].length; n++){
- fp[m][n] = booleanToNum(fp[m][n]);
- tp[n] = booleanToNum(tp[n]);
- let value;
- if(isRealNum(fp[m][n]) && isRealNum(tp[n])){
- value = luckysheet_calcADPMM(fp[m][n], sp, tp[n]);//parseFloat(fp[m][n]) * parseFloat(tp[n]);
- }
- else{
- value = error.v;
- }
- rowArr.push(value);
- }
- result.push(rowArr);
- }
- }
- else if(fp[0].length == 1){
- let rowlen = fp.length;
- let collen = tp.length;
- for(let m = 0; m < rowlen; m++){
- let rowArr = [];
- for(let n = 0; n < collen; n++){
- fp[m][0] = booleanToNum(fp[m][0]);
- tp[n] = booleanToNum(tp[n]);
- let value;
- if(isRealNum(fp[m][0]) && isRealNum(tp[n])){
- value = luckysheet_calcADPMM(fp[m][0], sp, tp[n]);// parseFloat(fp[m][0]) * parseFloat(tp[n]);
- }
- else{
- value = error.v;
- }
- rowArr.push(value);
- }
- result.push(rowArr);
- }
- }
- else{
- return error.na;
- }
- }
- else if(getObjType(tp[0]) == "array"){
- //二维数组与一维数组相乘(m*n 与 n 等于 m*n;m*1 与 n 等于 m*n;其它错误)
- if(tp[0].length == fp.length){
- for(let m = 0; m < tp.length; m++){
- let rowArr = [];
- for(let n = 0; n < tp[m].length; n++){
- fp[n] = booleanToNum(fp[n]);
- tp[m][n] = booleanToNum(tp[m][n]);
- let value;
- if(isRealNum(fp[n]) && isRealNum(tp[m][n])){
- value = luckysheet_calcADPMM(fp[n], sp, tp[m][n]);// parseFloat(fp[n]) * parseFloat(tp[m][n]);
- }
- else{
- value = error.v;
- }
- rowArr.push(value);
- }
- result.push(rowArr);
- }
- }
- else if(tp[0].length == 1){
- let rowlen = tp.length;
- let collen = fp.length;
- for(let m = 0; m < rowlen; m++){
- let rowArr = [];
- for(let n = 0; n < collen; n++){
- fp[n] = booleanToNum(fp[n]);
- tp[m][0] = booleanToNum(tp[m][0]);
- let value;
- if(isRealNum(fp[n]) && isRealNum(tp[m][0])){
- value = luckysheet_calcADPMM(fp[n], sp, tp[m][0]);//parseFloat(fp[n]) * parseFloat(tp[m][0]);
- }
- else{
- value = error.v;
- }
- rowArr.push(value);
- }
- result.push(rowArr);
- }
- }
- else{
- return error.na;
- }
- }
- else{
- //一维数组与一维数组相乘时,数组大小不一样是错误
- if(fp.length != tp.length){
- return error.na;
- }
- for(let n = 0; n < fp.length; n++){
- fp[n] = booleanToNum(fp[n]);
- tp[n] = booleanToNum(tp[n]);
- let value;
- if(isRealNum(fp[n]) && isRealNum(tp[n])){
- value = luckysheet_calcADPMM(fp[n], sp, tp[n]);// parseFloat(fp[n]) * parseFloat(tp[n]);
- }
- else{
- value = error.v;
- }
- result.push(value);
- }
- }
- return result;
- }
- else if(getObjType(fp) == "array"){
- tp = booleanToNum(tp);
- let result = [];
- if(getObjType(fp[0]) == "array"){
- for(let m = 0; m < fp.length; m++){
- let rowArr = [];
- for(let n = 0; n < fp[m].length; n++){
- fp[m][n] = booleanToNum(fp[m][n]);
- let value;
- if(isRealNum(fp[m][n]) && isRealNum(tp)){
- value = luckysheet_calcADPMM(fp[m][n], sp, tp);// parseFloat(fp[m][n]) * parseFloat(tp);
- }
- else{
- value = error.v;
- }
- rowArr.push(value);
- }
- result.push(rowArr);
- }
- }
- else{
- for(let n = 0; n < fp.length; n++){
- fp[n] = booleanToNum(fp[n]);
- let value;
- if(isRealNum(fp[n]) && isRealNum(tp)){
- value = luckysheet_calcADPMM(fp[n], sp, tp);// parseFloat(fp[n]) * parseFloat(tp);
- }
- else{
- value = error.v;
- }
- result.push(value);
- }
- }
- return result;
- }
- else if(getObjType(tp) == "array"){
- fp = booleanToNum(fp);
- let result = [];
- if(getObjType(tp[0]) == "array"){
- for(let m = 0; m < tp.length; m++){
- let rowArr = [];
- for(let n = 0; n < tp[m].length; n++){
- tp[m][n] = booleanToNum(tp[m][n]);
- let value;
- if(isRealNum(fp) && isRealNum(tp[m][n])){
- value = luckysheet_calcADPMM(fp, sp, tp[m][n]);// parseFloat(fp) * parseFloat(tp[m][n]);
- }
- else{
- value = error.v;
- }
- rowArr.push(value);
- }
- result.push(rowArr);
- }
- }
- else{
- for(let n = 0; n < tp.length; n++){
- tp[n] = booleanToNum(tp[n]);
- let value;
- if(isRealNum(fp) && isRealNum(tp[n])){
- value = luckysheet_calcADPMM(fp, sp, tp[n]);//parseFloat(fp) * parseFloat(tp[n]);
- }
- else{
- value = error.v;
- }
- result.push(value);
- }
- }
- return result;
- }
- else{
- fp = booleanToNum(fp);
- tp = booleanToNum(tp);
- let result;
- if(isRealNum(fp) && isRealNum(tp)){
- result = luckysheet_calcADPMM(fp, sp, tp);//parseFloat(fp) * parseFloat(tp);
- }
- else{
- result = error.v;
- }
- return result;
- }
- }
- else if(sp == "/"){ //除
- if(getObjType(fp) == "array" && getObjType(tp) == "array"){
- let result = [];
- if(getObjType(fp[0]) == "array" && getObjType(tp[0]) == "array"){
- //二维数组相除(m*n 与 m*n 等于 m*n;m*p 与 p*n 等于 m*n;其它错误)
- if(fp.length == tp.length && fp[0].length == tp[0].length){
- for(let m = 0; m < fp.length; m++){
- let rowArr = [];
- for(let n = 0; n < fp[m].length; n++){
- fp[m][n] = booleanToNum(fp[m][n]);
- tp[m][n] = booleanToNum(tp[m][n]);
- let value;
- if(isRealNum(fp[m][n]) && isRealNum(tp[m][n])){
- if(parseFloat(tp[m][n]) == 0){
- value = error.d;
- }
- else{
- value = luckysheet_calcADPMM(fp[m][n], sp, tp[m][n]);// parseFloat(fp[m][n]) / parseFloat(tp[m][n]);
- }
- }
- else{
- value = error.v;
- }
- rowArr.push(value);
- }
- result.push(rowArr);
- }
- }
- else if(fp[0].length == tp.length){
- let tp_inverse = inverse(tp);
- let rowlen = fp.length;
- let collen = tp_inverse[0].length;
- for(let m = 0; m < rowlen; m++){
- let rowArr = [];
- for(let n = 0; n < collen; n++){
- let value = 0;
- for(let p = 0; p < fp[0].length; p++){
- fp[m][p] = booleanToNum(fp[m][p]);
- tp_inverse[p][n] = booleanToNum(tp_inverse[p][n]);
- if(isRealNum(fp[m][p]) && isRealNum(tp_inverse[p][n])){
- value += luckysheet_calcADPMM(fp[m][p], "*", tp_inverse[p][n]);// parseFloat(fp[m][p]) * parseFloat(tp_inverse[p][n]);
- }
- else{
- value += error.v;
- }
- }
- if(value.toString() == "NaN"){
- value = error.v;
- }
- rowArr.push(value);
- }
- result.push(rowArr);
- }
- }
- else{
- return error.na;
- }
- }
- else if(getObjType(fp[0]) == "array"){
- //二维数组与一维数组相除(m*n 与 n 等于 m*n;m*1 与 n 等于 m*n;其它错误)
- if(fp[0].length == tp.length){
- for(let m = 0; m < fp.length; m++){
- let rowArr = [];
- for(let n = 0; n < fp[m].length; n++){
- fp[m][n] = booleanToNum(fp[m][n]);
- tp[n] = booleanToNum(tp[n]);
- let value;
- if(isRealNum(fp[m][n]) && isRealNum(tp[n])){
- if(parseFloat(tp[n]) == 0){
- value = error.d;
- }
- else{
- value = luckysheet_calcADPMM(fp[m][n], sp, tp[n]);// parseFloat(fp[m][n]) / parseFloat(tp[n]);
- }
- }
- else{
- value = error.v;
- }
- rowArr.push(value);
- }
- result.push(rowArr);
- }
- }
- else if(fp[0].length == 1){
- let rowlen = fp.length;
- let collen = tp.length;
- for(let m = 0; m < rowlen; m++){
- let rowArr = [];
- for(let n = 0; n < collen; n++){
- fp[m][0] = booleanToNum(fp[m][0]);
- tp[n] = booleanToNum(tp[n]);
- let value;
- if(isRealNum(fp[m][0]) && isRealNum(tp[n])){
- if(parseFloat(tp[n]) == 0){
- value = error.d;
- }
- else{
- value = luckysheet_calcADPMM(fp[m][0], sp, tp[n]);// parseFloat(fp[m][0]) / parseFloat(tp[n]);
- }
- }
- else{
- value = error.v;
- }
- rowArr.push(value);
- }
- result.push(rowArr);
- }
- }
- else{
- return error.na;
- }
- }
- else if(getObjType(tp[0]) == "array"){
- //二维数组与一维数组相除(m*n 与 n 等于 m*n;m*1 与 n 等于 m*n;其它错误)
- if(tp[0].length == fp.length){
- for(let m = 0; m < tp.length; m++){
- let rowArr = [];
- for(let n = 0; n < tp[m].length; n++){
- fp[n] = booleanToNum(fp[n]);
- tp[m][n] = booleanToNum(tp[m][n]);
- let value;
- if(isRealNum(fp[n]) && isRealNum(tp[m][n])){
- if(parseFloat(tp[m][n]) == 0){
- value = error.d;
- }
- else{
- value = luckysheet_calcADPMM(fp[n], sp, tp[m][n]);//parseFloat(fp[n]) / parseFloat(tp[m][n]);
- }
- }
- else{
- value = error.v;
- }
- rowArr.push(value);
- }
- result.push(rowArr);
- }
- }
- else if(tp[0].length == 1){
- let rowlen = tp.length;
- let collen = fp.length;
- for(let m = 0; m < rowlen; m++){
- let rowArr = [];
- for(let n = 0; n < collen; n++){
- fp[n] = booleanToNum(fp[n]);
- tp[m][0] = booleanToNum(tp[m][0]);
- let value;
- if(isRealNum(fp[n]) && isRealNum(tp[m][0])){
- if(parseFloat(tp[m][0]) == 0){
- value = error.d;
- }
- else{
- value = luckysheet_calcADPMM(fp[n], sp, tp[m][0]);//parseFloat(fp[n]) / parseFloat(tp[m][0]);
- }
- }
- else{
- value = error.v;
- }
- rowArr.push(value);
- }
- result.push(rowArr);
- }
- }
- else{
- return error.na;
- }
- }
- else{
- //一维数组与一维数组相除时,数组大小不一样是错误
- if(fp.length != tp.length){
- return error.na;
- }
- for(let n = 0; n < fp.length; n++){
- fp[n] = booleanToNum(fp[n]);
- tp[n] = booleanToNum(tp[n]);
- let value;
- if(isRealNum(fp[n]) && isRealNum(tp[n])){
- if(parseFloat(tp[n]) == 0){
- value = error.d;
- }
- else{
- value = luckysheet_calcADPMM(fp[n], sp, tp[n]);//parseFloat(fp[n]) / parseFloat(tp[n]);
- }
- }
- else{
- value = error.v;
- }
- result.push(value);
- }
- }
- return result;
- }
- else if(getObjType(fp) == "array"){
- tp = booleanToNum(tp);
- let result = [];
- if(getObjType(fp[0]) == "array"){
- for(let m = 0; m < fp.length; m++){
- let rowArr = [];
- for(let n = 0; n < fp[m].length; n++){
- fp[m][n] = booleanToNum(fp[m][n]);
- let value;
- if(isRealNum(fp[m][n]) && isRealNum(tp)){
- if(parseFloat(tp) == 0){
- value = error.d;
- }
- else{
- value = luckysheet_calcADPMM(fp[m][n], sp, tp);//parseFloat(fp[m][n]) / parseFloat(tp);
- }
- }
- else{
- value = error.v;
- }
- rowArr.push(value);
- }
- result.push(rowArr);
- }
- }
- else{
- for(let n = 0; n < fp.length; n++){
- fp[n] = booleanToNum(fp[n]);
- let value;
- if(isRealNum(fp[n]) && isRealNum(tp)){
- if(parseFloat(tp) == 0){
- value = error.d;
- }
- else{
- value = luckysheet_calcADPMM(fp[n], sp, tp);//parseFloat(fp[n]) / parseFloat(tp);
- }
- }
- else{
- value = error.v;
- }
- result.push(value);
- }
- }
- return result;
- }
- else if(getObjType(tp) == "array"){
- fp = booleanToNum(fp);
- let result = [];
- if(getObjType(tp[0]) == "array"){
- for(let m = 0; m < tp.length; m++){
- let rowArr = [];
- for(let n = 0; n < tp[m].length; n++){
- tp[m][n] = booleanToNum(tp[m][n]);
- let value;
- if(isRealNum(fp) && isRealNum(tp[m][n])){
- if(parseFloat(tp[m][n]) == 0){
- value = error.d;
- }
- else{
- value = luckysheet_calcADPMM(fp, sp, tp[m][n]);//parseFloat(fp) / parseFloat(tp[m][n]);
- }
- }
- else{
- value = error.v;
- }
- rowArr.push(value);
- }
- result.push(rowArr);
- }
- }
- else{
- for(let n = 0; n < tp.length; n++){
- tp[n] = booleanToNum(tp[n]);
- let value;
- if(isRealNum(fp) && isRealNum(tp[n])){
- if(parseFloat(tp[n]) == 0){
- value = error.d;
- }
- else{
- value = luckysheet_calcADPMM(fp, sp, tp[n]);//parseFloat(fp) / parseFloat(tp[n]);
- }
- }
- else{
- value = error.v;
- }
- result.push(value);
- }
- }
- return result;
- }
- else{
- fp = booleanToNum(fp);
- tp = booleanToNum(tp);
- let result;
- if(isRealNum(fp) && isRealNum(tp)){
- if(parseFloat(tp) == 0){
- result = error.d;
- }
- else{
- result = luckysheet_calcADPMM(fp, sp, tp);//parseFloat(fp) / parseFloat(tp);
- }
- }
- else{
- result = error.v;
- }
- return result;
- }
- }
- else if(sp == "+" || sp == "-" || sp == "%"){ //加 减 取余
- if(getObjType(fp) == "array" && getObjType(tp) == "array"){
- let result = [];
- if(getObjType(fp[0]) == "array" && getObjType(tp[0]) == "array"){
- if(fp.length != tp.length && fp[0].length != tp[0].length){
- return error.na;
- }
- for(let m = 0; m < fp.length; m++){
- let rowArr = [];
- for(let n = 0; n < fp[m].length; n++){
- fp[m][n] = booleanToNum(fp[m][n]);
- tp[m][n] = booleanToNum(tp[m][n]);
- let value;
- if(isRealNum(fp[m][n]) && isRealNum(tp[m][n])){
- if(sp == "%" && parseFloat(tp[m][n]) == 0){
- value = error.d;
- }
- else{
- value = luckysheet_calcADPMM(fp[m][n], sp, tp[m][n]);// eval(parseFloat(fp[m][n]) + sp + parseFloat(tp[m][n]));
- }
- }
- else{
- value = error.v;
- }
- rowArr.push(value);
- }
- result.push(rowArr);
- }
- }
- else if(getObjType(fp[0]) == "array"){
- if(fp[0].length != tp.length){
- return error.na;
- }
- for(let m = 0; m < fp.length; m++){
- let rowArr = [];
- for(let n = 0; n < fp[m].length; n++){
- fp[m][n] = booleanToNum(fp[m][n]);
- tp[n] = booleanToNum(tp[n]);
- let value;
- if(isRealNum(fp[m][n]) && isRealNum(tp[n])){
- if(sp == "%" && parseFloat(tp[n]) == 0){
- value = error.d;
- }
- else{
- value = luckysheet_calcADPMM(fp[m][n], sp, tp[n]);//eval(parseFloat(fp[m][n]) + sp + parseFloat(tp[n]));
- }
- }
- else{
- value = error.v;
- }
- rowArr.push(value);
- }
- result.push(rowArr);
- }
- }
- else if(getObjType(tp[0]) == "array"){
- if(tp[0].length != fp.length){
- return error.na;
- }
- for(let m = 0; m < tp.length; m++){
- let rowArr = [];
- for(let n = 0; n < tp[m].length; n++){
- fp[n] = booleanToNum(fp[n]);
- tp[m][n] = booleanToNum(tp[m][n]);
- let value;
- if(isRealNum(fp[n]) && isRealNum(tp[m][n])){
- if(sp == "%" && parseFloat(tp[m][n]) == 0){
- value = error.d;
- }
- else{
- value = luckysheet_calcADPMM(fp[n], sp, tp[m][n]);//eval(parseFloat(fp[n]) + sp + parseFloat(tp[m][n]));
- }
- }
- else{
- value = error.v;
- }
- rowArr.push(value);
- }
- result.push(rowArr);
- }
- }
- else{
- if(fp.length != tp.length){
- return error.na;
- }
- for(let n = 0; n < fp.length; n++){
- fp[n] = booleanToNum(fp[n]);
- tp[n] = booleanToNum(tp[n]);
- let value;
- if(isRealNum(fp[n]) && isRealNum(tp[n])){
- if(sp == "%" && parseFloat(tp[n]) == 0){
- value = error.d;
- }
- else{
- value = luckysheet_calcADPMM(fp[n], sp, tp[n]);//eval(parseFloat(fp[n]) + sp + "(" + parseFloat(tp[n]) + ")" );
- }
- }
- else{
- value = error.v;
- }
- result.push(value);
- }
- }
- return result;
- }
- else if(getObjType(fp) == "array"){
- tp = booleanToNum(tp);
- let result = [];
- if(getObjType(fp[0]) == "array"){
- for(let m = 0; m < fp.length; m++){
- let rowArr = [];
- for(let n = 0; n < fp[m].length; n++){
- fp[m][n] = booleanToNum(fp[m][n]);
- let value;
- if(isRealNum(fp[m][n]) && isRealNum(tp)){
- if(sp == "%" && parseFloat(tp) == 0){
- value = error.d;
- }
- else{
- value = luckysheet_calcADPMM(fp[m][n], sp, tp);//eval(parseFloat(fp[m][n]) + sp + parseFloat(tp));
- }
- }
- else{
- value = error.v;
- }
- rowArr.push(value);
- }
- result.push(rowArr);
- }
- }
- else{
- for(let n = 0; n < fp.length; n++){
- fp[n] = booleanToNum(fp[n]);
- let value;
- if(isRealNum(fp[n]) && isRealNum(tp)){
- if(sp == "%" && parseFloat(tp) == 0){
- value = error.d;
- }
- else{
- value = luckysheet_calcADPMM(fp[n], sp, tp);//eval(parseFloat(fp[n]) + sp + parseFloat(tp));
- }
- }
- else{
- value = error.v;
- }
- result.push(value);
- }
- }
- return result;
- }
- else if(getObjType(tp) == "array"){
- fp = booleanToNum(fp);
- let result = [];
- if(getObjType(tp[0]) == "array"){
- for(let m = 0; m < tp.length; m++){
- let rowArr = [];
- for(let n = 0; n < tp[m].length; n++){
- tp[m][n] = booleanToNum(tp[m][n]);
- let value;
- if(isRealNum(fp) && isRealNum(tp[m][n])){
- if(sp == "%" && parseFloat(tp[m][n]) == 0){
- value = error.d;
- }
- else{
- value = luckysheet_calcADPMM(fp, sp, tp[m][n]);//eval(parseFloat(fp) + sp + parseFloat(tp[m][n]));
- }
- }
- else{
- value = error.v;
- }
- rowArr.push(value);
- }
- result.push(rowArr);
- }
- }
- else{
- for(let n = 0; n < tp.length; n++){
- tp[n] = booleanToNum(tp[n]);
- let value;
- if(isRealNum(fp) && isRealNum(tp[n])){
- if(sp == "%" && parseFloat(tp[n]) == 0){
- value = error.d;
- }
- else{
- value = luckysheet_calcADPMM(fp, sp, tp[n]);//eval(parseFloat(fp) + sp + parseFloat(tp[n]));
- }
- }
- else{
- value = error.v;
- }
- result.push(value);
- }
- }
- return result;
- }
- else{
- fp = booleanToNum(fp);
- tp = booleanToNum(tp);
- let result;
- if(isRealNum(fp) && isRealNum(tp)){
- if(sp == "%" && parseFloat(tp) == 0){
- result = error.d;
- }
- else{
- result = luckysheet_calcADPMM(fp, sp, tp);//eval(parseFloat(fp) + sp + "(" + parseFloat(tp) + ")");
- }
- }
- else{
- result = error.v;
- }
- return result;
- }
- }
- else if(sp == "==" || sp == "!=" || sp == ">=" || sp == "<=" || sp == ">" || sp == "<"){ //比较运算符
- if(getObjType(fp) == "array" && getObjType(tp) == "array"){
- let result = [];
- if(getObjType(fp[0]) == "array" && getObjType(tp[0]) == "array"){
- if(fp.length != tp.length && fp[0].length != tp[0].length){
- return error.na;
- }
- for(let m = 0; m < fp.length; m++){
- let rowArr = [];
- for(let n = 0; n < fp[m].length; n++){
- let value = booleanOperation(fp[m][n], sp, tp[m][n]);
- rowArr.push(value);
- }
- result.push(rowArr);
- }
- }
- else if(getObjType(fp[0]) == "array"){
- if(fp[0].length != tp.length){
- return error.na;
- }
- for(let m = 0; m < fp.length; m++){
- let rowArr = [];
- for(let n = 0; n < fp[m].length; n++){
- let value = booleanOperation(fp[m][n], sp, tp[n]);
- rowArr.push(value);
- }
- result.push(rowArr);
- }
- }
- else if(getObjType(tp[0]) == "array"){
- if(tp[0].length != fp.length){
- return error.na;
- }
- for(let m = 0; m < tp.length; m++){
- let rowArr = [];
- for(let n = 0; n < tp[m].length; n++){
- let value = booleanOperation(fp[n], sp, tp[m][n]);
- rowArr.push(value);
- }
- result.push(rowArr);
- }
- }
- else{
- if(fp.length != tp.length){
- return error.na;
- }
- for(let n = 0; n < fp.length; n++){
- let value = booleanOperation(fp[n], sp, tp[n]);
- result.push(value);
- }
- }
- return result;
- }
- else if(getObjType(fp) == "array"){
- let result = [];
- if(getObjType(fp[0]) == "array"){
- for(let m = 0; m < fp.length; m++){
- let rowArr = [];
- for(let n = 0; n < fp[m].length; n++){
- let value = booleanOperation(fp[m][n], sp, tp);
- rowArr.push(value);
- }
- result.push(rowArr);
- }
- }
- else{
- for(let n = 0; n < fp.length; n++){
- let value = booleanOperation(fp[n], sp, tp);
- result.push(value);
- }
- }
- return result;
- }
- else if(getObjType(tp) == "array"){
- let result = [];
- if(getObjType(tp[0]) == "array"){
- for(let m = 0; m < tp.length; m++){
- let rowArr = [];
- for(let n = 0; n < tp[m].length; n++){
- let value = booleanOperation(fp, sp, tp[m][n]);
- rowArr.push(value);
- }
- result.push(rowArr);
- }
- }
- else{
- for(let n = 0; n < tp.length; n++){
- let value = booleanOperation(fp, sp, tp[n]);
- result.push(value);
- }
- }
- return result;
- }
- else{
- return booleanOperation(fp, sp, tp);
- }
- }
- else if(sp == "&"){ //连接符
- if(getObjType(fp) == "array" && getObjType(tp) == "array"){
- let result = [];
- if(getObjType(fp[0]) == "array" && getObjType(tp[0]) == "array"){
- if(fp.length != tp.length && fp[0].length != tp[0].length){
- return error.na;
- }
- for(let m = 0; m < fp.length; m++){
- let rowArr = [];
- for(let n = 0; n < fp[m].length; n++){
- rowArr.push(fp[m][n] + "" + tp[m][n]);
- }
- result.push(rowArr);
- }
- }
- else if(getObjType(fp[0]) == "array"){
- if(fp[0].length != tp.length){
- return error.na;
- }
- for(let m = 0; m < fp.length; m++){
- let rowArr = [];
- for(let n = 0; n < fp[m].length; n++){
- rowArr.push(fp[m][n] + "" + tp[n]);
- }
- result.push(rowArr);
- }
- }
- else if(getObjType(tp[0]) == "array"){
- if(tp[0].length != fp.length){
- return error.na;
- }
- for(let m = 0; m < tp.length; m++){
- let rowArr = [];
- for(let n = 0; n < tp[m].length; n++){
- rowArr.push(fp[n] + "" + tp[m][n]);
- }
- result.push(rowArr);
- }
- }
- else{
- if(fp.length != tp.length){
- return error.na;
- }
- for(let n = 0; n < fp.length; n++){
- result.push(fp[n] + "" + tp[n]);
- }
- }
- return result;
- }
- else if(getObjType(fp) == "array"){
- let result = [];
- if(getObjType(fp[0]) == "array"){
- for(let m = 0; m < fp.length; m++){
- let rowArr = [];
- for(let n = 0; n < fp[m].length; n++){
- rowArr.push(fp[m][n] + "" + tp);
- }
- result.push(rowArr);
- }
- }
- else{
- for(let n = 0; n < fp.length; n++){
- result.push(fp[n] + "" + tp);
- }
- }
- return result;
- }
- else if(getObjType(tp) == "array"){
- let result = [];
- if(getObjType(tp[0]) == "array"){
- for(let m = 0; m < tp.length; m++){
- let rowArr = [];
- for(let n = 0; n < tp[m].length; n++){
- rowArr.push(fp + "" + tp[m][n]);
- }
- result.push(rowArr);
- }
- }
- else{
- for(let n = 0; n < tp.length; n++){
- result.push(fp + "" + tp[n]);
- }
- }
- return result;
- }
- else{
- return fp + "" + tp;
- }
- }
- else if(sp == "^"){ //幂
- if(getObjType(fp) == "array" && getObjType(tp) == "array"){
- let result = [];
- if(getObjType(fp[0]) == "array" && getObjType(tp[0]) == "array"){
- if(fp.length != tp.length && fp[0].length != tp[0].length){
- return error.na;
- }
- for(let m = 0; m < fp.length; m++){
- let rowArr = [];
- for(let n = 0; n < fp[m].length; n++){
- fp[m][n] = booleanToNum(fp[m][n]);
- tp[m][n] = booleanToNum(tp[m][n]);
- let value;
- if(isRealNum(fp[m][n]) && isRealNum(tp[m][n])){
- value = Math.pow(parseFloat(fp[m][n]), parseFloat(tp[m][n]));
- }
- else{
- value = error.v;
- }
- rowArr.push(value);
- }
- result.push(rowArr);
- }
- }
- else if(getObjType(fp[0]) == "array"){
- if(fp[0].length != tp.length){
- return error.na;
- }
- for(let m = 0; m < fp.length; m++){
- let rowArr = [];
- for(let n = 0; n < fp[m].length; n++){
- fp[m][n] = booleanToNum(fp[m][n]);
- tp[n] = booleanToNum(tp[n]);
- let value;
- if(isRealNum(fp[m][n]) && isRealNum(tp[n])){
- value = Math.pow(parseFloat(fp[m][n]), parseFloat(tp[n]));
- }
- else{
- value = error.v;
- }
- rowArr.push(value);
- }
- result.push(rowArr);
- }
- }
- else if(getObjType(tp[0]) == "array"){
- if(tp[0].length != fp.length){
- return error.na;
- }
- for(let m = 0; m < tp.length; m++){
- let rowArr = [];
- for(let n = 0; n < tp[m].length; n++){
- fp[n] = booleanToNum(fp[n]);
- tp[m][n] = booleanToNum(tp[m][n]);
- let value;
- if(isRealNum(fp[n]) && isRealNum(tp[m][n])){
- value = Math.pow(parseFloat(fp[n]), parseFloat(tp[m][n]));
- }
- else{
- value = error.v;
- }
- rowArr.push(value);
- }
- result.push(rowArr);
- }
- }
- else{
- if(fp.length != tp.length){
- return error.na;
- }
- for(let n = 0; n < fp.length; n++){
- fp[n] = booleanToNum(fp[n]);
- tp[n] = booleanToNum(tp[n]);
- let value;
- if(isRealNum(fp[n]) && isRealNum(tp[n])){
- value = Math.pow(parseFloat(fp[n]), parseFloat(tp[n]));
- }
- else{
- value = error.v;
- }
- result.push(value);
- }
- }
- return result;
- }
- else if(getObjType(fp) == "array"){
- tp = booleanToNum(tp);
- let result = [];
- if(getObjType(fp[0]) == "array"){
- for(let m = 0; m < fp.length; m++){
- let rowArr = [];
- for(let n = 0; n < fp[m].length; n++){
- fp[m][n] = booleanToNum(fp[m][n]);
- let value;
- if(isRealNum(fp[m][n]) && isRealNum(tp)){
- value = Math.pow(parseFloat(fp[m][n]), parseFloat(tp));
- }
- else{
- value = error.v;
- }
- rowArr.push(value);
- }
- result.push(rowArr);
- }
- }
- else{
- for(let n = 0; n < fp.length; n++){
- fp[n] = booleanToNum(fp[n]);
- let value;
- if(isRealNum(fp[n]) && isRealNum(tp)){
- value = Math.pow(parseFloat(fp[n]), parseFloat(tp));
- }
- else{
- value = error.v;
- }
- result.push(value);
- }
- }
- return result;
- }
- else if(getObjType(tp) == "array"){
- fp = booleanToNum(fp);
- let result = [];
- if(getObjType(tp[0]) == "array"){
- for(let m = 0; m < tp.length; m++){
- let rowArr = [];
- for(let n = 0; n < tp[m].length; n++){
- tp[m][n] = booleanToNum(tp[m][n]);
- let value;
- if(isRealNum(fp) && isRealNum(tp[m][n])){
- value = Math.pow(parseFloat(fp), parseFloat(tp[m][n]));
- }
- else{
- value = error.v;
- }
- rowArr.push(value);
- }
- result.push(rowArr);
- }
- }
- else{
- for(let n = 0; n < tp.length; n++){
- tp[n] = booleanToNum(tp[n]);
- let value;
- if(isRealNum(fp) && isRealNum(tp[n])){
- value = Math.pow(parseFloat(fp), parseFloat(tp[n]));
- }
- else{
- value = error.v;
- }
- result.push(value);
- }
- }
- return result;
- }
- else{
- fp = booleanToNum(fp);
- tp = booleanToNum(tp);
- let result;
- if(isRealNum(fp) && isRealNum(tp)){
- result = Math.pow(parseFloat(fp), parseFloat(tp));
- }
- else{
- result = error.v;
- }
- return result;
- }
- }
- }
- //解析 公式中{1,2,3;2,3,4} 为数组[[1,2,3],[2,3,4]]
- function luckysheet_getarraydata() {
- let fp = arguments[0];
- fp = fp.replace("{", "").replace("}", "").replace(/\"/g, '');
- let arr = [];
- if(fp.indexOf(";") > -1){
- arr = fp.split(";");
- for(let i = 0; i < arr.length; i++){
- arr[i] = arr[i].split(",");
- }
- }
- else{
- arr = fp.split(",");
- }
- return arr;
- }
- function luckysheet_calcADPMM(fp, sp, tp){
- let value;
- if(sp=="+"){
- value = numeral(fp).add(tp).value();
- }
- else if(sp=="-"){
- value = numeral(fp).subtract(tp).value();
- }
- else if(sp=="%"){
- value = new Function("return " + parseFloat(fp) + sp + "(" + parseFloat(tp) + ")" )();
- }
- else if(sp=="/"){
- value = numeral(fp).divide(tp).value();
- }
- else if(sp=="*"){
- value = numeral(fp).multiply(tp).value();
- }
- return value;
- }
- function luckysheet_getcelldata(txt) {
- if (window.luckysheet_getcelldata_cache == null) {
- window.luckysheet_getcelldata_cache = {};
- }
- if (txt in window.luckysheet_getcelldata_cache) {
- return window.luckysheet_getcelldata_cache[txt];
- }
- let luckysheetfile = getluckysheetfile();
- let val = txt.split("!");
- let sheettxt = "",
- rangetxt = "",
- sheetIndex = -1,
- sheetdata = null;
-
- if (val.length > 1) {
- sheettxt = val[0].replace(/''/g,"'");
- rangetxt = val[1];
- if(sheettxt.substr(0,1)=="'" && sheettxt.substr(sheettxt.length-1,1)=="'"){
- sheettxt = sheettxt.substring(1,sheettxt.length-1);
- }
-
- for (let i in luckysheetfile) {
- if (sheettxt == luckysheetfile[i].name) {
- sheetIndex = luckysheetfile[i].index;
- sheetdata = luckysheetfile[i].data;
- break;
- }
- }
- if (sheetIndex == -1) {
- sheetIndex = 0;
- }
- }
- else {
- let index = getSheetIndex(Store.calculateSheetIndex);
- sheettxt = luckysheetfile[index].name;
- sheetIndex = luckysheetfile[index].index;
- // sheetdata = Store.flowdata;
- sheetdata = luckysheetfile[index].data;
- rangetxt = val[0];
- // 取消execFunctionGroupData,改用execFunctionGlobalData
- // if (formula.execFunctionGroupData != null) {
- // sheetdata = formula.execFunctionGroupData;
- // }
- }
- if (rangetxt.indexOf(":") == -1) {
- let row = parseInt(rangetxt.replace(/[^0-9]/g, "")) - 1;
- let col = ABCatNum(rangetxt.replace(/[^A-Za-z]/g, ""));
- if (!isNaN(row) && !isNaN(col)) {
- let ret = getdatabyselectionD(sheetdata, {
- "row": [row, row],
- "column": [col, col]
- })[0][0];
- if (formula.execFunctionGlobalData != null) {
- let ef = formula.execFunctionGlobalData[row+"_"+col+"_"+sheetIndex];
- if(ef!=null){
- ret = ef;
- }
- }
- //范围的长宽
- let rowl = 1;
- let coll = 1;
- let retAll= {
- "sheetName": sheettxt,
- "startCell": rangetxt,
- "rowl": rowl,
- "coll": coll,
- "data": ret
- };
- window.luckysheet_getcelldata_cache[txt] = retAll;
- return retAll;
- }
- else {
- return [];
- }
- }
- else {
- rangetxt = rangetxt.split(":");
- let row = [], col = [];
- row[0] = parseInt(rangetxt[0].replace(/[^0-9]/g, "")) - 1;
- row[1] = parseInt(rangetxt[1].replace(/[^0-9]/g, "")) - 1;
-
- if (isNaN(row[0])) {
- row[0] = 0;
- }
- if (isNaN(row[1])) {
- row[1] = sheetdata.length - 1;
- }
- if (row[0] > row[1]) {
- tooltip.info("选择失败", "输入范围错误!");
- return [];
- }
- col[0] = ABCatNum(rangetxt[0].replace(/[^A-Za-z]/g, ""));
- col[1] = ABCatNum(rangetxt[1].replace(/[^A-Za-z]/g, ""));
-
- if (isNaN(col[0])) {
- col[0] = 0;
- }
- if (isNaN(col[1])) {
- col[1] = sheetdata[0].length - 1;
- }
- if (col[0] > col[1]) {
- tooltip.info("选择失败", "输入范围错误!");
- return [];
- }
-
- let ret = getdatabyselectionD(sheetdata, {
- "row": row,
- "column": col
- });
- if(formula.execFunctionGlobalData!=null){
- for(let r=row[0];r<=row[1];r++){
- for(let c=col[0];c<=col[1];c++){
- let ef = formula.execFunctionGlobalData[r+"_"+c+"_"+sheetIndex];
- if(ef!=null){
- let oldObj = ret[r-row[0]][c-col[0]]
- ret[r-row[0]][c-col[0]] = {...oldObj,...ef};
- }
- }
- }
- }
-
- //范围的长宽
- let rowl = row[1] - row[0] + 1;
- let coll = col[1] - col[0] + 1;
- let retAll= {
- "sheetName": sheettxt,
- "startCell": rangetxt[0],
- "rowl": rowl,
- "coll": coll,
- "data": ret
- };
-
- window.luckysheet_getcelldata_cache[txt] = retAll;
- return retAll;
- }
- }
- //解析单个取得的值,有字符串,数字,引用单元格或者函数
- function luckysheet_parseData(value) {
- if(typeof value === "object" ){
- if(value == null){
- return "";
- }
- else if(Array.isArray(value)){ //函数返回的带期望格式的数组,可提取格式
- let v = genarate(value[0]);
- return v[2];
- }
- else{ //getcelldat引用单元格对象,带有格式
- if(Array.isArray(value.data)){ //单元格区域
- return error.v;
- }
- else{ //单个单元格
- if(value.data.v === undefined){
- return "";
- }
- else{
- return value.data.v;
- }
- }
- }
- }
- else if(!formula.isCompareOperator(value).flag){
- let v = genarate(value);
- return v[2];
- }
- else if(typeof value === "string" || typeof value === "number"){
- return value;
- }
- return error.v;
- }
- function luckysheet_getValue() {
- //解析获取函数参数,无格式,且可包含带操作符的">5"
- //数据类型:1.手动输入或函数返回的字符串,普通字符串或数字直接取值,特殊格式需转化 如:"2019-1-1"(特殊格式转化为数字)、">5"或数字
- //2.引用单元格对象,取得二维数组或单个的v 如:A1
- //3.函数返回的带期望格式的数组,取得第一个参数,转化为数字 如:["2019-1-1",true]
- let args = arguments[0];
- for(let i = 0; i < args.length; i++){
- let value = args[i];
- if(typeof value === "object" ){
- if(value == null){
- value = "";
- }
- else if(Array.isArray(value)){ //函数返回的带期望格式的数组,可提取格式
- let v = genarate(value[0]);
- value = v[2];
- }
- else{ //getcelldat引用单元格对象,带有格式
- if(Array.isArray(value.data)){ //单元格区域
- value = value.data;
- }
- else{ //单个单元格
- if(value.data.v === undefined){ //空白单元格
- value = "";
- }
- else{
- value = value.data.v;
- }
- }
- }
- }
- else if(!formula.isCompareOperator(value).flag){
- let v = genarate(value);
- value = v[2];
- }
-
- args[i] = value;
- }
- }
- function luckysheet_indirect_check() {
- let cellTxt = arguments[0];
- if (cellTxt == null || cellTxt.length == 0) {
- return null;
- }
- return cellTxt;
- }
- function luckysheet_indirect_check_return(txt) {
- return txt;
- }
- function luckysheet_offset_check() {
- if (!(getObjType(arguments[0]) == "object" && arguments[0].startCell != null)) {
- return formula.error.v;
- }
- var reference = arguments[0].startCell;
- //要偏移的行数
- var rows = func_methods.getFirstValue(arguments[1]);
- if (valueIsError(rows)) {
- return rows;
- }
- if (!isRealNum(rows)) {
- return formula.error.v;
- }
- rows = parseInt(rows);
- //要偏移的列数
- var cols = func_methods.getFirstValue(arguments[2]);
- if (valueIsError(cols)) {
- return cols;
- }
- if (!isRealNum(cols)) {
- return formula.error.v;
- }
- cols = parseInt(cols);
- //要从偏移目标开始返回的范围的高度
- var height = arguments[0].rowl;
- if (arguments.length >= 4) {
- height = func_methods.getFirstValue(arguments[3]);
- if (valueIsError(height)) {
- return height;
- }
- if (!isRealNum(height)) {
- return formula.error.v;
- }
- height = parseInt(height);
- }
- //要从偏移目标开始返回的范围的宽度
- var width = arguments[0].coll;
- if (arguments.length == 5) {
- width = func_methods.getFirstValue(arguments[4]);
- if (valueIsError(width)) {
- return width;
- }
- if (!isRealNum(width)) {
- return formula.error.v;
- }
- width = parseInt(width);
- }
- if (height < 1 || width < 1) {
- return formula.error.r;
- }
- //计算
- var cellrange = formula.getcellrange(reference);
- var cellRow0 = cellrange["row"][0];
- var cellCol0 = cellrange["column"][0];
- cellRow0 += rows;
- cellCol0 += cols;
- var cellRow1 = cellRow0 + height - 1;
- var cellCol1 = cellCol0 + width - 1;
- if (cellRow0 < 0 || cellRow1 >= Store.flowdata.length || cellCol0 < 0 || cellCol1 >= Store.flowdata[0].length) {
- return formula.error.r;
- }
- return getRangetxt(Store.calculateSheetIndex, {
- row: [cellRow0, cellRow1],
- column: [cellCol0, cellCol1]
- });
- }
- function luckysheet_getSpecialReference(isCellFirst, param1, param2) {
- let functionRange, rangeTxt;
- if(isCellFirst){
- rangeTxt = param1;
- functionRange = param2;
- }
- else{
- functionRange = param1;
- rangeTxt = param2;
- }
- if(functionRange.startCell.indexOf(":")>-1 || rangeTxt.indexOf(":")>-1){
- return error.v;
- }
- if(isCellFirst){
- return luckysheet_getcelldata(rangeTxt + ":" +functionRange.startCell);
- }
- else{
- let rangeT = rangeTxt, sheetName="";
- if(rangeTxt.indexOf("!")>-1){
- let rangetxtArr = rangeTxt.split("!");
- sheetName = rangetxtArr[0] + "!";
- rangeT = rangetxtArr[1];
- }
- return luckysheet_getcelldata(sheetName + functionRange.startCell + ":" + rangeT);
- }
-
- }
- export {
- luckysheet_compareWith,
- luckysheet_getarraydata,
- luckysheet_getcelldata,
- luckysheet_parseData,
- luckysheet_getValue,
- luckysheet_indirect_check,
- luckysheet_indirect_check_return,
- luckysheet_offset_check,
- luckysheet_calcADPMM,
- luckysheet_getSpecialReference
- }
|