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