rapid-spreadjs 1.0.73 → 1.0.75

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.esm.js CHANGED
@@ -115,9 +115,10 @@ const SheetUtils = {
115
115
  * @param sheet 工作表实例
116
116
  * @param selectRanges 单元格范围集合,格式如:[{ row: 0, col: 0, rowCount: 2, colCount: 2 }]
117
117
  * @param isMulColOrder 是否按照多列的顺序排序单元格(true:按照第一列从上到下、第二列从上到下……的顺序获取单元格数据、false:按照第一行从左到右、第二行从左到右……的顺序获取单元格数据)
118
+ * @param isDoSelectRangesOrder 是否按照selectRanges范围中的所有单元格顺序进行获取并返回,默认为:false
118
119
  * @returns 返回数组集合,格式如:[{ row: 0, col: 0, rowCount: 1, colCount: 1 }]
119
120
  */
120
- getAllCellObjsByRanges: (sheet, selectRanges, isMulColOrder = false) => {
121
+ getAllCellObjsByRanges: (sheet, selectRanges, isMulColOrder = false, isDoSelectRangesOrder = false) => {
121
122
  // 得到所有的单元格坐标对象集合,格式如:[{ row: 0, col: 0, rowCount: 1, colCount: 1 }]
122
123
  let allCellObjs = [];
123
124
  selectRanges.forEach((item, index) => {
@@ -151,7 +152,9 @@ const SheetUtils = {
151
152
  }
152
153
  });
153
154
  // 对所有单元格坐标对象集合进行排序
154
- allCellObjs = orderByJson(allCellObjs, !isMulColOrder ? ['row', 'col'] : ['col', 'row'], ['asc', 'asc']);
155
+ if (!isDoSelectRangesOrder) {
156
+ allCellObjs = orderByJson(allCellObjs, !isMulColOrder ? ['row', 'col'] : ['col', 'row'], ['asc', 'asc']);
157
+ }
155
158
  return allCellObjs;
156
159
  },
157
160
  /**
@@ -8150,6 +8153,199 @@ const EChartsUtilsAll = {
8150
8153
  };
8151
8154
  return option;
8152
8155
  },
8156
+ /**
8157
+ * 氧化镁含量标准回归曲线方程
8158
+ * @param config 折线配置
8159
+ * @param xDataArr x轴原始数据(二维数组)
8160
+ * @param yDataArr y轴原始数据(二维数组)
8161
+ * @returns 返回ECharts配置项
8162
+ */
8163
+ chart410: (config, xDataArr, yDataArr, sheet) => {
8164
+ let lineData = JSON.parse(config.chartLinesJson);
8165
+ const chartExtJson = config.chartExtJson == null || config.chartExtJson == undefined ? null : JSON.parse(config.chartExtJson);
8166
+ //y轴原始数据
8167
+ let yDataSource = yDataArr[0]; // [1.2, 5.6, 10.8, 16, 20.8];
8168
+ let title = config.chartTitle, xName = config.chartXName, yName = config.chartYName, legendName = '图例1';
8169
+ //x轴的数据
8170
+ let xData = xDataArr[0]; // [0, 2, 4, 6, 8];
8171
+ //重新处理x轴和y轴的数据,排除x轴后面为0的数据(因为有可能在单元格中,最后一个单元格的值可能没有填,这时候默认传的是0)
8172
+ let xDataCl = [], yDataSourceCl = [];
8173
+ for (let i = 0; i < xData.length; i++) {
8174
+ if (xData[i] != '/' && (i == 0 || (i > 0 && xData[i] != 0))) {
8175
+ xDataCl.push(xData[i]);
8176
+ yDataSourceCl.push(yDataSource[i]);
8177
+ }
8178
+ else if (i > 0 && xData[i] == 0) {
8179
+ break;
8180
+ }
8181
+ }
8182
+ xData = xDataCl;
8183
+ yDataSource = yDataSourceCl;
8184
+ //series的data数据、series的markPoint的data数据、series的markLine的data数据
8185
+ let seriesData = [], markPointData = [], markLineData = [...xData];
8186
+ //此目的是显示更多的x轴数据
8187
+ //假设x轴原始数据为[0, 2, 4, 6, 8],在这个数组中没有1、3、5等数据,此时就可以通过下面的方式进行增加
8188
+ /*
8189
+ for (let i = 0; i < 20; i++) {
8190
+ if (!markLineData.some((item) => item == i)) {
8191
+ markLineData.push(i);
8192
+ }
8193
+ }
8194
+ */
8195
+ //获取y轴趋势公式对象
8196
+ const gsS = EChartsUtilsComm.calcTrend(xData, yDataSource, xData[0]);
8197
+ //输出方程表达式
8198
+ if (chartExtJson != null) {
8199
+ if (chartExtJson.jxhslSnShScfc != null && chartExtJson.jxhslSnShScfc != undefined) {
8200
+ // console.log('输出公式:',`Y=${getRound(gsS.xl,0.0001)}X+${getRound(gsS.jj,0.0001)}`)
8201
+ if (gsS.xl == '' || gsS.jj == '') {
8202
+ sheet.setValue(chartExtJson.jxhslSnShScfc.row, chartExtJson.jxhslSnShScfc.col, '/');
8203
+ }
8204
+ else {
8205
+ sheet.setValue(chartExtJson.jxhslSnShScfc.row, chartExtJson.jxhslSnShScfc.col, `Y=${EChartsUtilsComm.getRound(gsS.xl, 0.0001)}X+${EChartsUtilsComm.getRound(gsS.jj, 0.0001)}`);
8206
+ }
8207
+ }
8208
+ }
8209
+ let yDataCopy = [];
8210
+ //获取y轴原始数据对应的趋势数据
8211
+ xData.forEach((item, index) => {
8212
+ let curYData = Number(EChartsUtilsComm.getRound(eval(gsS.gs.replace('x', item + '')), 0.01));
8213
+ if (isNaN(curYData)) {
8214
+ curYData = 0;
8215
+ }
8216
+ // seriesData.push([item, curYData]);
8217
+ seriesData.push([item, yDataSource[index]]);
8218
+ yDataCopy.push(curYData);
8219
+ markPointData.push({
8220
+ xAxis: item,
8221
+ yAxis: yDataSource[index],
8222
+ symbol: 'circle',
8223
+ symbolSize: 6,
8224
+ });
8225
+ //console.log(curYData, "curYData")
8226
+ });
8227
+ let yValIsAllNull = false;
8228
+ if (xData.length == 0) {
8229
+ yValIsAllNull = true;
8230
+ }
8231
+ let nullCount = 0;
8232
+ xData.forEach((item) => {
8233
+ if (item[1] == 0 || item[1] == null || item[1] == undefined) {
8234
+ nullCount++;
8235
+ }
8236
+ });
8237
+ if (nullCount == xData.length) {
8238
+ yValIsAllNull = true;
8239
+ }
8240
+ if (yDataCopy.some((item) => item != 0 || item[1] == null || item[1] == undefined)) {
8241
+ yValIsAllNull = false;
8242
+ }
8243
+ let option = {
8244
+ grid: {
8245
+ // show: true,//是否显示外边框线
8246
+ // borderColor: '#f00',//外边框线颜色
8247
+ top: 22,
8248
+ left: !yValIsAllNull ? 30 : 25,
8249
+ right: 10,
8250
+ bottom: 35,
8251
+ containLabel: true,
8252
+ },
8253
+ //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip
8254
+ tooltip: {
8255
+ trigger: 'axis',
8256
+ formatter: function (datas, ticket) {
8257
+ return datas && datas.length > 0 ? datas[0].value[0] + ':' + datas[0].value[1] : datas[0].data;
8258
+ },
8259
+ },
8260
+ //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title
8261
+ title: [
8262
+ {
8263
+ show: true,
8264
+ text: title,
8265
+ left: 'center',
8266
+ top: 0,
8267
+ textStyle: {
8268
+ fontSize: 14,
8269
+ fontWeight: 'normal',
8270
+ },
8271
+ },
8272
+ {
8273
+ show: true,
8274
+ text: xName,
8275
+ left: 'center',
8276
+ bottom: 0,
8277
+ textStyle: {
8278
+ fontSize: 12,
8279
+ fontWeight: 'normal',
8280
+ },
8281
+ },
8282
+ ],
8283
+ //图例,参考文档:https://echarts.apache.org/zh/option.html#legend
8284
+ legend: {
8285
+ show: false,
8286
+ left: 'right',
8287
+ data: [legendName],
8288
+ selected: {
8289
+ legendName: true, //显示
8290
+ },
8291
+ selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)
8292
+ },
8293
+ xAxis: {
8294
+ type: 'value',
8295
+ splitLine: { show: false }, // 隐藏分割线
8296
+ axisLabel: { show: false }, // 隐藏刻度值
8297
+ },
8298
+ yAxis: [
8299
+ {
8300
+ type: 'value',
8301
+ name: yName,
8302
+ nameGap: !yValIsAllNull ? 30 : 5,
8303
+ nameRotate: 90,
8304
+ nameLocation: 'middle',
8305
+ },
8306
+ ],
8307
+ series: [
8308
+ {
8309
+ name: legendName,
8310
+ type: 'line',
8311
+ smooth: true, //平滑的线条
8312
+ //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol
8313
+ symbol: 'circle', //符号类型
8314
+ symbolSize: 6, //符号大小
8315
+ //线条的颜色
8316
+ lineStyle: {
8317
+ color: lineData[0].lineColor,
8318
+ //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)
8319
+ type: 'dotted',
8320
+ },
8321
+ //线条上数据点的颜色
8322
+ itemStyle: {
8323
+ color: lineData[0].lineColor,
8324
+ opacity: 0,
8325
+ },
8326
+ data: seriesData,
8327
+ markPoint: {
8328
+ data: markPointData,
8329
+ },
8330
+ markLine: {
8331
+ symbol: false, //取消箭头
8332
+ silent: true, //取消鼠标hover事件
8333
+ label: {
8334
+ position: 'start', //改变label位置
8335
+ formatter: (obj) => obj.value, //格式化显示的x轴标签内容
8336
+ },
8337
+ lineStyle: { color: '#ddd', type: 'solid' },
8338
+ data: markLineData.map((val) => {
8339
+ return {
8340
+ xAxis: val,
8341
+ };
8342
+ }),
8343
+ },
8344
+ },
8345
+ ],
8346
+ };
8347
+ return option;
8348
+ },
8153
8349
  };
8154
8350
 
8155
8351
  /**