当前位置: 首页 > wzjs >正文

现在外贸做那个网站好莆田网站建设优化

现在外贸做那个网站好,莆田网站建设优化,学做名片的网站,amh wordpress 404Vue3 Vite TS,使用 ExcelJS导出excel文档,生成水印,添加背景水印,dom转图片,插入图片,全部代码 ExcelJS生成文档并导出导出表头其他函数 生成水印设置文档的背景水印dom 转图片插入图片全部代码 ExcelJS 读取&#…

Vue3 + Vite + TS,使用 ExcelJS导出excel文档,生成水印,添加背景水印,dom转图片,插入图片,全部代码

  • ExcelJS
    • 生成文档并导出
      • 导出表头其他函数
    • 生成水印
    • 设置文档的背景水印
    • dom 转图片
    • 插入图片
    • 全部代码

ExcelJS

读取,操作并写入电子表格数据和样式到 XLSX 和 JSON 文件。
一个 Excel 电子表格文件逆向工程项目。
exceljs 中文API 传送门

生成文档并导出

import * as ExcelJS from "exceljs";// 创建文档对象
const workbook = new ExcelJS.Workbook();
// 创建工作本
const worksheet = workbook.addWorksheet('Sheet 1');
// 冻结表头
worksheet.views = [{state: 'frozen', // 可以设置为 'frozen' 来固定首行或首列,模拟滚动条效果xSplit: 0, // 从第二列开始冻结(模拟滚动条效果)ySplit: 9, // 从第二行开始冻结(模拟滚动条效果)topLeftCell: 'A1' // 设置起始位置为 B2,模拟滚动效果从第二行第二列开始
}];
// 1. 构建表头结构
const headerDepth = buildHeaders(filterColumns,7);
// 递归生成表头行
generateHeaderRows(worksheet,headerDepth,filterColumns,7);
// 2. 填充数据
// salesTable.value.tableData.forEach(item => {
//     worksheet.addRows(item);
// })
// 触发下载
const buffer = await workbook.xlsx.writeBuffer();
const blob = new Blob([buffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
const link = document.createElement('a');
link.href = URL.createObjectURL(blob);
link.download = name+'.xlsx';
link.click();

导出表头其他函数

// 递归生成表头行
export const generateHeaderRows = (worksheet:Worksheet,headerDepth:number,cols:tableColumn[], currentRow = 0, startCol = 0) => {cols.forEach(col => {const cell = {header: col.label,key: col.dataIndex,width: col.minWidth?parseInt(col.minWidth)/8 : 20,colSpan: col.childrens ? col.childrens.length : 1,rowSpan: col.childrens ? 1 : headerDepth - currentRow + 1};const tempCell = worksheet.getCell(currentRow + 1, startCol + 1);// 设置单元格文案tempCell.value = col.label;// 设置单元格字体与大小tempCell.font = { name: 'Arial', size: 10 }// 设置列宽度worksheet.getColumn(startCol+1).width = cell.width;// 设置行高worksheet.getRow(currentRow+1).height = 20;// 合并单元格worksheet.mergeCells(currentRow + 1,startCol + 1,currentRow + (cell.rowSpan || currentRow+1), startCol + (cell.colSpan || 1));// 有子级递归if (col.childrens) {generateHeaderRows(worksheet,headerDepth,col.childrens, currentRow + 1, startCol);}startCol += cell.colSpan;});
}// 递归处理表头层级
export const buildHeaders = (columns:tableColumn[], depth = 0, parentSpan = 0) => {let maxDepth = depth;columns.forEach((col:tableColumn) => {if (col.childrens) {const childDepth = buildHeaders(col.childrens, depth + 1, parentSpan + (col.colSpan|| 0));maxDepth = Math.max(maxDepth, childDepth);}});return maxDepth;
};

生成水印

export const createWatermark = () => {// 创建 Canvas 元素并绘制水印const canvas = document.createElement('canvas');const context:CanvasRenderingContext2D | null  = canvas.getContext('2d');canvas.width = 500;canvas.height = 200;context?context.font = '14px Arial':'';// 旋转角度context?context.rotate(-25 * Math.PI / 180):'';// 设置文本内容的当前对齐方式context?context.textAlign = 'center':'';context?context.fillStyle = 'rgba(0, 0, 0, 0.1)':''; // 半透明水印context?context.fillText('midea', canvas.width / 2 - 100, canvas.height / 2):'';// 将 Canvas 转换为图片数据 URLreturn canvas.toDataURL('image/png');
}

设置文档的背景水印

// 将 Canvas 水印 转换为图片数据 URL
const imageDataUrl = createWatermark();
// 添加图片到工作簿中
const imageId = workbook.addImage({base64: imageDataUrl.replace(/^data:image\/[a-z]+;base64,/, ''),extension: 'png',
});
// 设置文档水印
worksheet.addBackgroundImage(imageId)

dom 转图片

import domToImage from 'dom-to-image';// 把查询条件转为图片
domToImage.toPng(captureRef.value).then(async (dataUrl) => {const image = new Image();image.src = dataUrl;})
.catch(function (error) {console.error('Failed to generate image:', error);
});

插入图片

const imageId2 = workbook.addImage({ base64: dataUrl, extension: 'png' });
// 工作本插入查询条件图片
worksheet.addImage(imageId2, {tl: { col: 0, row: 0 },ext: { width: 1900 / 1.3, height: 800 / 6 }
});

全部代码


// 递归生成表头行
export const generateHeaderRows = (worksheet:Worksheet,headerDepth:number,cols:tableColumn[], currentRow = 0, startCol = 0) => {cols.forEach(col => {const cell = {header: col.label,key: col.dataIndex,width: col.minWidth?parseInt(col.minWidth)/8 : 20,colSpan: col.childrens ? col.childrens.length : 1,rowSpan: col.childrens ? 1 : headerDepth - currentRow + 1};const tempCell = worksheet.getCell(currentRow + 1, startCol + 1);// 设置单元格文案tempCell.value = col.label;// 设置单元格字体与大小tempCell.font = { name: 'Arial', size: 10 }// 设置列宽度worksheet.getColumn(startCol+1).width = cell.width;// 设置行高worksheet.getRow(currentRow+1).height = 20;// 合并单元格worksheet.mergeCells(currentRow + 1,startCol + 1,currentRow + (cell.rowSpan || currentRow+1), startCol + (cell.colSpan || 1));// 有子级递归if (col.childrens) {generateHeaderRows(worksheet,headerDepth,col.childrens, currentRow + 1, startCol);}startCol += cell.colSpan;});
}// 递归处理表头层级
export const buildHeaders = (columns:tableColumn[], depth = 0, parentSpan = 0) => {let maxDepth = depth;columns.forEach((col:tableColumn) => {if (col.childrens) {const childDepth = buildHeaders(col.childrens, depth + 1, parentSpan + (col.colSpan|| 0));maxDepth = Math.max(maxDepth, childDepth);}});return maxDepth;
};
export const createWatermark = () => {// 创建 Canvas 元素并绘制水印const canvas = document.createElement('canvas');const context:CanvasRenderingContext2D | null  = canvas.getContext('2d');canvas.width = 500;canvas.height = 200;context?context.font = '14px Arial':'';// 旋转角度context?context.rotate(-25 * Math.PI / 180):'';// 设置文本内容的当前对齐方式context?context.textAlign = 'center':'';context?context.fillStyle = 'rgba(0, 0, 0, 0.1)':''; // 半透明水印context?context.fillText('midea', canvas.width / 2 - 100, canvas.height / 2):'';// 将 Canvas 转换为图片数据 URLreturn canvas.toDataURL('image/png');
}// 点击下载const downLoadList = () => {// 创建文档对象const workbook = new ExcelJS.Workbook();// 创建工作本const worksheet = workbook.addWorksheet('Sheet 1');// 冻结表头worksheet.views = [{state: 'frozen', // 可以设置为 'frozen' 来固定首行或首列,模拟滚动条效果xSplit: 0, // 从第二列开始冻结(模拟滚动条效果)ySplit: 9, // 从第二行开始冻结(模拟滚动条效果)topLeftCell: 'A1' // 设置起始位置为 B2,模拟滚动效果从第二行第二列开始}];// 1. 构建表头结构const headerDepth = buildHeaders(filterColumns,7);// 递归生成表头行generateHeaderRows(worksheet,headerDepth,filterColumns,7);emit('downLoadList',workbook,worksheet);}const downLoadListFn = async (workbook:Workbook,worksheet:Worksheet,name:string) => {// 把查询条件转为图片domToImage.toPng(captureRef.value).then(async (dataUrl) => {const image = new Image();image.src = dataUrl;const imageId2 = workbook.addImage({ base64: dataUrl, extension: 'png' });// 工作本插入查询条件图片worksheet.addImage(imageId2, {tl: { col: 0, row: 0 },ext: { width: 1900 / 1.3, height: 800 / 6 }});// 2. 填充数据// salesTable.value.tableData.forEach(item => {//     worksheet.addRows(item);// })// 将 Canvas 水印 转换为图片数据 URLconst imageDataUrl = createWatermark();// 添加图片到工作簿中const imageId = workbook.addImage({base64: imageDataUrl.replace(/^data:image\/[a-z]+;base64,/, ''),extension: 'png',});// 设置文档水印worksheet.addBackgroundImage(imageId)// 触发下载const buffer = await workbook.xlsx.writeBuffer();const blob = new Blob([buffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });const link = document.createElement('a');link.href = URL.createObjectURL(blob);link.download = name+'.xlsx';link.click();}).catch(function (error) {console.error('Failed to generate image:', error);});}
http://www.dtcms.com/wzjs/387143.html

相关文章:

  • 电商网站建设期末考试最成功的网络营销案例
  • 西安做公司网站的公司万能搜索 引擎
  • 深圳市保障性住房官网外贸网站优化
  • 做最好最全的命理网站企业推广平台排行榜
  • 网红营销平台seo任务平台
  • 网站怎么做响应式中央新闻联播
  • 美妆网站模版企业seo优化服务
  • 网站视频主持人怎么做游戏推广员骗局
  • ppt链接网站怎么做的免费网站开发平台
  • 定制级高端网站建设百度网站名称和网址
  • 网站美工切图是如何做的其中包括
  • 你注册过哪些网站官网最有吸引力的营销模式
  • wordpress微信登录插件免费关键词优化举例
  • php做网站的好处传播易广告投放平台
  • 广州网站建设 致茂石家庄seo外包的公司
  • 近期国内外重大新闻10条百度关键词优化词精灵
  • 西安网站开发招聘如何进行网络推广和宣传
  • 万网 网站建设方案书范文搜索引擎平台有哪些
  • 网站开发哪种语言比较好资源猫
  • 湖南营销类网站设计网站关键词公司
  • wordpress 主题骨架seo百度推广
  • 网站运营推广主要做什么的重庆森林粤语完整版在线观看免费
  • 温州网站建设公司有哪些游戏推广平台代理
  • 网站建设为了什么seo需要什么技术
  • 网站建设工作方案范文一站式软文发布推广平台
  • 榆林市行政效能建设网站中国十大公关公司排名
  • 擼擼擼做最好的导航网站网络推广软件
  • 做网站成都成都网多多
  • 用ps怎么做网站导航条金蝶进销存免费版
  • 高端品牌女装特价网seo快速推广