You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
274 lines
7.8 KiB
274 lines
7.8 KiB
import { getObjType } from '../utils/util';
|
|
import { isRealNull, isRealNum, valueIsError } from './validate';
|
|
import { genarate, update } from './format';
|
|
import server from '../controllers/server';
|
|
import luckysheetConfigsetting from '../controllers/luckysheetConfigsetting';
|
|
import Store from '../store/index'
|
|
|
|
//Set cell value
|
|
function setcellvalue(r, c, d, v) {
|
|
if(d == null){
|
|
d = Store.flowdata;
|
|
}
|
|
// 若采用深拷贝,初始化时的单元格属性丢失
|
|
// let cell = $.extend(true, {}, d[r][c]);
|
|
let cell = d[r][c];
|
|
|
|
let vupdate;
|
|
|
|
if(getObjType(v) == "object"){
|
|
if(cell == null){
|
|
cell = v;
|
|
}
|
|
else{
|
|
if(v.f != null){
|
|
cell.f = v.f;
|
|
}
|
|
// else{
|
|
// delete cell.f;
|
|
// }
|
|
|
|
if(v.spl != null){
|
|
cell.spl = v.spl;
|
|
}
|
|
|
|
if(v.ct != null){
|
|
cell.ct = v.ct;
|
|
}
|
|
}
|
|
|
|
|
|
if(getObjType(v.v) == "object"){
|
|
vupdate = v.v.v;
|
|
}
|
|
else{
|
|
vupdate = v.v;
|
|
}
|
|
}
|
|
else{
|
|
vupdate = v;
|
|
}
|
|
|
|
if(isRealNull(vupdate)){
|
|
if(getObjType(cell) == "object"){
|
|
delete cell.m;
|
|
delete cell.v;
|
|
}
|
|
else{
|
|
cell = null;
|
|
}
|
|
|
|
d[r][c] = cell;
|
|
|
|
return;
|
|
}
|
|
|
|
// 1.为null
|
|
// 2.数据透视表的数据,flowdata的每个数据可能为字符串,结果就是cell == v == 一个字符串或者数字数据
|
|
if(isRealNull(cell) || (getObjType(cell) === 'string' || getObjType(cell) === 'number') && cell === v){
|
|
cell = {};
|
|
}
|
|
|
|
let vupdateStr = vupdate.toString();
|
|
|
|
if(vupdateStr.substr(0, 1) == "'"){
|
|
cell.m = vupdateStr.substr(1);
|
|
cell.ct = { "fa": "@", "t": "s" };
|
|
cell.v = vupdateStr.substr(1);
|
|
cell.qp = 1;
|
|
}
|
|
else if(cell.qp == 1){
|
|
cell.m = vupdateStr;
|
|
cell.ct = { "fa": "@", "t": "s" };
|
|
cell.v = vupdateStr;
|
|
}
|
|
else if(vupdateStr.toUpperCase() === "TRUE"){
|
|
cell.m = "TRUE";
|
|
cell.ct = { "fa": "General", "t": "b" };
|
|
cell.v = true;
|
|
}
|
|
else if(vupdateStr.toUpperCase() === "FALSE"){
|
|
cell.m = "FALSE";
|
|
cell.ct = { "fa": "General", "t": "b" };
|
|
cell.v = false;
|
|
}
|
|
else if(vupdateStr.substr(-1) === "%" && isRealNum(vupdateStr.substring(0, vupdateStr.length-1))){
|
|
cell.ct = {fa: "0%", t: "n"};
|
|
cell.v = vupdateStr.substring(0, vupdateStr.length-1) / 100;
|
|
cell.m = vupdate;
|
|
}
|
|
else if(valueIsError(vupdate)){
|
|
cell.m = vupdateStr;
|
|
// cell.ct = { "fa": "General", "t": "e" };
|
|
if(cell.ct!=null){
|
|
cell.ct.t = "e";
|
|
}
|
|
else{
|
|
cell.ct = { "fa": "General", "t": "e" };
|
|
}
|
|
cell.v = vupdate;
|
|
}
|
|
else{
|
|
if(cell.f != null && isRealNum(vupdate) && !/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i.test(vupdate)){
|
|
cell.v = parseFloat(vupdate);
|
|
if(cell.ct==null){
|
|
cell.ct = { "fa": "General", "t": "n" };
|
|
}
|
|
|
|
if(cell.v == Infinity || cell.v == -Infinity){
|
|
cell.m = cell.v.toString();
|
|
}
|
|
else{
|
|
if(cell.v.toString().indexOf("e") > -1){
|
|
let len;
|
|
if(cell.v.toString().split(".").length==1){
|
|
len = 0;
|
|
}
|
|
else{
|
|
len = cell.v.toString().split(".")[1].split("e")[0].length;
|
|
}
|
|
if(len > 5){
|
|
len = 5;
|
|
}
|
|
|
|
cell.m = cell.v.toExponential(len).toString();
|
|
}
|
|
else{
|
|
let v_p = Math.round(cell.v * 1000000000) / 1000000000;
|
|
if(cell.ct==null){
|
|
let mask = genarate(v_p);
|
|
cell.m = mask[0].toString();
|
|
}
|
|
else{
|
|
let mask = update(cell.ct.fa, v_p);
|
|
cell.m = mask.toString();
|
|
}
|
|
|
|
// cell.m = mask[0].toString();
|
|
}
|
|
}
|
|
}
|
|
else if(cell.ct != null && cell.ct.fa == "@"){
|
|
cell.m = vupdateStr;
|
|
cell.v = vupdate;
|
|
}
|
|
else if(cell.ct != null && cell.ct.fa != null && cell.ct.fa != "General"){
|
|
if(isRealNum(vupdate)){
|
|
vupdate = parseFloat(vupdate);
|
|
}
|
|
|
|
let mask = update(cell.ct.fa, vupdate);
|
|
|
|
if(mask === vupdate){ //若原来单元格格式 应用不了 要更新的值,则获取更新值的 格式
|
|
mask = genarate(vupdate);
|
|
|
|
cell.m = mask[0].toString();
|
|
cell.ct = mask[1];
|
|
cell.v = mask[2];
|
|
}
|
|
else{
|
|
cell.m = mask.toString();
|
|
cell.v = vupdate;
|
|
}
|
|
}
|
|
else{
|
|
if(isRealNum(vupdate) && !/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i.test(vupdate)){
|
|
|
|
if(typeof vupdate === "string"){
|
|
let flag = vupdate.split("").every(ele=>ele == "0" || ele == ".");
|
|
if(flag){
|
|
vupdate = parseFloat(vupdate);
|
|
}
|
|
}
|
|
cell.v = vupdate; /* 备注:如果使用parseFloat,1.1111111111111111会转换为1.1111111111111112 ? */
|
|
cell.ct = { "fa": "General", "t": "n" };
|
|
if(cell.v == Infinity || cell.v == -Infinity){
|
|
cell.m = cell.v.toString();
|
|
}
|
|
else{
|
|
let mask = genarate(cell.v);
|
|
|
|
cell.m = mask[0].toString();
|
|
}
|
|
}
|
|
else{
|
|
let mask = genarate(vupdate);
|
|
|
|
cell.m = mask[0].toString();
|
|
cell.ct = mask[1];
|
|
cell.v = mask[2];
|
|
}
|
|
}
|
|
}
|
|
|
|
if(!server.allowUpdate && !luckysheetConfigsetting.pointEdit){
|
|
if(cell.ct != null && /^(w|W)((0?)|(0\.0+))$/.test(cell.ct.fa) == false && cell.ct.t == "n" && cell.v != null && parseInt(cell.v).toString().length > 4){
|
|
let autoFormatw = luckysheetConfigsetting.autoFormatw.toString().toUpperCase();
|
|
let accuracy = luckysheetConfigsetting.accuracy;
|
|
|
|
let sfmt = setAccuracy(autoFormatw, accuracy);
|
|
|
|
if(sfmt != "General") {
|
|
cell.ct.fa = sfmt;
|
|
cell.m = update(sfmt, cell.v);
|
|
}
|
|
}
|
|
}
|
|
|
|
d[r][c] = cell;
|
|
}
|
|
|
|
//new runze 根据亿万格式autoFormatw和精确度accuracy 转换成 w/w0/w0.00 or 0/0.0格式
|
|
function setAccuracy(autoFormatw, accuracy) {
|
|
let acc = "0.";
|
|
let fmt;
|
|
|
|
if(autoFormatw == "TRUE"){
|
|
if(accuracy == undefined){
|
|
return "w";
|
|
}
|
|
else{
|
|
let alength = parseInt(accuracy);
|
|
|
|
if(alength == 0){
|
|
return "w0";
|
|
}
|
|
else{
|
|
acc = "w0.";
|
|
|
|
for(let i = 0; i < alength; i++){
|
|
acc += "0";
|
|
}
|
|
|
|
fmt = acc;
|
|
}
|
|
}
|
|
}
|
|
else{
|
|
if(accuracy == undefined){
|
|
return "General";
|
|
}
|
|
else{
|
|
let alength = parseInt(accuracy);
|
|
|
|
if(alength == 0){
|
|
return "0";
|
|
}
|
|
else{
|
|
for(let i = 0; i < alength; i++){
|
|
acc += "0";
|
|
}
|
|
|
|
fmt = acc;
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
return fmt.toString();
|
|
}
|
|
|
|
export {
|
|
setcellvalue,
|
|
setAccuracy,
|
|
}
|