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