rapid-spreadjs 1.0.94 → 1.0.96

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
@@ -629,9 +629,10 @@ const SheetUtils = {
629
629
  * 获取工作表中所有纯值、无值或公式单元格的范围选择字符串
630
630
  * @param sheet 工作表对象
631
631
  * @param getType 获取类型(1:纯值、2:无值、3:公式),默认为:1
632
+ * @param range 单元格范围,格式为:{ row: number; col: number; rowCount: number; colCount: number }
632
633
  */
633
- getCellsRangeStr: (sheet, getType = 1) => {
634
- const range = { row: 0, col: 1, rowCount: sheet.getRowCount(), colCount: 77 };
634
+ getCellsRangeStr: (sheet, getType, range) => {
635
+ // const range = { row: 0, col: 1, rowCount: sheet.getRowCount(), colCount: 77 };
635
636
  // 所有单元格对象集合
636
637
  const allCells = SheetUtils.getAllCellObjsByRanges(sheet, [range]);
637
638
  // 最终需要的单元格对象集合
@@ -4092,430 +4093,539 @@ const EChartsUtilsAll = {
4092
4093
  yDataSource1 = yDataArr[0], // [2.25, 2.29, 2.34, 2.29, 2.23],
4093
4094
  yDataSource2 = isTwoLine ? yDataArr[1] : []; // [2.27, 2.32, 2.36, 2.33, 2.26];
4094
4095
  let title = config.chartTitle, xName = config.chartXName, yName = config.chartYName, legendName = '图例1';
4095
- const lineFunc = (xDataSource, yDataSource, isShowMarkPoint, isShowMarkLine, isTwoLineData) => {
4096
- //原始数据
4097
- let dxsJs = chartExtJson != null ? chartExtJson.dxsJs : 5, xData = [], yData = [], seriesData = []; //处理原始数据为空的值,不然参与mathjs计算会报错
4098
- //处理原始数据为空的值,不然参与mathjs计算会报错
4099
- xDataSource.forEach((item, index) => {
4100
- if (/^-?\d+(\.\d+)?([eE][+-]?\d+)?$/.test(item) &&
4101
- item != 0 &&
4102
- /^-?\d+(\.\d+)?([eE][+-]?\d+)?$/.test(yDataSource[index]) &&
4103
- yDataSource[index] != 0) {
4104
- xData.push(item);
4105
- yData.push(yDataSource[index]);
4106
- }
4107
- });
4108
- //y轴没有任何数据的时候,不参与绘制图表
4109
- if (yData.length == 0) {
4110
- return;
4111
- }
4112
- if (dxsJs >= yData.length) {
4113
- dxsJs = yData.length - 1;
4114
- }
4115
- let xMin = Math.min(...xData), xMax = Math.max(...xData), yMin = Math.min(...yData), yMax = Math.max(...yData), xAxisMax = Math.ceil(xMax + 0.1), xAxisMin = Math.trunc(xMin - 0.1), yAxisMax = Number(EChartsUtilsComm.getRound(yMax + 0.02, 0.01)), yAxisMin = Number(EChartsUtilsComm.getRound(yMin - 0.02, 0.01));
4116
- //如果界面设置了校正最佳含水率和最大干密度,则显示界面中的顶点坐标(此时就不显示辅助线了)
4117
- let cellValJzZjhsl, cellValJzZdgmd;
4118
- if (chartExtJson != null && chartExtJson.jsIsJz) {
4119
- if (chartExtJson.jsZjhslJz != null && chartExtJson.jsZjhslJz != undefined) {
4120
- cellValJzZjhsl = sheet.getValue(chartExtJson.jsZjhslJz.row, chartExtJson.jsZjhslJz.col);
4096
+ try {
4097
+ const lineFunc = (xDataSource, yDataSource, isShowMarkPoint, isShowMarkLine, isTwoLineData) => {
4098
+ //原始数据
4099
+ let dxsJs = chartExtJson != null ? chartExtJson.dxsJs : 5, xData = [], yData = [], seriesData = []; //处理原始数据为空的值,不然参与mathjs计算会报错
4100
+ //处理原始数据为空的值,不然参与mathjs计算会报错
4101
+ xDataSource.forEach((item, index) => {
4102
+ if (/^-?\d+(\.\d+)?([eE][+-]?\d+)?$/.test(item) &&
4103
+ item != 0 &&
4104
+ /^-?\d+(\.\d+)?([eE][+-]?\d+)?$/.test(yDataSource[index]) &&
4105
+ yDataSource[index] != 0) {
4106
+ xData.push(item);
4107
+ yData.push(yDataSource[index]);
4108
+ }
4109
+ });
4110
+ //y轴没有任何数据的时候,不参与绘制图表
4111
+ if (yData.length == 0) {
4112
+ return;
4121
4113
  }
4122
- if (chartExtJson.jsZdgmdJz != null && chartExtJson.jsZdgmdJz != undefined) {
4123
- cellValJzZdgmd = sheet.getValue(chartExtJson.jsZdgmdJz.row, chartExtJson.jsZdgmdJz.col);
4114
+ if (dxsJs >= yData.length) {
4115
+ dxsJs = yData.length - 1;
4124
4116
  }
4125
- //如果界面输入的最大干密度大于了y轴最大值,则需要重新设置y轴的最大值
4126
- if (/^-?\d+(\.\d+)?([eE][+-]?\d+)?$/.test(cellValJzZdgmd) && cellValJzZdgmd > yAxisMax) {
4127
- yAxisMax = Number(EChartsUtilsComm.getRound(cellValJzZdgmd + 0.02, 0.01));
4117
+ let xMin = Math.min(...xData), xMax = Math.max(...xData), yMin = Math.min(...yData), yMax = Math.max(...yData), xAxisMax = Math.ceil(xMax + 0.1), xAxisMin = Math.trunc(xMin - 0.1), yAxisMax = Number(EChartsUtilsComm.getRound(yMax + 0.02, 0.01)), yAxisMin = Number(EChartsUtilsComm.getRound(yMin - 0.02, 0.01));
4118
+ //如果界面设置了校正最佳含水率和最大干密度,则显示界面中的顶点坐标(此时就不显示辅助线了)
4119
+ let cellValJzZjhsl, cellValJzZdgmd;
4120
+ if (chartExtJson != null && chartExtJson.jsIsJz) {
4121
+ if (chartExtJson.jsZjhslJz != null && chartExtJson.jsZjhslJz != undefined) {
4122
+ cellValJzZjhsl = sheet.getValue(chartExtJson.jsZjhslJz.row, chartExtJson.jsZjhslJz.col);
4123
+ }
4124
+ if (chartExtJson.jsZdgmdJz != null && chartExtJson.jsZdgmdJz != undefined) {
4125
+ cellValJzZdgmd = sheet.getValue(chartExtJson.jsZdgmdJz.row, chartExtJson.jsZdgmdJz.col);
4126
+ }
4127
+ //如果界面输入的最大干密度大于了y轴最大值,则需要重新设置y轴的最大值
4128
+ if (/^-?\d+(\.\d+)?([eE][+-]?\d+)?$/.test(cellValJzZdgmd) && cellValJzZdgmd > yAxisMax) {
4129
+ yAxisMax = Number(EChartsUtilsComm.getRound(cellValJzZdgmd + 0.02, 0.01));
4130
+ }
4128
4131
  }
4129
- }
4130
- let points = [];
4131
- xData.forEach((item, index) => {
4132
- points.push([item, yData[index]]);
4133
- });
4134
- // 构造范德蒙德矩阵的函数
4135
- function vandermondeMatrix(x, N) {
4136
- const matrix = [];
4137
- for (let i = 0; i < x.length; i++) {
4138
- const row = [];
4139
- for (let j = 0; j <= N; j++) {
4140
- // 注意这里从0到N,包含N
4141
- row.push(math__namespace.pow(x[i], j));
4142
- }
4143
- matrix.push(row);
4144
- }
4145
- return math__namespace.matrix(matrix);
4146
- }
4147
- // 构造原始的范德蒙德矩阵
4148
- const vandermonde_matrix = vandermondeMatrix(xData, dxsJs); // 注意这里N=4,因为我们从0开始计数
4149
- // 使用最小二乘法求解
4150
- const A = vandermonde_matrix;
4151
- const AT = math__namespace.transpose(A);
4152
- const ATA = math__namespace.multiply(AT, A);
4153
- const ATb = math__namespace.multiply(AT, math__namespace.matrix(yData));
4154
- // 解线性方程组
4155
- let result = null, coefficients = [];
4156
- try {
4157
- result = math__namespace.lusolve(ATA, ATb);
4158
- coefficients = result.valueOf();
4159
- }
4160
- catch (err) {
4161
- for (let index = 0; index < xData.length; index++) {
4162
- coefficients.push([0]);
4163
- }
4164
- // console.log('无法解决该线性系统');
4165
- }
4166
- // const result = math.lusolve(ATA, ATb);
4167
- // const coefficients = result.valueOf();
4168
- function funequation(x) {
4169
- let y = 0;
4170
- coefficients.forEach((item, index) => {
4171
- //fx^0
4172
- //fx^0+ax^1
4173
- //fx^0+ax^1+bx^2
4174
- //fx^0+ax^1+bx^2+cx^3
4175
- //fx^0+x^1+x^2+x^3+x^4
4176
- y += item * Math.pow(x, index);
4132
+ let points = [];
4133
+ xData.forEach((item, index) => {
4134
+ points.push([item, yData[index]]);
4177
4135
  });
4178
- return y;
4179
- }
4180
- // x=[3.5, 4, 4.5, 5, 5.5,6 ],y= [2.262, 2.321, 2.319, 2.292, 2.285, 2.28]
4181
- let arrX = [];
4182
- let arrY = [];
4183
- for (let i = xMin; i <= xMax; i += 0.01) {
4184
- let temp = Number(EChartsUtilsComm.getRound(i, 0.01));
4185
- //重新设置i,防止i丢失精度
4186
- i = Number(temp);
4187
- //arrY.push(lagrangeInterpolation(points, temp));
4188
- arrY.push(funequation(temp));
4189
- arrX.push(temp);
4190
- }
4191
- let max = Math.max(...arrY);
4192
- // 找到最大值的索引
4193
- let maxIndex = arrY.findIndex((value) => value === max);
4194
- // console.log('最大点数据:', arrX[maxIndex], max);
4195
- // console.log(chartExtJson);
4196
- //默认输出精度
4197
- let outJdZjhsl = 0.01, outJdZdgmd = 0.001;
4198
- //顶点数据
4199
- let outValZjhsl = 0, outValZdgmd = 0;
4200
- //设置Sheet单元格的值(最佳含水率和最大干密度)
4201
- if (chartExtJson != null) {
4202
- // console.log(4444, chartExtJson.jsZjhsl.row, chartExtJson.jsZjhsl.col, arrX[maxIndex]);
4203
- if (chartExtJson.jsZjhslJd != null && chartExtJson.jsZjhslJd != undefined) {
4204
- outJdZjhsl = chartExtJson.jsZjhslJd;
4205
- }
4206
- if (chartExtJson.jsZdgmdJd != null && chartExtJson.jsZdgmdJd != undefined) {
4207
- outJdZdgmd = chartExtJson.jsZdgmdJd;
4208
- }
4209
- if (arrX[maxIndex] == 0 && max == 0) {
4210
- sheet.setValue(chartExtJson.jsZjhsl.row, chartExtJson.jsZjhsl.col, '/');
4211
- sheet.setValue(chartExtJson.jsZdgmd.row, chartExtJson.jsZdgmd.col, '/');
4212
- }
4213
- else {
4214
- outValZjhsl = EChartsUtilsComm.getRound(arrX[maxIndex], outJdZjhsl);
4215
- outValZdgmd = EChartsUtilsComm.getRound(max, outJdZdgmd);
4216
- sheet.setValue(chartExtJson.jsZjhsl.row, chartExtJson.jsZjhsl.col, outValZjhsl);
4217
- sheet.setValue(chartExtJson.jsZdgmd.row, chartExtJson.jsZdgmd.col, outValZdgmd);
4136
+ // 构造范德蒙德矩阵的函数
4137
+ function vandermondeMatrix(x, N) {
4138
+ const matrix = [];
4139
+ for (let i = 0; i < x.length; i++) {
4140
+ const row = [];
4141
+ for (let j = 0; j <= N; j++) {
4142
+ // 注意这里从0到N,包含N
4143
+ row.push(math__namespace.pow(x[i], j));
4144
+ }
4145
+ matrix.push(row);
4146
+ }
4147
+ return math__namespace.matrix(matrix);
4148
+ }
4149
+ // 构造原始的范德蒙德矩阵
4150
+ const vandermonde_matrix = vandermondeMatrix(xData, dxsJs); // 注意这里N=4,因为我们从0开始计数
4151
+ // 使用最小二乘法求解
4152
+ const A = vandermonde_matrix;
4153
+ const AT = math__namespace.transpose(A);
4154
+ const ATA = math__namespace.multiply(AT, A);
4155
+ const ATb = math__namespace.multiply(AT, math__namespace.matrix(yData));
4156
+ // 解线性方程组
4157
+ let result = null, coefficients = [];
4158
+ try {
4159
+ result = math__namespace.lusolve(ATA, ATb);
4160
+ coefficients = result.valueOf();
4161
+ }
4162
+ catch (err) {
4163
+ for (let index = 0; index < xData.length; index++) {
4164
+ coefficients.push([0]);
4165
+ }
4166
+ // console.log('无法解决该线性系统');
4167
+ }
4168
+ // const result = math.lusolve(ATA, ATb);
4169
+ // const coefficients = result.valueOf();
4170
+ function funequation(x) {
4171
+ let y = 0;
4172
+ coefficients.forEach((item, index) => {
4173
+ //fx^0
4174
+ //fx^0+ax^1
4175
+ //fx^0+ax^1+bx^2
4176
+ //fx^0+ax^1+bx^2+cx^3
4177
+ //fx^0+x^1+x^2+x^3+x^4
4178
+ y += item * Math.pow(x, index);
4179
+ });
4180
+ return y;
4218
4181
  }
4219
- }
4220
- arrX.forEach((item, index) => {
4221
- if (xData.includes(item)) {
4222
- seriesData.push({ value: [item, arrY[index]] });
4182
+ // console.log('计算公式:', coefficients);
4183
+ function lagrangeInterpolation(points, x) {
4184
+ let result = 0;
4185
+ for (let i = 0; i < points.length; i++) {
4186
+ let term = points[i][1];
4187
+ let xi = points[i][0];
4188
+ for (let j = 0; j < points.length; j++) {
4189
+ if (j !== i) {
4190
+ let xj = points[j][0];
4191
+ term *= (x - xj) / (xi - xj);
4192
+ }
4193
+ }
4194
+ result += term;
4195
+ }
4196
+ return result;
4223
4197
  }
4224
- else {
4225
- seriesData.push({
4226
- value: [item, arrY[index]],
4227
- symbol: 'none',
4228
- });
4198
+ // x=[3.5, 4, 4.5, 5, 5.5,6 ],y= [2.262, 2.321, 2.319, 2.292, 2.285, 2.28]
4199
+ let arrX = [];
4200
+ let arrY = [];
4201
+ for (let i = xMin; i <= xMax; i += 0.01) {
4202
+ let temp = Number(EChartsUtilsComm.getRound(i, 0.01));
4203
+ //重新设置i,防止i丢失精度
4204
+ i = Number(temp);
4205
+ //arrY.push(lagrangeInterpolation(points, temp));
4206
+ arrY.push(funequation(temp));
4207
+ arrX.push(temp);
4208
+ }
4209
+ let max = Math.max(...arrY);
4210
+ // 找到最大值的索引
4211
+ let maxIndex = arrY.findIndex((value) => value === max);
4212
+ // console.log('最大点数据:', arrX[maxIndex], max);
4213
+ // console.log(chartExtJson);
4214
+ //默认输出精度
4215
+ let outJdZjhsl = 0.01, outJdZdgmd = 0.001;
4216
+ //顶点数据
4217
+ let outValZjhsl = 0, outValZdgmd = 0;
4218
+ //设置Sheet单元格的值(最佳含水率和最大干密度)
4219
+ if (chartExtJson != null) {
4220
+ // console.log(4444, chartExtJson.jsZjhsl.row, chartExtJson.jsZjhsl.col, arrX[maxIndex]);
4221
+ if (chartExtJson.jsZjhslJd != null && chartExtJson.jsZjhslJd != undefined) {
4222
+ outJdZjhsl = chartExtJson.jsZjhslJd;
4223
+ }
4224
+ if (chartExtJson.jsZdgmdJd != null && chartExtJson.jsZdgmdJd != undefined) {
4225
+ outJdZdgmd = chartExtJson.jsZdgmdJd;
4226
+ }
4227
+ if (arrX[maxIndex] == 0 && max == 0) {
4228
+ sheet.setValue(chartExtJson.jsZjhsl.row, chartExtJson.jsZjhsl.col, '/');
4229
+ sheet.setValue(chartExtJson.jsZdgmd.row, chartExtJson.jsZdgmd.col, '/');
4230
+ }
4231
+ else {
4232
+ outValZjhsl = EChartsUtilsComm.getRound(arrX[maxIndex], outJdZjhsl);
4233
+ outValZdgmd = EChartsUtilsComm.getRound(max, outJdZdgmd);
4234
+ sheet.setValue(chartExtJson.jsZjhsl.row, chartExtJson.jsZjhsl.col, outValZjhsl);
4235
+ sheet.setValue(chartExtJson.jsZdgmd.row, chartExtJson.jsZdgmd.col, outValZdgmd);
4236
+ }
4229
4237
  }
4230
- });
4231
- //xData.forEach((item, index) => {
4232
- //seriesData.push([item, yData[index]]);
4233
- //});
4234
- //计算峰值----目前没有公式 值写死的
4235
- const peakvalue = [arrX[maxIndex], Number(EChartsUtilsComm.getRound(max, outJdZdgmd))], coordX = [peakvalue[0], yAxisMin], coordY = [xAxisMin, peakvalue[1]];
4236
- let markPointObj = {
4237
- data: [
4238
- {
4239
- xAxis: EChartsUtilsComm.getRound(peakvalue[0], outJdZjhsl),
4240
- yAxis: EChartsUtilsComm.getRound(peakvalue[1], outJdZdgmd),
4241
- symbolOffset: [0, 15],
4242
- symbol: 'circle',
4243
- symbolSize: 6,
4244
- label: {
4245
- show: true,
4246
- color: '#000',
4247
- formatter: function (data) {
4248
- // 自定义标签内容
4249
- if (Number(data.data.xAxis) == 0 && Number(data.data.yAxis) == 0) {
4250
- return '';
4251
- }
4252
- else {
4253
- return '( ' + data.data.xAxis + ',' + data.data.yAxis + ')';
4254
- }
4255
- },
4256
- },
4257
- itemStyle: { color: 'transparent' },
4258
- },
4259
- ],
4260
- }, markLineObj = {
4261
- symbol: ['none', 'none'], //去掉箭头
4262
- itemStyle: {
4263
- lineStyle: {
4264
- type: 'solid',
4265
- color: '#333',
4266
- width: 2,
4267
- },
4268
- },
4269
- data: [
4270
- [
4238
+ arrX.forEach((item, index) => {
4239
+ if (xData.includes(item)) {
4240
+ seriesData.push({ value: [item, arrY[index]] });
4241
+ }
4242
+ else {
4243
+ seriesData.push({
4244
+ value: [item, arrY[index]],
4245
+ symbol: 'none',
4246
+ });
4247
+ }
4248
+ });
4249
+ //xData.forEach((item, index) => {
4250
+ //seriesData.push([item, yData[index]]);
4251
+ //});
4252
+ //计算峰值----目前没有公式 值写死的
4253
+ const peakvalue = [arrX[maxIndex], Number(EChartsUtilsComm.getRound(max, outJdZdgmd))], coordX = [peakvalue[0], yAxisMin], coordY = [xAxisMin, peakvalue[1]];
4254
+ let markPointObj = {
4255
+ data: [
4271
4256
  {
4272
- coord: coordX,
4273
- lineStyle: {
4274
- color: '#333', //X轴
4275
- type: 'dashed',
4257
+ xAxis: EChartsUtilsComm.getRound(peakvalue[0], outJdZjhsl),
4258
+ yAxis: EChartsUtilsComm.getRound(peakvalue[1], outJdZdgmd),
4259
+ symbolOffset: [0, 15],
4260
+ symbol: 'circle',
4261
+ symbolSize: 6,
4262
+ label: {
4263
+ show: true,
4264
+ color: '#000',
4265
+ formatter: function (data) {
4266
+ // 自定义标签内容
4267
+ if (Number(data.data.xAxis) == 0 && Number(data.data.yAxis) == 0) {
4268
+ return '';
4269
+ }
4270
+ else {
4271
+ return '( ' + data.data.xAxis + ',' + data.data.yAxis + ')';
4272
+ }
4273
+ },
4276
4274
  },
4277
- },
4278
- {
4279
- coord: peakvalue,
4275
+ itemStyle: { color: 'transparent' },
4280
4276
  },
4281
4277
  ],
4282
- [
4283
- {
4284
- coord: coordY,
4285
- lineStyle: {
4286
- color: '#333', //y轴
4287
- type: 'dashed',
4288
- },
4289
- },
4290
- {
4291
- coord: peakvalue,
4278
+ }, markLineObj = {
4279
+ symbol: ['none', 'none'], //去掉箭头
4280
+ itemStyle: {
4281
+ lineStyle: {
4282
+ type: 'solid',
4283
+ color: '#333',
4284
+ width: 2,
4292
4285
  },
4286
+ },
4287
+ data: [
4288
+ [
4289
+ {
4290
+ coord: coordX,
4291
+ lineStyle: {
4292
+ color: '#333', //X轴
4293
+ type: 'dashed',
4294
+ },
4295
+ },
4296
+ {
4297
+ coord: peakvalue,
4298
+ },
4299
+ ],
4300
+ [
4301
+ {
4302
+ coord: coordY,
4303
+ lineStyle: {
4304
+ color: '#333', //y轴
4305
+ type: 'dashed',
4306
+ },
4307
+ },
4308
+ {
4309
+ coord: peakvalue,
4310
+ },
4311
+ ],
4293
4312
  ],
4294
- ],
4295
- };
4296
- //如果界面设置了校正最佳含水率和最大干密度,则显示界面中的顶点坐标(此时就不显示辅助线了)
4297
- if (chartExtJson.jsIsJz && /^-?\d+(\.\d+)?([eE][+-]?\d+)?$/.test(cellValJzZjhsl) && /^-?\d+(\.\d+)?([eE][+-]?\d+)?$/.test(cellValJzZdgmd)) {
4298
- markLineObj = null;
4299
- markPointObj.data[0].label = null;
4300
- markPointObj.data[0].symbolOffset = null;
4301
- markPointObj.data[0].itemStyle.color = '#F56C6C';
4302
- markPointObj.data[0].xAxis = cellValJzZjhsl;
4303
- markPointObj.data[0].yAxis = cellValJzZdgmd;
4304
- markLineObj = null;
4305
- }
4306
- let seriesDataObj = {
4307
- name: legendName,
4308
- type: 'line',
4309
- smooth: true, //平滑的线条
4310
- //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol
4311
- symbol: 'circle', //符号类型
4312
- symbolSize: 6, //符号大小
4313
- //线条的颜色
4314
- lineStyle: {
4315
- color: lineData[isTwoLineData ? 1 : 0].lineColor,
4316
- //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)
4317
- type: isTwoLineData ? 'dotted' : 'solid',
4318
- },
4319
- //线条上数据点的颜色
4320
- itemStyle: {
4321
- color: lineData[isTwoLineData ? 1 : 0].lineColor,
4322
- },
4323
- data: seriesData,
4324
- markPoint: isShowMarkPoint ? markPointObj : null,
4325
- markLine: isShowMarkLine ? markLineObj : null,
4326
- };
4327
- return {
4328
- xAxisMin: xAxisMin,
4329
- xAxisMax: xAxisMax,
4330
- yAxisMin: yAxisMin,
4331
- yAxisMax: yAxisMax,
4332
- xData: xData,
4333
- seriesDataObj: seriesDataObj,
4334
- maxPointData: [arrX[maxIndex], max],
4313
+ };
4314
+ //如果界面设置了校正最佳含水率和最大干密度,则显示界面中的顶点坐标(此时就不显示辅助线了)
4315
+ if (chartExtJson.jsIsJz && /^-?\d+(\.\d+)?([eE][+-]?\d+)?$/.test(cellValJzZjhsl) && /^-?\d+(\.\d+)?([eE][+-]?\d+)?$/.test(cellValJzZdgmd)) {
4316
+ markLineObj = null;
4317
+ markPointObj.data[0].label = null;
4318
+ markPointObj.data[0].symbolOffset = null;
4319
+ markPointObj.data[0].itemStyle.color = '#F56C6C';
4320
+ markPointObj.data[0].xAxis = cellValJzZjhsl;
4321
+ markPointObj.data[0].yAxis = cellValJzZdgmd;
4322
+ markLineObj = null;
4323
+ }
4324
+ let seriesDataObj = {
4325
+ name: legendName,
4326
+ type: 'line',
4327
+ smooth: true, //平滑的线条
4328
+ //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol
4329
+ symbol: 'circle', //符号类型
4330
+ symbolSize: 6, //符号大小
4331
+ //线条的颜色
4332
+ lineStyle: {
4333
+ color: lineData[isTwoLineData ? 1 : 0].lineColor,
4334
+ //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)
4335
+ type: isTwoLineData ? 'dotted' : 'solid',
4336
+ },
4337
+ //线条上数据点的颜色
4338
+ itemStyle: {
4339
+ color: lineData[isTwoLineData ? 1 : 0].lineColor,
4340
+ },
4341
+ data: seriesData,
4342
+ markPoint: isShowMarkPoint ? markPointObj : null,
4343
+ markLine: isShowMarkLine ? markLineObj : null,
4344
+ };
4345
+ return {
4346
+ xAxisMin: xAxisMin,
4347
+ xAxisMax: xAxisMax,
4348
+ yAxisMin: yAxisMin,
4349
+ yAxisMax: yAxisMax,
4350
+ xData: xData,
4351
+ seriesDataObj: seriesDataObj,
4352
+ maxPointData: [arrX[maxIndex], max],
4353
+ };
4335
4354
  };
4336
- };
4337
- let xAxisMin = 0, xAxisMax = 0, yAxisMin = 0, yAxisMax = 0, xData = [], seriesData = [], maxPointDataX = 0, maxPointDataY = 0;
4338
- let lineObj1 = lineFunc(xDataSource1, yDataSource1, !isTwoLine, !isTwoLine, false), lineObj2;
4339
- if (isTwoLine) {
4340
- lineObj2 = lineFunc(xDataSource2, yDataSource2, false, false, true);
4341
- }
4342
- //此处的作用是,有可能x和y轴的数据都为空,造成lineObj1为undefined,避免报错
4343
- if (lineObj1 == undefined || lineObj1 == null) {
4344
- return;
4345
- }
4346
- //一条线的时候
4347
- if (!isTwoLine) {
4348
- xAxisMin = lineObj1.xAxisMin;
4349
- xAxisMax = lineObj1.xAxisMax;
4350
- yAxisMin = lineObj1.yAxisMin;
4351
- yAxisMax = lineObj1.yAxisMax;
4352
- xData = lineObj1.xData;
4353
- seriesData.push(lineObj1.seriesDataObj);
4354
- }
4355
- //2条线的时候
4356
- else {
4357
- if (lineObj2 == undefined || lineObj2 == null) {
4358
- return;
4359
- }
4360
- xAxisMax = lineObj1.xAxisMax;
4361
- if (lineObj2.xAxisMax > xAxisMax) {
4362
- xAxisMax = lineObj2.xAxisMax;
4363
- }
4364
- xAxisMin = lineObj1.xAxisMin;
4365
- if (lineObj2.xAxisMin < xAxisMin) {
4366
- xAxisMin = lineObj2.xAxisMin;
4355
+ let xAxisMin = 0, xAxisMax = 0, yAxisMin = 0, yAxisMax = 0, xData = [], seriesData = [], maxPointDataX = 0, maxPointDataY = 0;
4356
+ let lineObj1 = lineFunc(xDataSource1, yDataSource1, !isTwoLine, !isTwoLine, false), lineObj2;
4357
+ if (isTwoLine) {
4358
+ lineObj2 = lineFunc(xDataSource2, yDataSource2, false, false, true);
4367
4359
  }
4368
- yAxisMax = lineObj1.yAxisMax;
4369
- if (lineObj2.yAxisMax > yAxisMax) {
4370
- yAxisMax = lineObj2.yAxisMax;
4360
+ //此处的作用是,有可能x和y轴的数据都为空,造成lineObj1为undefined,避免报错
4361
+ if (lineObj1 == undefined || lineObj1 == null) {
4362
+ return;
4371
4363
  }
4372
- yAxisMin = lineObj1.yAxisMin;
4373
- if (lineObj2.yAxisMin < yAxisMin) {
4374
- yAxisMin = lineObj2.yAxisMin;
4364
+ //一条线的时候
4365
+ if (!isTwoLine) {
4366
+ xAxisMin = lineObj1.xAxisMin;
4367
+ xAxisMax = lineObj1.xAxisMax;
4368
+ yAxisMin = lineObj1.yAxisMin;
4369
+ yAxisMax = lineObj1.yAxisMax;
4370
+ xData = lineObj1.xData;
4371
+ seriesData.push(lineObj1.seriesDataObj);
4375
4372
  }
4376
- lineObj1.xData.forEach((item) => {
4377
- xData.push(item);
4378
- });
4379
- lineObj2.xData.forEach((item) => {
4380
- xData.push(item);
4381
- });
4382
- seriesData.push(lineObj1.seriesDataObj);
4383
- seriesData.push(lineObj2.seriesDataObj);
4384
- maxPointDataX = (lineObj1.maxPointData[0] + lineObj2.maxPointData[0]) / 2;
4385
- maxPointDataY = (lineObj1.maxPointData[1] + lineObj2.maxPointData[1]) / 2;
4386
- // console.log(
4387
- // "两条线最大点的平均值:",
4388
- // maxPointDataX,
4389
- // maxPointDataY
4390
- // );
4391
- //默认输出精度
4392
- let outJdZjhsl = 0.01, outJdZdgmd = 0.001;
4393
- //顶点数据
4394
- let outValZjhsl = 0, outValZdgmd = 0;
4395
- //设置Sheet单元格的值(最佳含水率和最大干密度)
4396
- if (chartExtJson != null) {
4397
- // console.log(4444, chartExtJson.jsZjhsl.row, chartExtJson.jsZjhsl.col, arrX[maxIndex]);
4398
- if (chartExtJson.jsZjhslJd != null && chartExtJson.jsZjhslJd != undefined) {
4399
- outJdZjhsl = chartExtJson.jsZjhslJd;
4400
- }
4401
- if (chartExtJson.jsZdgmdJd != null && chartExtJson.jsZdgmdJd != undefined) {
4402
- outJdZdgmd = chartExtJson.jsZdgmdJd;
4403
- }
4404
- if (maxPointDataX == 0 && maxPointDataY == 0) {
4405
- sheet.setValue(chartExtJson.jsZjhsl.row, chartExtJson.jsZjhsl.col, '/');
4406
- sheet.setValue(chartExtJson.jsZdgmd.row, chartExtJson.jsZdgmd.col, '/');
4373
+ //2条线的时候
4374
+ else {
4375
+ if (lineObj2 == undefined || lineObj2 == null) {
4376
+ return;
4407
4377
  }
4408
- else {
4409
- outValZjhsl = EChartsUtilsComm.getRound(maxPointDataX, outJdZjhsl);
4410
- outValZdgmd = EChartsUtilsComm.getRound(maxPointDataY, outJdZdgmd);
4411
- sheet.setValue(chartExtJson.jsZjhsl.row, chartExtJson.jsZjhsl.col, outValZjhsl);
4412
- sheet.setValue(chartExtJson.jsZdgmd.row, chartExtJson.jsZdgmd.col, outValZdgmd);
4378
+ xAxisMax = lineObj1.xAxisMax;
4379
+ if (lineObj2.xAxisMax > xAxisMax) {
4380
+ xAxisMax = lineObj2.xAxisMax;
4381
+ }
4382
+ xAxisMin = lineObj1.xAxisMin;
4383
+ if (lineObj2.xAxisMin < xAxisMin) {
4384
+ xAxisMin = lineObj2.xAxisMin;
4385
+ }
4386
+ yAxisMax = lineObj1.yAxisMax;
4387
+ if (lineObj2.yAxisMax > yAxisMax) {
4388
+ yAxisMax = lineObj2.yAxisMax;
4389
+ }
4390
+ yAxisMin = lineObj1.yAxisMin;
4391
+ if (lineObj2.yAxisMin < yAxisMin) {
4392
+ yAxisMin = lineObj2.yAxisMin;
4393
+ }
4394
+ lineObj1.xData.forEach((item) => {
4395
+ xData.push(item);
4396
+ });
4397
+ lineObj2.xData.forEach((item) => {
4398
+ xData.push(item);
4399
+ });
4400
+ seriesData.push(lineObj1.seriesDataObj);
4401
+ seriesData.push(lineObj2.seriesDataObj);
4402
+ maxPointDataX = (lineObj1.maxPointData[0] + lineObj2.maxPointData[0]) / 2;
4403
+ maxPointDataY = (lineObj1.maxPointData[1] + lineObj2.maxPointData[1]) / 2;
4404
+ // console.log(
4405
+ // "两条线最大点的平均值:",
4406
+ // maxPointDataX,
4407
+ // maxPointDataY
4408
+ // );
4409
+ //默认输出精度
4410
+ let outJdZjhsl = 0.01, outJdZdgmd = 0.001;
4411
+ //顶点数据
4412
+ let outValZjhsl = 0, outValZdgmd = 0;
4413
+ //设置Sheet单元格的值(最佳含水率和最大干密度)
4414
+ if (chartExtJson != null) {
4415
+ // console.log(4444, chartExtJson.jsZjhsl.row, chartExtJson.jsZjhsl.col, arrX[maxIndex]);
4416
+ if (chartExtJson.jsZjhslJd != null && chartExtJson.jsZjhslJd != undefined) {
4417
+ outJdZjhsl = chartExtJson.jsZjhslJd;
4418
+ }
4419
+ if (chartExtJson.jsZdgmdJd != null && chartExtJson.jsZdgmdJd != undefined) {
4420
+ outJdZdgmd = chartExtJson.jsZdgmdJd;
4421
+ }
4422
+ if (maxPointDataX == 0 && maxPointDataY == 0) {
4423
+ sheet.setValue(chartExtJson.jsZjhsl.row, chartExtJson.jsZjhsl.col, '/');
4424
+ sheet.setValue(chartExtJson.jsZdgmd.row, chartExtJson.jsZdgmd.col, '/');
4425
+ }
4426
+ else {
4427
+ outValZjhsl = EChartsUtilsComm.getRound(maxPointDataX, outJdZjhsl);
4428
+ outValZdgmd = EChartsUtilsComm.getRound(maxPointDataY, outJdZdgmd);
4429
+ sheet.setValue(chartExtJson.jsZjhsl.row, chartExtJson.jsZjhsl.col, outValZjhsl);
4430
+ sheet.setValue(chartExtJson.jsZdgmd.row, chartExtJson.jsZdgmd.col, outValZdgmd);
4431
+ }
4413
4432
  }
4414
4433
  }
4415
- }
4416
- //判断数据是否为/,‘’,null,undefined
4417
- let yValIsAllNull = false;
4418
- seriesData.forEach((item) => {
4419
- yValIsAllNull = item.data[0].value.every((ele) => {
4420
- return ele == 0;
4434
+ //判断数据是否为/,‘’,null,undefined
4435
+ let yValIsAllNull = false;
4436
+ seriesData.forEach((item) => {
4437
+ yValIsAllNull = item.data[0].value.every((ele) => {
4438
+ return ele == 0;
4439
+ });
4421
4440
  });
4422
- });
4423
- if (yValIsAllNull) {
4424
- xAxisMin = null;
4425
- xAxisMax = null;
4426
- yAxisMin = null;
4427
- yAxisMax = null;
4428
- seriesData = [];
4429
- }
4430
- let option = {
4431
- grid: {
4432
- // show: true,//是否显示外边框线
4433
- // borderColor: '#f00',//外边框线颜色
4434
- top: 25,
4435
- left: !yValIsAllNull ? 30 : 25,
4436
- right: 10,
4437
- bottom: 20,
4438
- containLabel: true,
4439
- },
4440
- //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip
4441
- tooltip: {
4442
- trigger: 'axis',
4443
- formatter: function (datas, ticket) {
4444
- //console.log(datas," datas")
4445
- return datas && datas.length > 0
4446
- ? datas[0].seriesName + '(' + datas[0].value[0] + ')' + ':' + Number(EChartsUtilsComm.getRound(datas[0].value[1], 0.001))
4447
- : datas[0].data;
4448
- },
4449
- },
4450
- //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title
4451
- title: [
4452
- {
4453
- show: true,
4454
- text: title,
4455
- left: 'center',
4456
- top: 0,
4457
- textStyle: {
4458
- fontSize: 14,
4459
- fontWeight: 'normal',
4441
+ if (yValIsAllNull) {
4442
+ xAxisMin = null;
4443
+ xAxisMax = null;
4444
+ yAxisMin = null;
4445
+ yAxisMax = null;
4446
+ seriesData = [];
4447
+ }
4448
+ let option = {
4449
+ grid: {
4450
+ // show: true,//是否显示外边框线
4451
+ // borderColor: '#f00',//外边框线颜色
4452
+ top: 25,
4453
+ left: !yValIsAllNull ? 30 : 25,
4454
+ right: 10,
4455
+ bottom: 20,
4456
+ containLabel: true,
4457
+ },
4458
+ //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip
4459
+ tooltip: {
4460
+ trigger: 'axis',
4461
+ formatter: function (datas, ticket) {
4462
+ //console.log(datas," datas")
4463
+ return datas && datas.length > 0
4464
+ ? datas[0].seriesName + '(' + datas[0].value[0] + ')' + ':' + Number(EChartsUtilsComm.getRound(datas[0].value[1], 0.001))
4465
+ : datas[0].data;
4460
4466
  },
4461
4467
  },
4462
- {
4463
- show: true,
4464
- text: xName,
4465
- left: 'center',
4466
- bottom: 0,
4467
- textStyle: {
4468
- fontSize: 12,
4469
- fontWeight: 'normal',
4468
+ //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title
4469
+ title: [
4470
+ {
4471
+ show: true,
4472
+ text: title,
4473
+ left: 'center',
4474
+ top: 0,
4475
+ textStyle: {
4476
+ fontSize: 14,
4477
+ fontWeight: 'normal',
4478
+ },
4479
+ },
4480
+ {
4481
+ show: true,
4482
+ text: xName,
4483
+ left: 'center',
4484
+ bottom: 0,
4485
+ textStyle: {
4486
+ fontSize: 12,
4487
+ fontWeight: 'normal',
4488
+ },
4489
+ },
4490
+ ],
4491
+ //图例,参考文档:https://echarts.apache.org/zh/option.html#legend
4492
+ legend: {
4493
+ show: false,
4494
+ left: 'right',
4495
+ data: [legendName],
4496
+ selected: {
4497
+ legendName: true, //显示
4470
4498
  },
4499
+ selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)
4471
4500
  },
4472
- ],
4473
- //图例,参考文档:https://echarts.apache.org/zh/option.html#legend
4474
- legend: {
4475
- show: false,
4476
- left: 'right',
4477
- data: [legendName],
4478
- selected: {
4479
- legendName: true, //显示
4501
+ xAxis: {
4502
+ type: 'value',
4503
+ max: xAxisMax,
4504
+ min: xAxisMin,
4505
+ data: xData,
4506
+ axisTick: {
4507
+ alignWithLabel: true, //使得刻度线和标签对齐
4508
+ },
4509
+ splitLine: { show: true },
4480
4510
  },
4481
- selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)
4482
- },
4483
- xAxis: {
4484
- type: 'value',
4485
- max: xAxisMax,
4486
- min: xAxisMin,
4487
- data: xData,
4488
- axisTick: {
4489
- alignWithLabel: true, //使得刻度线和标签对齐
4511
+ yAxis: [
4512
+ {
4513
+ type: 'value',
4514
+ max: yAxisMax,
4515
+ min: yAxisMin,
4516
+ name: yName,
4517
+ nameGap: !yValIsAllNull ? 40 : 5,
4518
+ nameRotate: 90,
4519
+ nameLocation: 'middle',
4520
+ splitLine: {
4521
+ show: true,
4522
+ lineStyle: {
4523
+ color: '#e0e6f1', //'#e0e6f1',
4524
+ type: 'solid',
4525
+ },
4526
+ },
4527
+ //splitNumber: 10, //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……
4528
+ axisLine: {
4529
+ //设置y轴箭头效果
4530
+ show: true, //y轴默认是不显示的
4531
+ },
4532
+ },
4533
+ ],
4534
+ series: seriesData,
4535
+ };
4536
+ return option;
4537
+ }
4538
+ catch (error) {
4539
+ let option = {
4540
+ grid: {
4541
+ // show: true,//是否显示外边框线
4542
+ // borderColor: '#f00',//外边框线颜色
4543
+ top: 25,
4544
+ left: 25,
4545
+ right: 10,
4546
+ bottom: 20,
4547
+ containLabel: true,
4548
+ },
4549
+ //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip
4550
+ tooltip: {
4551
+ trigger: 'axis',
4552
+ formatter: function (datas, ticket) {
4553
+ //console.log(datas," datas")
4554
+ return datas && datas.length > 0
4555
+ ? datas[0].seriesName + '(' + datas[0].value[0] + ')' + ':' + Number(EChartsUtilsComm.getRound(datas[0].value[1], 0.001))
4556
+ : datas[0].data;
4557
+ },
4490
4558
  },
4491
- splitLine: { show: true },
4492
- },
4493
- yAxis: [
4494
- {
4495
- type: 'value',
4496
- max: yAxisMax,
4497
- min: yAxisMin,
4498
- name: yName,
4499
- nameGap: !yValIsAllNull ? 40 : 5,
4500
- nameRotate: 90,
4501
- nameLocation: 'middle',
4502
- splitLine: {
4559
+ //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title
4560
+ title: [
4561
+ {
4503
4562
  show: true,
4504
- lineStyle: {
4505
- color: '#e0e6f1', //'#e0e6f1',
4506
- type: 'solid',
4563
+ text: title,
4564
+ left: 'center',
4565
+ top: 0,
4566
+ textStyle: {
4567
+ fontSize: 14,
4568
+ fontWeight: 'normal',
4507
4569
  },
4508
4570
  },
4509
- //splitNumber: 10, //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……
4510
- axisLine: {
4511
- //设置y轴箭头效果
4512
- show: true, //y轴默认是不显示的
4571
+ {
4572
+ show: true,
4573
+ text: xName,
4574
+ left: 'center',
4575
+ bottom: 0,
4576
+ textStyle: {
4577
+ fontSize: 12,
4578
+ fontWeight: 'normal',
4579
+ },
4580
+ },
4581
+ ],
4582
+ //图例,参考文档:https://echarts.apache.org/zh/option.html#legend
4583
+ legend: {
4584
+ show: false,
4585
+ left: 'right',
4586
+ data: [legendName],
4587
+ selected: {
4588
+ legendName: true, //显示
4513
4589
  },
4590
+ selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)
4514
4591
  },
4515
- ],
4516
- series: seriesData,
4517
- };
4518
- return option;
4592
+ xAxis: {
4593
+ type: 'value',
4594
+ max: 0,
4595
+ min: 0,
4596
+ data: [],
4597
+ axisTick: {
4598
+ alignWithLabel: true, //使得刻度线和标签对齐
4599
+ },
4600
+ splitLine: { show: true },
4601
+ },
4602
+ yAxis: [
4603
+ {
4604
+ type: 'value',
4605
+ max: 0,
4606
+ min: 0,
4607
+ name: yName,
4608
+ nameGap: 5,
4609
+ nameRotate: 90,
4610
+ nameLocation: 'middle',
4611
+ splitLine: {
4612
+ show: true,
4613
+ lineStyle: {
4614
+ color: '#e0e6f1', //'#e0e6f1',
4615
+ type: 'solid',
4616
+ },
4617
+ },
4618
+ //splitNumber: 10, //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……
4619
+ axisLine: {
4620
+ //设置y轴箭头效果
4621
+ show: true, //y轴默认是不显示的
4622
+ },
4623
+ },
4624
+ ],
4625
+ series: [],
4626
+ };
4627
+ return option;
4628
+ }
4519
4629
  },
4520
4630
  /**
4521
4631
  * 筛分