func.js 61 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968
  1. import func_methods from '../global/func_methods';
  2. import formula from '../global/formula';
  3. import tooltip from '../global/tooltip';
  4. import { isRealNum, valueIsError,error } from '../global/validate';
  5. import { getdatabyselectionD } from '../global/getdata';
  6. import { genarate } from '../global/format';
  7. import { inverse } from '../function/matrix_methods';
  8. import { getSheetIndex, getluckysheetfile, getRangetxt } from '../methods/get';
  9. import { getObjType, ABCatNum } from '../utils/util';
  10. import Store from '../store';
  11. import numeral from 'numeral';
  12. //函数功能:比较或运算
  13. function luckysheet_compareWith() {
  14. //第一个参数和第三个参数,返回比较结果的布尔值或者运算值
  15. //formula.operatorjson; 存储运算符和比较符
  16. let sp = arguments[1]; //操作符
  17. //参数一
  18. let data_fp = arguments[0];
  19. let fp;
  20. if(getObjType(data_fp) == "object" && data_fp.startCell != null){ //参数是选区
  21. if(sp == "&"){
  22. fp = func_methods.getCellDataDyadicArr(data_fp, "text");
  23. }
  24. else{
  25. fp = func_methods.getCellDataDyadicArr(data_fp, "number");
  26. }
  27. if(fp.length == 1 && fp[0].length == 1){
  28. fp = fp[0][0];
  29. }
  30. }
  31. else{
  32. fp = data_fp;
  33. }
  34. //参数二
  35. let data_tp = arguments[2];
  36. let tp;
  37. if(getObjType(data_tp) == "object" && data_tp.startCell != null){ //参数是选区
  38. if(sp == "&"){
  39. tp = func_methods.getCellDataDyadicArr(data_tp, "text");
  40. }
  41. else{
  42. tp = func_methods.getCellDataDyadicArr(data_tp, "number");
  43. }
  44. if(tp.length == 1 && tp[0].length == 1){
  45. tp = tp[0][0];
  46. }
  47. }
  48. else{
  49. tp = data_tp;
  50. }
  51. if(valueIsError(fp)){
  52. return fp;
  53. }
  54. if(valueIsError(tp)){
  55. return tp;
  56. }
  57. //参数是不规则二维数组 时 return #VALUE! 错误
  58. if(getObjType(fp) == "array" && getObjType(fp[0]) == "array" && !func_methods.isDyadicArr(fp)){
  59. return error.v;
  60. }
  61. if(getObjType(tp) == "array" && getObjType(tp[0]) == "array" && !func_methods.isDyadicArr(tp)){
  62. return error.v;
  63. }
  64. if(sp == "<>"){
  65. sp = "!=";
  66. }
  67. if(sp == "="){
  68. sp = "==";
  69. }
  70. if(fp==null && tp==null){
  71. return "#INVERSE!";
  72. }
  73. else if(fp=="#INVERSE!"){
  74. fp =0;
  75. if(sp=="-"){
  76. sp = "+";
  77. }
  78. else if(sp=="+"){
  79. sp = "-";
  80. }
  81. }
  82. else if(sp == "-" && fp == null){
  83. fp = 0;
  84. }
  85. else if(sp == "/" && (tp == 0 || tp == null)){
  86. return error.d;
  87. }
  88. //计算result
  89. function booleanOperation(a, operator, b){
  90. if(isRealNum(a)){
  91. a = parseFloat(a);
  92. }
  93. if(isRealNum(b)){
  94. b = parseFloat(b);
  95. }
  96. if(operator == "=="){
  97. if(a == b){
  98. return true;
  99. }
  100. else{
  101. return false;
  102. }
  103. }
  104. else if(operator == "!="){
  105. if(a != b){
  106. return true;
  107. }
  108. else{
  109. return false;
  110. }
  111. }
  112. else if(operator == ">="){
  113. if(a >= b){
  114. return true;
  115. }
  116. else{
  117. return false;
  118. }
  119. }
  120. else if(operator == "<="){
  121. if(a <= b){
  122. return true;
  123. }
  124. else{
  125. return false;
  126. }
  127. }
  128. else if(operator == ">"){
  129. if(a > b){
  130. return true;
  131. }
  132. else{
  133. return false;
  134. }
  135. }
  136. else if(operator == "<"){
  137. if(a < b){
  138. return true;
  139. }
  140. else{
  141. return false;
  142. }
  143. }
  144. }
  145. //布尔值对应数字(true = 1, false = 1)
  146. function booleanToNum(v){
  147. if(v == null){
  148. return v;
  149. }
  150. if(v.toString().toLowerCase() == "true"){
  151. return 1;
  152. }
  153. if(v.toString().toLowerCase() == "false"){
  154. return 0;
  155. }
  156. return v;
  157. }
  158. if(sp == "*"){ //乘
  159. if(getObjType(fp) == "array" && getObjType(tp) == "array"){
  160. let result = [];
  161. if(getObjType(fp[0]) == "array" && getObjType(tp[0]) == "array"){
  162. //二维数组相乘(m*n 与 m*n 等于 m*n;m*p 与 p*n 等于 m*n;其它错误)
  163. if(fp.length == tp.length && fp[0].length == tp[0].length){
  164. for(let m = 0; m < fp.length; m++){
  165. let rowArr = [];
  166. for(let n = 0; n < fp[m].length; n++){
  167. fp[m][n] = booleanToNum(fp[m][n]);
  168. tp[m][n] = booleanToNum(tp[m][n]);
  169. let value;
  170. if(isRealNum(fp[m][n]) && isRealNum(tp[m][n])){
  171. value = luckysheet_calcADPMM(fp[m][n], sp, tp[m][n]);//parseFloat(fp[m][n]) * parseFloat(tp[m][n]);
  172. }
  173. else{
  174. value = error.v;
  175. }
  176. rowArr.push(value);
  177. }
  178. result.push(rowArr);
  179. }
  180. }
  181. else if(fp[0].length == tp.length){
  182. let rowlen = fp.length;
  183. let collen = tp[0].length;
  184. for(let m = 0; m < rowlen; m++){
  185. let rowArr = [];
  186. for(let n = 0; n < collen; n++){
  187. let value = 0;
  188. for(let p = 0; p < fp[0].length; p++){
  189. fp[m][p] = booleanToNum(fp[m][p]);
  190. tp[p][n] = booleanToNum(tp[p][n]);
  191. if(isRealNum(fp[m][p]) && isRealNum(tp[p][n])){
  192. value += luckysheet_calcADPMM(fp[m][p], sp, tp[p][n]);//parseFloat(fp[m][p]) * parseFloat(tp[p][n]);
  193. }
  194. else{
  195. value += error.v;
  196. }
  197. }
  198. if(value.toString() == "NaN"){
  199. value = error.v;
  200. }
  201. rowArr.push(value);
  202. }
  203. result.push(rowArr);
  204. }
  205. }
  206. else if(fp.length == tp[0].length){
  207. let rowlen = tp.length;
  208. let collen = fp[0].length;
  209. for(let m = 0; m < rowlen; m++){
  210. let rowArr = [];
  211. for(let n = 0; n < collen; n++){
  212. let value = 0;
  213. for(let p = 0; p < tp[0].length; p++){
  214. fp[p][n] = booleanToNum(fp[p][n]);
  215. tp[m][p] = booleanToNum(tp[m][p]);
  216. if(isRealNum(tp[m][p]) && isRealNum(fp[p][n])){
  217. value += luckysheet_calcADPMM(fp[p][n], sp, tp[m][p]);//parseFloat(tp[m][p]) * parseFloat(fp[p][n]);
  218. }
  219. else{
  220. value += error.v;
  221. }
  222. }
  223. if(value.toString() == "NaN"){
  224. value = error.v;
  225. }
  226. rowArr.push(value);
  227. }
  228. result.push(rowArr);
  229. }
  230. }
  231. else{
  232. return error.na;
  233. }
  234. }
  235. else if(getObjType(fp[0]) == "array"){
  236. //二维数组与一维数组相乘(m*n 与 n 等于 m*n;m*1 与 n 等于 m*n;其它错误)
  237. if(fp[0].length == tp.length){
  238. for(let m = 0; m < fp.length; m++){
  239. let rowArr = [];
  240. for(let n = 0; n < fp[m].length; n++){
  241. fp[m][n] = booleanToNum(fp[m][n]);
  242. tp[n] = booleanToNum(tp[n]);
  243. let value;
  244. if(isRealNum(fp[m][n]) && isRealNum(tp[n])){
  245. value = luckysheet_calcADPMM(fp[m][n], sp, tp[n]);//parseFloat(fp[m][n]) * parseFloat(tp[n]);
  246. }
  247. else{
  248. value = error.v;
  249. }
  250. rowArr.push(value);
  251. }
  252. result.push(rowArr);
  253. }
  254. }
  255. else if(fp[0].length == 1){
  256. let rowlen = fp.length;
  257. let collen = tp.length;
  258. for(let m = 0; m < rowlen; m++){
  259. let rowArr = [];
  260. for(let n = 0; n < collen; n++){
  261. fp[m][0] = booleanToNum(fp[m][0]);
  262. tp[n] = booleanToNum(tp[n]);
  263. let value;
  264. if(isRealNum(fp[m][0]) && isRealNum(tp[n])){
  265. value = luckysheet_calcADPMM(fp[m][0], sp, tp[n]);// parseFloat(fp[m][0]) * parseFloat(tp[n]);
  266. }
  267. else{
  268. value = error.v;
  269. }
  270. rowArr.push(value);
  271. }
  272. result.push(rowArr);
  273. }
  274. }
  275. else{
  276. return error.na;
  277. }
  278. }
  279. else if(getObjType(tp[0]) == "array"){
  280. //二维数组与一维数组相乘(m*n 与 n 等于 m*n;m*1 与 n 等于 m*n;其它错误)
  281. if(tp[0].length == fp.length){
  282. for(let m = 0; m < tp.length; m++){
  283. let rowArr = [];
  284. for(let n = 0; n < tp[m].length; n++){
  285. fp[n] = booleanToNum(fp[n]);
  286. tp[m][n] = booleanToNum(tp[m][n]);
  287. let value;
  288. if(isRealNum(fp[n]) && isRealNum(tp[m][n])){
  289. value = luckysheet_calcADPMM(fp[n], sp, tp[m][n]);// parseFloat(fp[n]) * parseFloat(tp[m][n]);
  290. }
  291. else{
  292. value = error.v;
  293. }
  294. rowArr.push(value);
  295. }
  296. result.push(rowArr);
  297. }
  298. }
  299. else if(tp[0].length == 1){
  300. let rowlen = tp.length;
  301. let collen = fp.length;
  302. for(let m = 0; m < rowlen; m++){
  303. let rowArr = [];
  304. for(let n = 0; n < collen; n++){
  305. fp[n] = booleanToNum(fp[n]);
  306. tp[m][0] = booleanToNum(tp[m][0]);
  307. let value;
  308. if(isRealNum(fp[n]) && isRealNum(tp[m][0])){
  309. value = luckysheet_calcADPMM(fp[n], sp, tp[m][0]);//parseFloat(fp[n]) * parseFloat(tp[m][0]);
  310. }
  311. else{
  312. value = error.v;
  313. }
  314. rowArr.push(value);
  315. }
  316. result.push(rowArr);
  317. }
  318. }
  319. else{
  320. return error.na;
  321. }
  322. }
  323. else{
  324. //一维数组与一维数组相乘时,数组大小不一样是错误
  325. if(fp.length != tp.length){
  326. return error.na;
  327. }
  328. for(let n = 0; n < fp.length; n++){
  329. fp[n] = booleanToNum(fp[n]);
  330. tp[n] = booleanToNum(tp[n]);
  331. let value;
  332. if(isRealNum(fp[n]) && isRealNum(tp[n])){
  333. value = luckysheet_calcADPMM(fp[n], sp, tp[n]);// parseFloat(fp[n]) * parseFloat(tp[n]);
  334. }
  335. else{
  336. value = error.v;
  337. }
  338. result.push(value);
  339. }
  340. }
  341. return result;
  342. }
  343. else if(getObjType(fp) == "array"){
  344. tp = booleanToNum(tp);
  345. let result = [];
  346. if(getObjType(fp[0]) == "array"){
  347. for(let m = 0; m < fp.length; m++){
  348. let rowArr = [];
  349. for(let n = 0; n < fp[m].length; n++){
  350. fp[m][n] = booleanToNum(fp[m][n]);
  351. let value;
  352. if(isRealNum(fp[m][n]) && isRealNum(tp)){
  353. value = luckysheet_calcADPMM(fp[m][n], sp, tp);// parseFloat(fp[m][n]) * parseFloat(tp);
  354. }
  355. else{
  356. value = error.v;
  357. }
  358. rowArr.push(value);
  359. }
  360. result.push(rowArr);
  361. }
  362. }
  363. else{
  364. for(let n = 0; n < fp.length; n++){
  365. fp[n] = booleanToNum(fp[n]);
  366. let value;
  367. if(isRealNum(fp[n]) && isRealNum(tp)){
  368. value = luckysheet_calcADPMM(fp[n], sp, tp);// parseFloat(fp[n]) * parseFloat(tp);
  369. }
  370. else{
  371. value = error.v;
  372. }
  373. result.push(value);
  374. }
  375. }
  376. return result;
  377. }
  378. else if(getObjType(tp) == "array"){
  379. fp = booleanToNum(fp);
  380. let result = [];
  381. if(getObjType(tp[0]) == "array"){
  382. for(let m = 0; m < tp.length; m++){
  383. let rowArr = [];
  384. for(let n = 0; n < tp[m].length; n++){
  385. tp[m][n] = booleanToNum(tp[m][n]);
  386. let value;
  387. if(isRealNum(fp) && isRealNum(tp[m][n])){
  388. value = luckysheet_calcADPMM(fp, sp, tp[m][n]);// parseFloat(fp) * parseFloat(tp[m][n]);
  389. }
  390. else{
  391. value = error.v;
  392. }
  393. rowArr.push(value);
  394. }
  395. result.push(rowArr);
  396. }
  397. }
  398. else{
  399. for(let n = 0; n < tp.length; n++){
  400. tp[n] = booleanToNum(tp[n]);
  401. let value;
  402. if(isRealNum(fp) && isRealNum(tp[n])){
  403. value = luckysheet_calcADPMM(fp, sp, tp[n]);//parseFloat(fp) * parseFloat(tp[n]);
  404. }
  405. else{
  406. value = error.v;
  407. }
  408. result.push(value);
  409. }
  410. }
  411. return result;
  412. }
  413. else{
  414. fp = booleanToNum(fp);
  415. tp = booleanToNum(tp);
  416. let result;
  417. if(isRealNum(fp) && isRealNum(tp)){
  418. result = luckysheet_calcADPMM(fp, sp, tp);//parseFloat(fp) * parseFloat(tp);
  419. }
  420. else{
  421. result = error.v;
  422. }
  423. return result;
  424. }
  425. }
  426. else if(sp == "/"){ //除
  427. if(getObjType(fp) == "array" && getObjType(tp) == "array"){
  428. let result = [];
  429. if(getObjType(fp[0]) == "array" && getObjType(tp[0]) == "array"){
  430. //二维数组相除(m*n 与 m*n 等于 m*n;m*p 与 p*n 等于 m*n;其它错误)
  431. if(fp.length == tp.length && fp[0].length == tp[0].length){
  432. for(let m = 0; m < fp.length; m++){
  433. let rowArr = [];
  434. for(let n = 0; n < fp[m].length; n++){
  435. fp[m][n] = booleanToNum(fp[m][n]);
  436. tp[m][n] = booleanToNum(tp[m][n]);
  437. let value;
  438. if(isRealNum(fp[m][n]) && isRealNum(tp[m][n])){
  439. if(parseFloat(tp[m][n]) == 0){
  440. value = error.d;
  441. }
  442. else{
  443. value = luckysheet_calcADPMM(fp[m][n], sp, tp[m][n]);// parseFloat(fp[m][n]) / parseFloat(tp[m][n]);
  444. }
  445. }
  446. else{
  447. value = error.v;
  448. }
  449. rowArr.push(value);
  450. }
  451. result.push(rowArr);
  452. }
  453. }
  454. else if(fp[0].length == tp.length){
  455. let tp_inverse = inverse(tp);
  456. let rowlen = fp.length;
  457. let collen = tp_inverse[0].length;
  458. for(let m = 0; m < rowlen; m++){
  459. let rowArr = [];
  460. for(let n = 0; n < collen; n++){
  461. let value = 0;
  462. for(let p = 0; p < fp[0].length; p++){
  463. fp[m][p] = booleanToNum(fp[m][p]);
  464. tp_inverse[p][n] = booleanToNum(tp_inverse[p][n]);
  465. if(isRealNum(fp[m][p]) && isRealNum(tp_inverse[p][n])){
  466. value += luckysheet_calcADPMM(fp[m][p], "*", tp_inverse[p][n]);// parseFloat(fp[m][p]) * parseFloat(tp_inverse[p][n]);
  467. }
  468. else{
  469. value += error.v;
  470. }
  471. }
  472. if(value.toString() == "NaN"){
  473. value = error.v;
  474. }
  475. rowArr.push(value);
  476. }
  477. result.push(rowArr);
  478. }
  479. }
  480. else{
  481. return error.na;
  482. }
  483. }
  484. else if(getObjType(fp[0]) == "array"){
  485. //二维数组与一维数组相除(m*n 与 n 等于 m*n;m*1 与 n 等于 m*n;其它错误)
  486. if(fp[0].length == tp.length){
  487. for(let m = 0; m < fp.length; m++){
  488. let rowArr = [];
  489. for(let n = 0; n < fp[m].length; n++){
  490. fp[m][n] = booleanToNum(fp[m][n]);
  491. tp[n] = booleanToNum(tp[n]);
  492. let value;
  493. if(isRealNum(fp[m][n]) && isRealNum(tp[n])){
  494. if(parseFloat(tp[n]) == 0){
  495. value = error.d;
  496. }
  497. else{
  498. value = luckysheet_calcADPMM(fp[m][n], sp, tp[n]);// parseFloat(fp[m][n]) / parseFloat(tp[n]);
  499. }
  500. }
  501. else{
  502. value = error.v;
  503. }
  504. rowArr.push(value);
  505. }
  506. result.push(rowArr);
  507. }
  508. }
  509. else if(fp[0].length == 1){
  510. let rowlen = fp.length;
  511. let collen = tp.length;
  512. for(let m = 0; m < rowlen; m++){
  513. let rowArr = [];
  514. for(let n = 0; n < collen; n++){
  515. fp[m][0] = booleanToNum(fp[m][0]);
  516. tp[n] = booleanToNum(tp[n]);
  517. let value;
  518. if(isRealNum(fp[m][0]) && isRealNum(tp[n])){
  519. if(parseFloat(tp[n]) == 0){
  520. value = error.d;
  521. }
  522. else{
  523. value = luckysheet_calcADPMM(fp[m][0], sp, tp[n]);// parseFloat(fp[m][0]) / parseFloat(tp[n]);
  524. }
  525. }
  526. else{
  527. value = error.v;
  528. }
  529. rowArr.push(value);
  530. }
  531. result.push(rowArr);
  532. }
  533. }
  534. else{
  535. return error.na;
  536. }
  537. }
  538. else if(getObjType(tp[0]) == "array"){
  539. //二维数组与一维数组相除(m*n 与 n 等于 m*n;m*1 与 n 等于 m*n;其它错误)
  540. if(tp[0].length == fp.length){
  541. for(let m = 0; m < tp.length; m++){
  542. let rowArr = [];
  543. for(let n = 0; n < tp[m].length; n++){
  544. fp[n] = booleanToNum(fp[n]);
  545. tp[m][n] = booleanToNum(tp[m][n]);
  546. let value;
  547. if(isRealNum(fp[n]) && isRealNum(tp[m][n])){
  548. if(parseFloat(tp[m][n]) == 0){
  549. value = error.d;
  550. }
  551. else{
  552. value = luckysheet_calcADPMM(fp[n], sp, tp[m][n]);//parseFloat(fp[n]) / parseFloat(tp[m][n]);
  553. }
  554. }
  555. else{
  556. value = error.v;
  557. }
  558. rowArr.push(value);
  559. }
  560. result.push(rowArr);
  561. }
  562. }
  563. else if(tp[0].length == 1){
  564. let rowlen = tp.length;
  565. let collen = fp.length;
  566. for(let m = 0; m < rowlen; m++){
  567. let rowArr = [];
  568. for(let n = 0; n < collen; n++){
  569. fp[n] = booleanToNum(fp[n]);
  570. tp[m][0] = booleanToNum(tp[m][0]);
  571. let value;
  572. if(isRealNum(fp[n]) && isRealNum(tp[m][0])){
  573. if(parseFloat(tp[m][0]) == 0){
  574. value = error.d;
  575. }
  576. else{
  577. value = luckysheet_calcADPMM(fp[n], sp, tp[m][0]);//parseFloat(fp[n]) / parseFloat(tp[m][0]);
  578. }
  579. }
  580. else{
  581. value = error.v;
  582. }
  583. rowArr.push(value);
  584. }
  585. result.push(rowArr);
  586. }
  587. }
  588. else{
  589. return error.na;
  590. }
  591. }
  592. else{
  593. //一维数组与一维数组相除时,数组大小不一样是错误
  594. if(fp.length != tp.length){
  595. return error.na;
  596. }
  597. for(let n = 0; n < fp.length; n++){
  598. fp[n] = booleanToNum(fp[n]);
  599. tp[n] = booleanToNum(tp[n]);
  600. let value;
  601. if(isRealNum(fp[n]) && isRealNum(tp[n])){
  602. if(parseFloat(tp[n]) == 0){
  603. value = error.d;
  604. }
  605. else{
  606. value = luckysheet_calcADPMM(fp[n], sp, tp[n]);//parseFloat(fp[n]) / parseFloat(tp[n]);
  607. }
  608. }
  609. else{
  610. value = error.v;
  611. }
  612. result.push(value);
  613. }
  614. }
  615. return result;
  616. }
  617. else if(getObjType(fp) == "array"){
  618. tp = booleanToNum(tp);
  619. let result = [];
  620. if(getObjType(fp[0]) == "array"){
  621. for(let m = 0; m < fp.length; m++){
  622. let rowArr = [];
  623. for(let n = 0; n < fp[m].length; n++){
  624. fp[m][n] = booleanToNum(fp[m][n]);
  625. let value;
  626. if(isRealNum(fp[m][n]) && isRealNum(tp)){
  627. if(parseFloat(tp) == 0){
  628. value = error.d;
  629. }
  630. else{
  631. value = luckysheet_calcADPMM(fp[m][n], sp, tp);//parseFloat(fp[m][n]) / parseFloat(tp);
  632. }
  633. }
  634. else{
  635. value = error.v;
  636. }
  637. rowArr.push(value);
  638. }
  639. result.push(rowArr);
  640. }
  641. }
  642. else{
  643. for(let n = 0; n < fp.length; n++){
  644. fp[n] = booleanToNum(fp[n]);
  645. let value;
  646. if(isRealNum(fp[n]) && isRealNum(tp)){
  647. if(parseFloat(tp) == 0){
  648. value = error.d;
  649. }
  650. else{
  651. value = luckysheet_calcADPMM(fp[n], sp, tp);//parseFloat(fp[n]) / parseFloat(tp);
  652. }
  653. }
  654. else{
  655. value = error.v;
  656. }
  657. result.push(value);
  658. }
  659. }
  660. return result;
  661. }
  662. else if(getObjType(tp) == "array"){
  663. fp = booleanToNum(fp);
  664. let result = [];
  665. if(getObjType(tp[0]) == "array"){
  666. for(let m = 0; m < tp.length; m++){
  667. let rowArr = [];
  668. for(let n = 0; n < tp[m].length; n++){
  669. tp[m][n] = booleanToNum(tp[m][n]);
  670. let value;
  671. if(isRealNum(fp) && isRealNum(tp[m][n])){
  672. if(parseFloat(tp[m][n]) == 0){
  673. value = error.d;
  674. }
  675. else{
  676. value = luckysheet_calcADPMM(fp, sp, tp[m][n]);//parseFloat(fp) / parseFloat(tp[m][n]);
  677. }
  678. }
  679. else{
  680. value = error.v;
  681. }
  682. rowArr.push(value);
  683. }
  684. result.push(rowArr);
  685. }
  686. }
  687. else{
  688. for(let n = 0; n < tp.length; n++){
  689. tp[n] = booleanToNum(tp[n]);
  690. let value;
  691. if(isRealNum(fp) && isRealNum(tp[n])){
  692. if(parseFloat(tp[n]) == 0){
  693. value = error.d;
  694. }
  695. else{
  696. value = luckysheet_calcADPMM(fp, sp, tp[n]);//parseFloat(fp) / parseFloat(tp[n]);
  697. }
  698. }
  699. else{
  700. value = error.v;
  701. }
  702. result.push(value);
  703. }
  704. }
  705. return result;
  706. }
  707. else{
  708. fp = booleanToNum(fp);
  709. tp = booleanToNum(tp);
  710. let result;
  711. if(isRealNum(fp) && isRealNum(tp)){
  712. if(parseFloat(tp) == 0){
  713. result = error.d;
  714. }
  715. else{
  716. result = luckysheet_calcADPMM(fp, sp, tp);//parseFloat(fp) / parseFloat(tp);
  717. }
  718. }
  719. else{
  720. result = error.v;
  721. }
  722. return result;
  723. }
  724. }
  725. else if(sp == "+" || sp == "-" || sp == "%"){ //加 减 取余
  726. if(getObjType(fp) == "array" && getObjType(tp) == "array"){
  727. let result = [];
  728. if(getObjType(fp[0]) == "array" && getObjType(tp[0]) == "array"){
  729. if(fp.length != tp.length && fp[0].length != tp[0].length){
  730. return error.na;
  731. }
  732. for(let m = 0; m < fp.length; m++){
  733. let rowArr = [];
  734. for(let n = 0; n < fp[m].length; n++){
  735. fp[m][n] = booleanToNum(fp[m][n]);
  736. tp[m][n] = booleanToNum(tp[m][n]);
  737. let value;
  738. if(isRealNum(fp[m][n]) && isRealNum(tp[m][n])){
  739. if(sp == "%" && parseFloat(tp[m][n]) == 0){
  740. value = error.d;
  741. }
  742. else{
  743. value = luckysheet_calcADPMM(fp[m][n], sp, tp[m][n]);// eval(parseFloat(fp[m][n]) + sp + parseFloat(tp[m][n]));
  744. }
  745. }
  746. else{
  747. value = error.v;
  748. }
  749. rowArr.push(value);
  750. }
  751. result.push(rowArr);
  752. }
  753. }
  754. else if(getObjType(fp[0]) == "array"){
  755. if(fp[0].length != tp.length){
  756. return error.na;
  757. }
  758. for(let m = 0; m < fp.length; m++){
  759. let rowArr = [];
  760. for(let n = 0; n < fp[m].length; n++){
  761. fp[m][n] = booleanToNum(fp[m][n]);
  762. tp[n] = booleanToNum(tp[n]);
  763. let value;
  764. if(isRealNum(fp[m][n]) && isRealNum(tp[n])){
  765. if(sp == "%" && parseFloat(tp[n]) == 0){
  766. value = error.d;
  767. }
  768. else{
  769. value = luckysheet_calcADPMM(fp[m][n], sp, tp[n]);//eval(parseFloat(fp[m][n]) + sp + parseFloat(tp[n]));
  770. }
  771. }
  772. else{
  773. value = error.v;
  774. }
  775. rowArr.push(value);
  776. }
  777. result.push(rowArr);
  778. }
  779. }
  780. else if(getObjType(tp[0]) == "array"){
  781. if(tp[0].length != fp.length){
  782. return error.na;
  783. }
  784. for(let m = 0; m < tp.length; m++){
  785. let rowArr = [];
  786. for(let n = 0; n < tp[m].length; n++){
  787. fp[n] = booleanToNum(fp[n]);
  788. tp[m][n] = booleanToNum(tp[m][n]);
  789. let value;
  790. if(isRealNum(fp[n]) && isRealNum(tp[m][n])){
  791. if(sp == "%" && parseFloat(tp[m][n]) == 0){
  792. value = error.d;
  793. }
  794. else{
  795. value = luckysheet_calcADPMM(fp[n], sp, tp[m][n]);//eval(parseFloat(fp[n]) + sp + parseFloat(tp[m][n]));
  796. }
  797. }
  798. else{
  799. value = error.v;
  800. }
  801. rowArr.push(value);
  802. }
  803. result.push(rowArr);
  804. }
  805. }
  806. else{
  807. if(fp.length != tp.length){
  808. return error.na;
  809. }
  810. for(let n = 0; n < fp.length; n++){
  811. fp[n] = booleanToNum(fp[n]);
  812. tp[n] = booleanToNum(tp[n]);
  813. let value;
  814. if(isRealNum(fp[n]) && isRealNum(tp[n])){
  815. if(sp == "%" && parseFloat(tp[n]) == 0){
  816. value = error.d;
  817. }
  818. else{
  819. value = luckysheet_calcADPMM(fp[n], sp, tp[n]);//eval(parseFloat(fp[n]) + sp + "(" + parseFloat(tp[n]) + ")" );
  820. }
  821. }
  822. else{
  823. value = error.v;
  824. }
  825. result.push(value);
  826. }
  827. }
  828. return result;
  829. }
  830. else if(getObjType(fp) == "array"){
  831. tp = booleanToNum(tp);
  832. let result = [];
  833. if(getObjType(fp[0]) == "array"){
  834. for(let m = 0; m < fp.length; m++){
  835. let rowArr = [];
  836. for(let n = 0; n < fp[m].length; n++){
  837. fp[m][n] = booleanToNum(fp[m][n]);
  838. let value;
  839. if(isRealNum(fp[m][n]) && isRealNum(tp)){
  840. if(sp == "%" && parseFloat(tp) == 0){
  841. value = error.d;
  842. }
  843. else{
  844. value = luckysheet_calcADPMM(fp[m][n], sp, tp);//eval(parseFloat(fp[m][n]) + sp + parseFloat(tp));
  845. }
  846. }
  847. else{
  848. value = error.v;
  849. }
  850. rowArr.push(value);
  851. }
  852. result.push(rowArr);
  853. }
  854. }
  855. else{
  856. for(let n = 0; n < fp.length; n++){
  857. fp[n] = booleanToNum(fp[n]);
  858. let value;
  859. if(isRealNum(fp[n]) && isRealNum(tp)){
  860. if(sp == "%" && parseFloat(tp) == 0){
  861. value = error.d;
  862. }
  863. else{
  864. value = luckysheet_calcADPMM(fp[n], sp, tp);//eval(parseFloat(fp[n]) + sp + parseFloat(tp));
  865. }
  866. }
  867. else{
  868. value = error.v;
  869. }
  870. result.push(value);
  871. }
  872. }
  873. return result;
  874. }
  875. else if(getObjType(tp) == "array"){
  876. fp = booleanToNum(fp);
  877. let result = [];
  878. if(getObjType(tp[0]) == "array"){
  879. for(let m = 0; m < tp.length; m++){
  880. let rowArr = [];
  881. for(let n = 0; n < tp[m].length; n++){
  882. tp[m][n] = booleanToNum(tp[m][n]);
  883. let value;
  884. if(isRealNum(fp) && isRealNum(tp[m][n])){
  885. if(sp == "%" && parseFloat(tp[m][n]) == 0){
  886. value = error.d;
  887. }
  888. else{
  889. value = luckysheet_calcADPMM(fp, sp, tp[m][n]);//eval(parseFloat(fp) + sp + parseFloat(tp[m][n]));
  890. }
  891. }
  892. else{
  893. value = error.v;
  894. }
  895. rowArr.push(value);
  896. }
  897. result.push(rowArr);
  898. }
  899. }
  900. else{
  901. for(let n = 0; n < tp.length; n++){
  902. tp[n] = booleanToNum(tp[n]);
  903. let value;
  904. if(isRealNum(fp) && isRealNum(tp[n])){
  905. if(sp == "%" && parseFloat(tp[n]) == 0){
  906. value = error.d;
  907. }
  908. else{
  909. value = luckysheet_calcADPMM(fp, sp, tp[n]);//eval(parseFloat(fp) + sp + parseFloat(tp[n]));
  910. }
  911. }
  912. else{
  913. value = error.v;
  914. }
  915. result.push(value);
  916. }
  917. }
  918. return result;
  919. }
  920. else{
  921. fp = booleanToNum(fp);
  922. tp = booleanToNum(tp);
  923. let result;
  924. if(isRealNum(fp) && isRealNum(tp)){
  925. if(sp == "%" && parseFloat(tp) == 0){
  926. result = error.d;
  927. }
  928. else{
  929. result = luckysheet_calcADPMM(fp, sp, tp);//eval(parseFloat(fp) + sp + "(" + parseFloat(tp) + ")");
  930. }
  931. }
  932. else{
  933. result = error.v;
  934. }
  935. return result;
  936. }
  937. }
  938. else if(sp == "==" || sp == "!=" || sp == ">=" || sp == "<=" || sp == ">" || sp == "<"){ //比较运算符
  939. if(getObjType(fp) == "array" && getObjType(tp) == "array"){
  940. let result = [];
  941. if(getObjType(fp[0]) == "array" && getObjType(tp[0]) == "array"){
  942. if(fp.length != tp.length && fp[0].length != tp[0].length){
  943. return error.na;
  944. }
  945. for(let m = 0; m < fp.length; m++){
  946. let rowArr = [];
  947. for(let n = 0; n < fp[m].length; n++){
  948. let value = booleanOperation(fp[m][n], sp, tp[m][n]);
  949. rowArr.push(value);
  950. }
  951. result.push(rowArr);
  952. }
  953. }
  954. else if(getObjType(fp[0]) == "array"){
  955. if(fp[0].length != tp.length){
  956. return error.na;
  957. }
  958. for(let m = 0; m < fp.length; m++){
  959. let rowArr = [];
  960. for(let n = 0; n < fp[m].length; n++){
  961. let value = booleanOperation(fp[m][n], sp, tp[n]);
  962. rowArr.push(value);
  963. }
  964. result.push(rowArr);
  965. }
  966. }
  967. else if(getObjType(tp[0]) == "array"){
  968. if(tp[0].length != fp.length){
  969. return error.na;
  970. }
  971. for(let m = 0; m < tp.length; m++){
  972. let rowArr = [];
  973. for(let n = 0; n < tp[m].length; n++){
  974. let value = booleanOperation(fp[n], sp, tp[m][n]);
  975. rowArr.push(value);
  976. }
  977. result.push(rowArr);
  978. }
  979. }
  980. else{
  981. if(fp.length != tp.length){
  982. return error.na;
  983. }
  984. for(let n = 0; n < fp.length; n++){
  985. let value = booleanOperation(fp[n], sp, tp[n]);
  986. result.push(value);
  987. }
  988. }
  989. return result;
  990. }
  991. else if(getObjType(fp) == "array"){
  992. let result = [];
  993. if(getObjType(fp[0]) == "array"){
  994. for(let m = 0; m < fp.length; m++){
  995. let rowArr = [];
  996. for(let n = 0; n < fp[m].length; n++){
  997. let value = booleanOperation(fp[m][n], sp, tp);
  998. rowArr.push(value);
  999. }
  1000. result.push(rowArr);
  1001. }
  1002. }
  1003. else{
  1004. for(let n = 0; n < fp.length; n++){
  1005. let value = booleanOperation(fp[n], sp, tp);
  1006. result.push(value);
  1007. }
  1008. }
  1009. return result;
  1010. }
  1011. else if(getObjType(tp) == "array"){
  1012. let result = [];
  1013. if(getObjType(tp[0]) == "array"){
  1014. for(let m = 0; m < tp.length; m++){
  1015. let rowArr = [];
  1016. for(let n = 0; n < tp[m].length; n++){
  1017. let value = booleanOperation(fp, sp, tp[m][n]);
  1018. rowArr.push(value);
  1019. }
  1020. result.push(rowArr);
  1021. }
  1022. }
  1023. else{
  1024. for(let n = 0; n < tp.length; n++){
  1025. let value = booleanOperation(fp, sp, tp[n]);
  1026. result.push(value);
  1027. }
  1028. }
  1029. return result;
  1030. }
  1031. else{
  1032. return booleanOperation(fp, sp, tp);
  1033. }
  1034. }
  1035. else if(sp == "&"){ //连接符
  1036. if(getObjType(fp) == "array" && getObjType(tp) == "array"){
  1037. let result = [];
  1038. if(getObjType(fp[0]) == "array" && getObjType(tp[0]) == "array"){
  1039. if(fp.length != tp.length && fp[0].length != tp[0].length){
  1040. return error.na;
  1041. }
  1042. for(let m = 0; m < fp.length; m++){
  1043. let rowArr = [];
  1044. for(let n = 0; n < fp[m].length; n++){
  1045. rowArr.push(fp[m][n] + "" + tp[m][n]);
  1046. }
  1047. result.push(rowArr);
  1048. }
  1049. }
  1050. else if(getObjType(fp[0]) == "array"){
  1051. if(fp[0].length != tp.length){
  1052. return error.na;
  1053. }
  1054. for(let m = 0; m < fp.length; m++){
  1055. let rowArr = [];
  1056. for(let n = 0; n < fp[m].length; n++){
  1057. rowArr.push(fp[m][n] + "" + tp[n]);
  1058. }
  1059. result.push(rowArr);
  1060. }
  1061. }
  1062. else if(getObjType(tp[0]) == "array"){
  1063. if(tp[0].length != fp.length){
  1064. return error.na;
  1065. }
  1066. for(let m = 0; m < tp.length; m++){
  1067. let rowArr = [];
  1068. for(let n = 0; n < tp[m].length; n++){
  1069. rowArr.push(fp[n] + "" + tp[m][n]);
  1070. }
  1071. result.push(rowArr);
  1072. }
  1073. }
  1074. else{
  1075. if(fp.length != tp.length){
  1076. return error.na;
  1077. }
  1078. for(let n = 0; n < fp.length; n++){
  1079. result.push(fp[n] + "" + tp[n]);
  1080. }
  1081. }
  1082. return result;
  1083. }
  1084. else if(getObjType(fp) == "array"){
  1085. let result = [];
  1086. if(getObjType(fp[0]) == "array"){
  1087. for(let m = 0; m < fp.length; m++){
  1088. let rowArr = [];
  1089. for(let n = 0; n < fp[m].length; n++){
  1090. rowArr.push(fp[m][n] + "" + tp);
  1091. }
  1092. result.push(rowArr);
  1093. }
  1094. }
  1095. else{
  1096. for(let n = 0; n < fp.length; n++){
  1097. result.push(fp[n] + "" + tp);
  1098. }
  1099. }
  1100. return result;
  1101. }
  1102. else if(getObjType(tp) == "array"){
  1103. let result = [];
  1104. if(getObjType(tp[0]) == "array"){
  1105. for(let m = 0; m < tp.length; m++){
  1106. let rowArr = [];
  1107. for(let n = 0; n < tp[m].length; n++){
  1108. rowArr.push(fp + "" + tp[m][n]);
  1109. }
  1110. result.push(rowArr);
  1111. }
  1112. }
  1113. else{
  1114. for(let n = 0; n < tp.length; n++){
  1115. result.push(fp + "" + tp[n]);
  1116. }
  1117. }
  1118. return result;
  1119. }
  1120. else{
  1121. return fp + "" + tp;
  1122. }
  1123. }
  1124. else if(sp == "^"){ //幂
  1125. if(getObjType(fp) == "array" && getObjType(tp) == "array"){
  1126. let result = [];
  1127. if(getObjType(fp[0]) == "array" && getObjType(tp[0]) == "array"){
  1128. if(fp.length != tp.length && fp[0].length != tp[0].length){
  1129. return error.na;
  1130. }
  1131. for(let m = 0; m < fp.length; m++){
  1132. let rowArr = [];
  1133. for(let n = 0; n < fp[m].length; n++){
  1134. fp[m][n] = booleanToNum(fp[m][n]);
  1135. tp[m][n] = booleanToNum(tp[m][n]);
  1136. let value;
  1137. if(isRealNum(fp[m][n]) && isRealNum(tp[m][n])){
  1138. value = Math.pow(parseFloat(fp[m][n]), parseFloat(tp[m][n]));
  1139. }
  1140. else{
  1141. value = error.v;
  1142. }
  1143. rowArr.push(value);
  1144. }
  1145. result.push(rowArr);
  1146. }
  1147. }
  1148. else if(getObjType(fp[0]) == "array"){
  1149. if(fp[0].length != tp.length){
  1150. return error.na;
  1151. }
  1152. for(let m = 0; m < fp.length; m++){
  1153. let rowArr = [];
  1154. for(let n = 0; n < fp[m].length; n++){
  1155. fp[m][n] = booleanToNum(fp[m][n]);
  1156. tp[n] = booleanToNum(tp[n]);
  1157. let value;
  1158. if(isRealNum(fp[m][n]) && isRealNum(tp[n])){
  1159. value = Math.pow(parseFloat(fp[m][n]), parseFloat(tp[n]));
  1160. }
  1161. else{
  1162. value = error.v;
  1163. }
  1164. rowArr.push(value);
  1165. }
  1166. result.push(rowArr);
  1167. }
  1168. }
  1169. else if(getObjType(tp[0]) == "array"){
  1170. if(tp[0].length != fp.length){
  1171. return error.na;
  1172. }
  1173. for(let m = 0; m < tp.length; m++){
  1174. let rowArr = [];
  1175. for(let n = 0; n < tp[m].length; n++){
  1176. fp[n] = booleanToNum(fp[n]);
  1177. tp[m][n] = booleanToNum(tp[m][n]);
  1178. let value;
  1179. if(isRealNum(fp[n]) && isRealNum(tp[m][n])){
  1180. value = Math.pow(parseFloat(fp[n]), parseFloat(tp[m][n]));
  1181. }
  1182. else{
  1183. value = error.v;
  1184. }
  1185. rowArr.push(value);
  1186. }
  1187. result.push(rowArr);
  1188. }
  1189. }
  1190. else{
  1191. if(fp.length != tp.length){
  1192. return error.na;
  1193. }
  1194. for(let n = 0; n < fp.length; n++){
  1195. fp[n] = booleanToNum(fp[n]);
  1196. tp[n] = booleanToNum(tp[n]);
  1197. let value;
  1198. if(isRealNum(fp[n]) && isRealNum(tp[n])){
  1199. value = Math.pow(parseFloat(fp[n]), parseFloat(tp[n]));
  1200. }
  1201. else{
  1202. value = error.v;
  1203. }
  1204. result.push(value);
  1205. }
  1206. }
  1207. return result;
  1208. }
  1209. else if(getObjType(fp) == "array"){
  1210. tp = booleanToNum(tp);
  1211. let result = [];
  1212. if(getObjType(fp[0]) == "array"){
  1213. for(let m = 0; m < fp.length; m++){
  1214. let rowArr = [];
  1215. for(let n = 0; n < fp[m].length; n++){
  1216. fp[m][n] = booleanToNum(fp[m][n]);
  1217. let value;
  1218. if(isRealNum(fp[m][n]) && isRealNum(tp)){
  1219. value = Math.pow(parseFloat(fp[m][n]), parseFloat(tp));
  1220. }
  1221. else{
  1222. value = error.v;
  1223. }
  1224. rowArr.push(value);
  1225. }
  1226. result.push(rowArr);
  1227. }
  1228. }
  1229. else{
  1230. for(let n = 0; n < fp.length; n++){
  1231. fp[n] = booleanToNum(fp[n]);
  1232. let value;
  1233. if(isRealNum(fp[n]) && isRealNum(tp)){
  1234. value = Math.pow(parseFloat(fp[n]), parseFloat(tp));
  1235. }
  1236. else{
  1237. value = error.v;
  1238. }
  1239. result.push(value);
  1240. }
  1241. }
  1242. return result;
  1243. }
  1244. else if(getObjType(tp) == "array"){
  1245. fp = booleanToNum(fp);
  1246. let result = [];
  1247. if(getObjType(tp[0]) == "array"){
  1248. for(let m = 0; m < tp.length; m++){
  1249. let rowArr = [];
  1250. for(let n = 0; n < tp[m].length; n++){
  1251. tp[m][n] = booleanToNum(tp[m][n]);
  1252. let value;
  1253. if(isRealNum(fp) && isRealNum(tp[m][n])){
  1254. value = Math.pow(parseFloat(fp), parseFloat(tp[m][n]));
  1255. }
  1256. else{
  1257. value = error.v;
  1258. }
  1259. rowArr.push(value);
  1260. }
  1261. result.push(rowArr);
  1262. }
  1263. }
  1264. else{
  1265. for(let n = 0; n < tp.length; n++){
  1266. tp[n] = booleanToNum(tp[n]);
  1267. let value;
  1268. if(isRealNum(fp) && isRealNum(tp[n])){
  1269. value = Math.pow(parseFloat(fp), parseFloat(tp[n]));
  1270. }
  1271. else{
  1272. value = error.v;
  1273. }
  1274. result.push(value);
  1275. }
  1276. }
  1277. return result;
  1278. }
  1279. else{
  1280. fp = booleanToNum(fp);
  1281. tp = booleanToNum(tp);
  1282. let result;
  1283. if(isRealNum(fp) && isRealNum(tp)){
  1284. result = Math.pow(parseFloat(fp), parseFloat(tp));
  1285. }
  1286. else{
  1287. result = error.v;
  1288. }
  1289. return result;
  1290. }
  1291. }
  1292. }
  1293. //解析 公式中{1,2,3;2,3,4} 为数组[[1,2,3],[2,3,4]]
  1294. function luckysheet_getarraydata() {
  1295. let fp = arguments[0];
  1296. fp = fp.replace("{", "").replace("}", "").replace(/\"/g, '');
  1297. let arr = [];
  1298. if(fp.indexOf(";") > -1){
  1299. arr = fp.split(";");
  1300. for(let i = 0; i < arr.length; i++){
  1301. arr[i] = arr[i].split(",");
  1302. }
  1303. }
  1304. else{
  1305. arr = fp.split(",");
  1306. }
  1307. return arr;
  1308. }
  1309. function luckysheet_calcADPMM(fp, sp, tp){
  1310. let value;
  1311. if(sp=="+"){
  1312. value = numeral(fp).add(tp).value();
  1313. }
  1314. else if(sp=="-"){
  1315. value = numeral(fp).subtract(tp).value();
  1316. }
  1317. else if(sp=="%"){
  1318. value = new Function("return " + parseFloat(fp) + sp + "(" + parseFloat(tp) + ")" )();
  1319. }
  1320. else if(sp=="/"){
  1321. value = numeral(fp).divide(tp).value();
  1322. }
  1323. else if(sp=="*"){
  1324. value = numeral(fp).multiply(tp).value();
  1325. }
  1326. return value;
  1327. }
  1328. function luckysheet_getcelldata(txt) {
  1329. if (window.luckysheet_getcelldata_cache == null) {
  1330. window.luckysheet_getcelldata_cache = {};
  1331. }
  1332. if (txt in window.luckysheet_getcelldata_cache) {
  1333. return window.luckysheet_getcelldata_cache[txt];
  1334. }
  1335. let luckysheetfile = getluckysheetfile();
  1336. let val = txt.split("!");
  1337. let sheettxt = "",
  1338. rangetxt = "",
  1339. sheetIndex = -1,
  1340. sheetdata = null;
  1341. if (val.length > 1) {
  1342. sheettxt = val[0].replace(/''/g,"'");
  1343. rangetxt = val[1];
  1344. if(sheettxt.substr(0,1)=="'" && sheettxt.substr(sheettxt.length-1,1)=="'"){
  1345. sheettxt = sheettxt.substring(1,sheettxt.length-1);
  1346. }
  1347. for (let i in luckysheetfile) {
  1348. if (sheettxt == luckysheetfile[i].name) {
  1349. sheetIndex = luckysheetfile[i].index;
  1350. sheetdata = luckysheetfile[i].data;
  1351. break;
  1352. }
  1353. }
  1354. if (sheetIndex == -1) {
  1355. sheetIndex = 0;
  1356. }
  1357. }
  1358. else {
  1359. let index = getSheetIndex(Store.calculateSheetIndex);
  1360. sheettxt = luckysheetfile[index].name;
  1361. sheetIndex = luckysheetfile[index].index;
  1362. // sheetdata = Store.flowdata;
  1363. sheetdata = luckysheetfile[index].data;
  1364. rangetxt = val[0];
  1365. // 取消execFunctionGroupData,改用execFunctionGlobalData
  1366. // if (formula.execFunctionGroupData != null) {
  1367. // sheetdata = formula.execFunctionGroupData;
  1368. // }
  1369. }
  1370. if (rangetxt.indexOf(":") == -1) {
  1371. let row = parseInt(rangetxt.replace(/[^0-9]/g, "")) - 1;
  1372. let col = ABCatNum(rangetxt.replace(/[^A-Za-z]/g, ""));
  1373. if (!isNaN(row) && !isNaN(col)) {
  1374. let ret = getdatabyselectionD(sheetdata, {
  1375. "row": [row, row],
  1376. "column": [col, col]
  1377. })[0][0];
  1378. if (formula.execFunctionGlobalData != null) {
  1379. let ef = formula.execFunctionGlobalData[row+"_"+col+"_"+sheetIndex];
  1380. if(ef!=null){
  1381. ret = ef;
  1382. }
  1383. }
  1384. //范围的长宽
  1385. let rowl = 1;
  1386. let coll = 1;
  1387. let retAll= {
  1388. "sheetName": sheettxt,
  1389. "startCell": rangetxt,
  1390. "rowl": rowl,
  1391. "coll": coll,
  1392. "data": ret
  1393. };
  1394. window.luckysheet_getcelldata_cache[txt] = retAll;
  1395. return retAll;
  1396. }
  1397. else {
  1398. return [];
  1399. }
  1400. }
  1401. else {
  1402. rangetxt = rangetxt.split(":");
  1403. let row = [], col = [];
  1404. row[0] = parseInt(rangetxt[0].replace(/[^0-9]/g, "")) - 1;
  1405. row[1] = parseInt(rangetxt[1].replace(/[^0-9]/g, "")) - 1;
  1406. if (isNaN(row[0])) {
  1407. row[0] = 0;
  1408. }
  1409. if (isNaN(row[1])) {
  1410. row[1] = sheetdata.length - 1;
  1411. }
  1412. if (row[0] > row[1]) {
  1413. tooltip.info("选择失败", "输入范围错误!");
  1414. return [];
  1415. }
  1416. col[0] = ABCatNum(rangetxt[0].replace(/[^A-Za-z]/g, ""));
  1417. col[1] = ABCatNum(rangetxt[1].replace(/[^A-Za-z]/g, ""));
  1418. if (isNaN(col[0])) {
  1419. col[0] = 0;
  1420. }
  1421. if (isNaN(col[1])) {
  1422. col[1] = sheetdata[0].length - 1;
  1423. }
  1424. if (col[0] > col[1]) {
  1425. tooltip.info("选择失败", "输入范围错误!");
  1426. return [];
  1427. }
  1428. let ret = getdatabyselectionD(sheetdata, {
  1429. "row": row,
  1430. "column": col
  1431. });
  1432. if(formula.execFunctionGlobalData!=null){
  1433. for(let r=row[0];r<=row[1];r++){
  1434. for(let c=col[0];c<=col[1];c++){
  1435. let ef = formula.execFunctionGlobalData[r+"_"+c+"_"+sheetIndex];
  1436. if(ef!=null){
  1437. let oldObj = ret[r-row[0]][c-col[0]]
  1438. ret[r-row[0]][c-col[0]] = {...oldObj,...ef};
  1439. }
  1440. }
  1441. }
  1442. }
  1443. //范围的长宽
  1444. let rowl = row[1] - row[0] + 1;
  1445. let coll = col[1] - col[0] + 1;
  1446. let retAll= {
  1447. "sheetName": sheettxt,
  1448. "startCell": rangetxt[0],
  1449. "rowl": rowl,
  1450. "coll": coll,
  1451. "data": ret
  1452. };
  1453. window.luckysheet_getcelldata_cache[txt] = retAll;
  1454. return retAll;
  1455. }
  1456. }
  1457. //解析单个取得的值,有字符串,数字,引用单元格或者函数
  1458. function luckysheet_parseData(value) {
  1459. if(typeof value === "object" ){
  1460. if(value == null){
  1461. return "";
  1462. }
  1463. else if(Array.isArray(value)){ //函数返回的带期望格式的数组,可提取格式
  1464. let v = genarate(value[0]);
  1465. return v[2];
  1466. }
  1467. else{ //getcelldat引用单元格对象,带有格式
  1468. if(Array.isArray(value.data)){ //单元格区域
  1469. return error.v;
  1470. }
  1471. else{ //单个单元格
  1472. if(value.data.v === undefined){
  1473. return "";
  1474. }
  1475. else{
  1476. return value.data.v;
  1477. }
  1478. }
  1479. }
  1480. }
  1481. else if(!formula.isCompareOperator(value).flag){
  1482. let v = genarate(value);
  1483. return v[2];
  1484. }
  1485. else if(typeof value === "string" || typeof value === "number"){
  1486. return value;
  1487. }
  1488. return error.v;
  1489. }
  1490. function luckysheet_getValue() {
  1491. //解析获取函数参数,无格式,且可包含带操作符的">5"
  1492. //数据类型:1.手动输入或函数返回的字符串,普通字符串或数字直接取值,特殊格式需转化 如:"2019-1-1"(特殊格式转化为数字)、">5"或数字
  1493. //2.引用单元格对象,取得二维数组或单个的v 如:A1
  1494. //3.函数返回的带期望格式的数组,取得第一个参数,转化为数字 如:["2019-1-1",true]
  1495. let args = arguments[0];
  1496. for(let i = 0; i < args.length; i++){
  1497. let value = args[i];
  1498. if(typeof value === "object" ){
  1499. if(value == null){
  1500. value = "";
  1501. }
  1502. else if(Array.isArray(value)){ //函数返回的带期望格式的数组,可提取格式
  1503. let v = genarate(value[0]);
  1504. value = v[2];
  1505. }
  1506. else{ //getcelldat引用单元格对象,带有格式
  1507. if(Array.isArray(value.data)){ //单元格区域
  1508. value = value.data;
  1509. }
  1510. else{ //单个单元格
  1511. if(value.data.v === undefined){ //空白单元格
  1512. value = "";
  1513. }
  1514. else{
  1515. value = value.data.v;
  1516. }
  1517. }
  1518. }
  1519. }
  1520. else if(!formula.isCompareOperator(value).flag){
  1521. let v = genarate(value);
  1522. value = v[2];
  1523. }
  1524. args[i] = value;
  1525. }
  1526. }
  1527. function luckysheet_indirect_check() {
  1528. let cellTxt = arguments[0];
  1529. if (cellTxt == null || cellTxt.length == 0) {
  1530. return null;
  1531. }
  1532. return cellTxt;
  1533. }
  1534. function luckysheet_indirect_check_return(txt) {
  1535. return txt;
  1536. }
  1537. function luckysheet_offset_check() {
  1538. if (!(getObjType(arguments[0]) == "object" && arguments[0].startCell != null)) {
  1539. return formula.error.v;
  1540. }
  1541. var reference = arguments[0].startCell;
  1542. //要偏移的行数
  1543. var rows = func_methods.getFirstValue(arguments[1]);
  1544. if (valueIsError(rows)) {
  1545. return rows;
  1546. }
  1547. if (!isRealNum(rows)) {
  1548. return formula.error.v;
  1549. }
  1550. rows = parseInt(rows);
  1551. //要偏移的列数
  1552. var cols = func_methods.getFirstValue(arguments[2]);
  1553. if (valueIsError(cols)) {
  1554. return cols;
  1555. }
  1556. if (!isRealNum(cols)) {
  1557. return formula.error.v;
  1558. }
  1559. cols = parseInt(cols);
  1560. //要从偏移目标开始返回的范围的高度
  1561. var height = arguments[0].rowl;
  1562. if (arguments.length >= 4) {
  1563. height = func_methods.getFirstValue(arguments[3]);
  1564. if (valueIsError(height)) {
  1565. return height;
  1566. }
  1567. if (!isRealNum(height)) {
  1568. return formula.error.v;
  1569. }
  1570. height = parseInt(height);
  1571. }
  1572. //要从偏移目标开始返回的范围的宽度
  1573. var width = arguments[0].coll;
  1574. if (arguments.length == 5) {
  1575. width = func_methods.getFirstValue(arguments[4]);
  1576. if (valueIsError(width)) {
  1577. return width;
  1578. }
  1579. if (!isRealNum(width)) {
  1580. return formula.error.v;
  1581. }
  1582. width = parseInt(width);
  1583. }
  1584. if (height < 1 || width < 1) {
  1585. return formula.error.r;
  1586. }
  1587. //计算
  1588. var cellrange = formula.getcellrange(reference);
  1589. var cellRow0 = cellrange["row"][0];
  1590. var cellCol0 = cellrange["column"][0];
  1591. cellRow0 += rows;
  1592. cellCol0 += cols;
  1593. var cellRow1 = cellRow0 + height - 1;
  1594. var cellCol1 = cellCol0 + width - 1;
  1595. if (cellRow0 < 0 || cellRow1 >= Store.flowdata.length || cellCol0 < 0 || cellCol1 >= Store.flowdata[0].length) {
  1596. return formula.error.r;
  1597. }
  1598. return getRangetxt(Store.calculateSheetIndex, {
  1599. row: [cellRow0, cellRow1],
  1600. column: [cellCol0, cellCol1]
  1601. });
  1602. }
  1603. function luckysheet_getSpecialReference(isCellFirst, param1, param2) {
  1604. let functionRange, rangeTxt;
  1605. if(isCellFirst){
  1606. rangeTxt = param1;
  1607. functionRange = param2;
  1608. }
  1609. else{
  1610. functionRange = param1;
  1611. rangeTxt = param2;
  1612. }
  1613. if(functionRange.startCell.indexOf(":")>-1 || rangeTxt.indexOf(":")>-1){
  1614. return error.v;
  1615. }
  1616. if(isCellFirst){
  1617. return luckysheet_getcelldata(rangeTxt + ":" +functionRange.startCell);
  1618. }
  1619. else{
  1620. let rangeT = rangeTxt, sheetName="";
  1621. if(rangeTxt.indexOf("!")>-1){
  1622. let rangetxtArr = rangeTxt.split("!");
  1623. sheetName = rangetxtArr[0] + "!";
  1624. rangeT = rangetxtArr[1];
  1625. }
  1626. return luckysheet_getcelldata(sheetName + functionRange.startCell + ":" + rangeT);
  1627. }
  1628. }
  1629. export {
  1630. luckysheet_compareWith,
  1631. luckysheet_getarraydata,
  1632. luckysheet_getcelldata,
  1633. luckysheet_parseData,
  1634. luckysheet_getValue,
  1635. luckysheet_indirect_check,
  1636. luckysheet_indirect_check_return,
  1637. luckysheet_offset_check,
  1638. luckysheet_calcADPMM,
  1639. luckysheet_getSpecialReference
  1640. }