canvertChart.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. /** 图表转换为图片 */
  2. function convertChart(luckyData) {
  3. const optionData = luckysheet.getLuckysheetfile()[0]
  4. let {
  5. visibledatacolumn, // 所有行的位置
  6. visibledatarow // 所有列的位置
  7. } = optionData
  8. // 动态图表
  9. if (luckyData.charts && luckyData.charts.length > 0) {
  10. luckyData.charts.forEach((chart, i) => {
  11. let myChart = echarts.init(
  12. document.getElementsByClassName(chart.info.className)[0]
  13. )
  14. let baseData = myChart.getConnectedDataURL({
  15. type: 'png',
  16. pixelRatio: 2,
  17. backgroundColor: '#ffffff'
  18. })
  19. // luckysheet.cancelRangeMerge(chart.info.pos)
  20. luckysheet.insertImage(baseData, {
  21. rowIndex: chart.info.pos[0],
  22. colIndex: chart.info.pos[1],
  23. cellSize: this.getCellSize(optionData, chart.info.pos[0], chart.info.pos[1],
  24. luckysheet),
  25. success: function() {
  26. console.log("插入成功")
  27. }
  28. })
  29. })
  30. }
  31. // 静态图表
  32. if (luckyData.data && luckyData.data.length > 0) {
  33. luckyData.data.forEach((data, i) => {
  34. if (data.chart && data.chart.length > 0) {
  35. data.chart.forEach((chart, j) => {
  36. let myChart = echarts.init(
  37. document.getElementById(chart.chart_id)
  38. )
  39. myChart.setOption(chart.chartOptions);
  40. let baseData = myChart.getConnectedDataURL({
  41. type: 'png',
  42. pixelRatio: 2,
  43. backgroundColor: '#ffffff'
  44. })
  45. let col_st = getImagePosition(chart.left, visibledatacolumn)
  46. let row_st = getImagePosition(chart.top, visibledatarow)
  47. luckysheet.insertImage(baseData, {
  48. rowIndex: parseInt(row_st),
  49. colIndex: parseInt(col_st),
  50. cellSize: {
  51. w: chart.width,
  52. h: chart.height,
  53. },
  54. success: function() {
  55. console.log("插入成功")
  56. }
  57. })
  58. })
  59. }
  60. })
  61. }
  62. }
  63. /** 获取图片位置 */
  64. function getImagePosition(num, arr) {
  65. let index = 0
  66. let minIndex
  67. let maxIndex
  68. for (let i = 0; i < arr.length; i++) {
  69. if (num < arr[i]) {
  70. index = i
  71. break
  72. }
  73. }
  74. if (index == 0) {
  75. minIndex = 0
  76. maxIndex = 1
  77. } else if (index == arr.length - 1) {
  78. minIndex = arr.length - 2
  79. maxIndex = arr.length - 1
  80. } else {
  81. minIndex = index - 1
  82. maxIndex = index
  83. }
  84. let min = arr[minIndex]
  85. let max = arr[maxIndex]
  86. let radio = Math.abs((num - min) / (max - min)) + index
  87. return radio
  88. }