JS-页面数据下载为Excel并在Excel中插入图片+在图片中进行绘制

这个用到的是 exceljs 库,首先是下载

npm install exceljs --save
import * as ExcelJS from “exceljs”;

两个方法

function exportExcel() {
  // 定义数据
  let data = [
    ['1', '2', '3', '4', '5', '6', '7' ],
    ['1-1', '1-2', '1-3', '1-4', '1-5', '1-6', '1-7'],
    ['2-1', '2-2', '2-3', '2-4', '2-5', '2-6', '2-7']
  ];
  // 创建Excel工作簿
  const workbook:any = new ExcelJS.Workbook();
  // 创建工作表
  const worksheet = workbook.addWorksheet("sheet1"); // sheet名
  // 设置列宽
  worksheet.columns = [
    { width: 20 },
    { width: 40 },
    { width: 20 },
    { width: 20 },
    { width: 20 },
    { width: 20 },
    { width: 30 }
  ];
  // 设置数据行
  for (let i = 0; i < data.length; i++) {
    const row = worksheet.addRow(data[i]);
    // 设置行高
    row.height = 30;
    // 设置样式
    row.alignment = { vertical: "middle", horizontal: "center" };
  }
  // 将图片转换为base64 图片地址 = './img/img.png' 类似这样
  const base64Image = await urlToBase64('这里是图片地址');
  // 插入图片
  const signImage = workbook.addImage({
    base64: base64Image,
    extension: "png",
  });
  // 这里是设置图片位置
  worksheet.addImage(signImage, `G${data.length}:G${data.length}`);
  // 将Excel文件写入文件或导出
  // 下面这个是官网提供的方案但是会报错,经过多方查找我发现用下面这个方法即可
  // workbook.xlsx.writeFile('MyExcel.xlsx');
  workbook.xlsx.writeBuffer()
    .then((buffer: any) => FileSaver.saveAs(new Blob([buffer]), `${Date.now()}.xlsx`))
    .catch((err: any) => console.log('Error writing excel export', err));
}

urlToBase64方法

function urlToBase64(url: any) {
  return new Promise((resolve, reject) => {
    let canvas:any = document.createElement('canvas');
    let ctx = canvas.getContext('2d');
    let img = new Image();
    // 设置这里是防止 toDataURL时 跨域报错
    img.setAttribute('crossOrigin', 'anonymous');
    // 防止缓存
    img.src = url + '&time=' + new Date().valueOf();
    img.onload = function() {
      canvas.height = img.height;
      canvas.width = img.width;
	 // 这里就是我们实现在图片上绘制图形的地方 
      ctx.moveTo(100, 100);
      ctx.lineTo(100, 200);
      ctx.lineTo(200, 200);
      ctx.strokeStyle = "#f00";
      ctx.lineWidth = 10;
      ctx.stroke();
      ctx.beginPath();

      ctx.drawImage(img, 0, 0);
      let dataURL = canvas.toDataURL('image/png');
      resolve(dataURL);
      canvas = null;
    }
  });
}

执行exportExcel() 函数后的效果,下面这个是生成的图片,可以看出已经在图片上实现了绘制
在这里插入图片描述

这个是下载的效果
在这里插入图片描述
如果我写到这里就结束了,我想大部分看了这篇文章的朋友都会骂我,这也是我搜了大量文章后的感想,大量的同志们写博文,都太随意了 主打一个自己能看懂,这里其实有多个大坑

1、就是定义数据时的 data ,很多文章直接就在函数中 this.data 用这个变量,我简直了,鬼知道里面是什么格式,我还得看官网一通查,怕一上来就挨骂,我就直接写出来了
2、workbook.xlsx.writeFile这个官网方法会报错,不能使用

Uncaught (in promise) TypeError: u.createWriteStream is not a function
在这里插入图片描述

3、我想各位复制完代码后会发现 FileSaver.saveAs 是个啥玩意,这也是我在查第二个问题时遇到的最恶心的一点,这是个什么玩意,直接就用了 也没说哪来的,自己写的还是引用的,于是又折腾了半天,哎,所以希望大家以后写博文还是善良一些,多想想别人怎么用,最好就是复制粘贴然后直接就能跑出结果,否则就别写
说了这么多我还是赶紧放出答案吧
FileSaver.saveAs 哪来的呢

npm install file-saver --save
import * as FileSaver from ‘file-saver’;

多方踩坑,这样下载excel,插入图片,在图片中绘制,就算完成了,实属不易,还望点赞,多谢!

最后附加一个 workbook.addImage 的多个方法,本文中使用的base64是因为需要添加绘制,其实还有两个可选择,大家可以根据实际情况,自行选取

// add image to workbook by filename
const imageId1 = workbook.addImage({
  filename: 'path/to/image.jpg',
  extension: 'jpeg',
});

// add image to workbook by buffer
const imageId2 = workbook.addImage({
  buffer: fs.readFileSync('path/to.image.png'),
  extension: 'png',
});
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用以下步骤在 Matlab Excel 数据按行拆分并绘制坐标图: 1. 在 Matlab 导入 Excel 文件,可以使用 `xlsread` 函数。 2. 读取 Excel 文件数据,并将其存储为一个矩阵。 3. 使用 `strsplit` 函数将每行数据按分隔符进行拆分,并将其存储为一个单元格数组。 4. 将单元格数组转换为数字数组,并将其存储为一个矩阵。 5. 使用 `plot` 函数绘制坐标图。 以下是一个示例代码,假设你的 Excel 文件名为 `data.xlsx`,其数据以逗号作为分隔符: ```matlab % 导入 Excel 文件 [num,txt,raw] = xlsread('data.xlsx'); % 将数据存储为矩阵 data = num(:, 1:end); % 将每行数据按逗号分隔并存储为单元格数组 splitData = cell(size(data)); for i = 1:size(data, 1) splitData{i, :} = strsplit(txt{i+1, 1}, ','); end % 将单元格数组转换为数字数组,并存储为矩阵 splitData = cellfun(@str2double, splitData, 'UniformOutput', false); splitData = cell2mat(splitData); % 绘制坐标图 plot(splitData(:, 1), splitData(:, 2), 'o-'); xlabel('x轴'); ylabel('y轴'); title('坐标图'); ``` 注意,上述代码 `txt` 变量是用于存储 Excel 文件的文本数据的,因此需要将其与数字数据区分开来。在示例代码,我们假设文本数据位于 Excel 文件的第一列,并且使用 `strsplit` 函数按逗号拆分每一行数据。如果你的 Excel 文件数据以其他分隔符分隔,请将 `strsplit` 函数的参数相应地进行更改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值