/** 图表转换为图片 */ function convertChart(luckyData) { const optionData = luckysheet.getLuckysheetfile()[0] let { visibledatacolumn, // 所有行的位置 visibledatarow // 所有列的位置 } = optionData // 动态图表 if (luckyData.charts && luckyData.charts.length > 0) { luckyData.charts.forEach((chart, i) => { let myChart = echarts.init( document.getElementsByClassName(chart.info.className)[0] ) let baseData = myChart.getConnectedDataURL({ type: 'png', pixelRatio: 2, backgroundColor: '#ffffff' }) // luckysheet.cancelRangeMerge(chart.info.pos) luckysheet.insertImage(baseData, { rowIndex: chart.info.pos[0], colIndex: chart.info.pos[1], cellSize: this.getCellSize(optionData, chart.info.pos[0], chart.info.pos[1], luckysheet), success: function() { console.log("插入成功") } }) }) } // 静态图表 if (luckyData.data && luckyData.data.length > 0) { luckyData.data.forEach((data, i) => { if (data.chart && data.chart.length > 0) { data.chart.forEach((chart, j) => { let myChart = echarts.init( document.getElementById(chart.chart_id) ) myChart.setOption(chart.chartOptions); let baseData = myChart.getConnectedDataURL({ type: 'png', pixelRatio: 2, backgroundColor: '#ffffff' }) let col_st = getImagePosition(chart.left, visibledatacolumn) let row_st = getImagePosition(chart.top, visibledatarow) luckysheet.insertImage(baseData, { rowIndex: parseInt(row_st), colIndex: parseInt(col_st), cellSize: { w: chart.width, h: chart.height, }, success: function() { console.log("插入成功") } }) }) } }) } } /** 获取图片位置 */ function getImagePosition(num, arr) { let index = 0 let minIndex let maxIndex for (let i = 0; i < arr.length; i++) { if (num < arr[i]) { index = i break } } if (index == 0) { minIndex = 0 maxIndex = 1 } else if (index == arr.length - 1) { minIndex = arr.length - 2 maxIndex = arr.length - 1 } else { minIndex = index - 1 maxIndex = index } let min = arr[minIndex] let max = arr[maxIndex] let radio = Math.abs((num - min) / (max - min)) + index return radio }