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

网站无法连接服务器企业邮箱费用

网站无法连接服务器,企业邮箱费用,王串场街网站建设公司,两个男性做网站当画面有自定义的表格或者样式过于复杂的表格时,导出功能可以由前端实现 1. 使用的插件 : sheet.js-xlsx 文档地址:https://docs.sheetjs.com/ 中文地址:https://geekdaxue.co/read/SheetJS-docs-zh/README.md xlsx-style&#…

当画面有自定义的表格或者样式过于复杂的表格时,导出功能可以由前端实现

1. 使用的插件 : sheet.js-xlsx

文档地址:https://docs.sheetjs.com/
中文地址:https://geekdaxue.co/read/SheetJS-docs-zh/README.md
xlsx-style:https://www.npmjs.com/package/xlsx-style
在这里插入图片描述

2. 安装引用

安装插件-vue3

yarn add xlsx 
yarn add xlsx-style-vite (有样式需求才需要安装;背景色等)

引用插件

import * as XLSX from 'xlsx';
import * as XLSX_STYLE from 'xlsx-style-vite'

3. 组件表格的导出(无样式)

以ant design vue 表格为例,只导出表格内容

<a-table :columns="columns" :dataSource="detaildata" :scroll="{ x: 'max-content',y:700 }" ></table?>
<a-button @click="exportData">导出</a-button><script>//数据处理为数组const transData=(columns, tableList)=> {const obj = columns.reduce((acc, cur) => {if (!acc.titles && !acc.keys) {acc.titles = [];acc.keys = [];}acc.titles.push(cur.title);acc.keys.push(cur.dataIndex);return acc;}, {});const tableBody = tableList.map((item,i) => {return obj.keys.map((key,index) => item[key]);});return [ obj.titles, ...tableBody ];}const exportData=()=>{const tableData = transData(columns.value,detaildata.value);// 将数据数组转换为工作表const ws = XLSX.utils.aoa_to_sheet(tableData);// 创建 workbookconst wb = XLSX.utils.book_new();ws['!ref'] = `A1:AI${tableData.length}`;//设置列宽ws["!cols"] = [{wpx: 120}, {wpx: 100},{wpx: 110},{wpx: 110},];//合并单元格ws['!merges'] = [{ s: { r: 0, c: 0 }, e: { r: 0, c: 1 } }]// 将 工作表 添加到 workbookXLSX.utils.book_append_sheet(wb, ws, 'Sheet1');// 将 workbook 写入文件XLSX.writeFile(wb, 'tablename.xlsx');}
</script>

3. 自定义表格的导出 (div拼成的表格)

比如这种前端拼成的,又附带各种样式的表格
在这里插入图片描述
一些常用的格式:
(1):合并单元格
(2):列宽
(3):背景色
(4):字体相关-大小粗细颜色字体等
(5):表格线,边框
详细的格式可以参考:
https://www.jianshu.com/p/869375439fee
https://www.npmjs.com/package/xlsx-style

数据处理就不写了,数据处理为数组就可以了
const toExcel=()=>{const data = [['左上表头','','','右上',''],['标题1','','','',''],['标题','测试合并','','',''],['固定标题','123','123','',''],['左下表头','','','右下',''],['2021','¥28337','测试数据','北京','黑龙江'],......]const worksheet = XLSX.utils.aoa_to_sheet([headers, ...data])const workbook = XLSX.utils.book_new()worksheet['!ref'] = `A1:AI${data.length}`//列宽 按excel的列顺序排列,对应A列,B列, C列......worksheet["!cols"] = [{wpx: 200}, {wpx: 80},{wpx: 80},{wpx: 110}, {wpx: 110},];/* 合并单元格 默认合并当前格的右侧格子{ s: { r: 0, c: 0 }, e: { r: 0, c: 1 } }A1 与 B1 合并 内容为 A1 的内容s:start 合并开始 e:end 合并结束r:row 行 c:col 列 */worksheet['!merges'] = [{ s: { r: 0, c: 0 }, e: { r: 0, c: 1 } },{ s: { r: 0, c: 4 }, e: { r: 0, c: 5 } },{ s: { r: 4, c: 0 }, e: { r: 4, c: 1 } },......];//表格详细样式for (let key in worksheet) {if (key == '!ref' || key == '!merges' || key == '!cols' || key == '!rows') {continue} else {//通过key值来选择筛选想要的设置样式的单元格if (key.substring(1)=='1'||key.substring(1)=='5'|| key == 'A2') {worksheet[key].s = { // 设置单元格样式fill: { // 设置背景色fgColor: { rgb: 'F2F3F7' },},font: { // 设置字体name: '等线', // 字体名称sz: 16, // 字体大小bold: true, // 字体是否加粗color:{ //字体颜色rgb:'ed263d'}},border:{ //设置边框top: {style: 'thin',color:{rgb:'e5e7eb'}},bottom: {style: 'thin',color:{rgb:'e5e7eb'}}},alignment: {horizontal: 'center', // 横向(向左、向右、居中)vertical: 'center', // 纵向(向上、向下、居中)wrapText: true, // 设置单元格自动换行,目前仅对非合并单元格生效indent: 0 // 设置单元格缩进}}}else if(key == 'B1'){......}}}XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1')const tmpDown = new Blob([s2ab(XLSX_STYLE.write(workbook, {bookType: 'xlsx',bookSST: false,type: 'binary',cellStyles: true,})),])downloadExcelFile(tmpDown, 'excelname' + '.xlsx')
}/*用到的方法*/
export function s2ab(s) {if (typeof ArrayBuffer !== 'undefined') {const buf = new ArrayBuffer(s.length)const view = new Uint8Array(buf);for (let i = 0; i != s.length; ++i) {view[i] = s.charCodeAt(i) & 0xff}return buf} else {const buf = new Array(s.length)for (let i = 0; i != s.length; ++i) {buf[i] = s.charCodeAt(i) & 0xff}return buf}
}/*** 使用 a 标签下载文件*/
export function downloadExcelFile(obj, fileName){const a_node = document.createElement('a')a_node.download = fileNameif ('msSaveOrOpenBlob' in navigator) {window.navigator.msSaveOrOpenBlob(obj, fileName)} else {a_node.href = URL.createObjectURL(obj)}a_node.click()setTimeout(() => {URL.revokeObjectURL(obj)}, 2000)
}

参考文章:https://blog.csdn.net/Cai181191/article/details/131130926

http://www.yayakq.cn/news/255902/

相关文章:

  • 营销网站建设一薇建网站需要什么设计专业
  • 企业网站的建设的功能定位wordpress单本小说采集
  • 安徽网站开发推荐华为wordpress
  • 怎么选择手机网站建设医院网站建设需求分析调研表
  • 方太网站谁做的青岛科技网站建设
  • 陕西公司网站建设三端网站如何做
  • 在线音乐网站开发php网站的 联系我们怎么做
  • 郑州网站建设如何wordpress 去掉标题
  • 设计兼职网站网站系统升级建设合同
  • 学习建网站杭州网站建设找思创
  • 受欢迎的常州做网站扬州做网站的网络公司
  • 石碣做网站想学app开发哪里有培训班
  • 建网站需要哪些条件网站建设与管理出来工资
  • 不良网站浏览窗口如何创建自己的域名
  • 昆明网站建设流程安卓wordpress客户端
  • 平台网站建设制作狂人采集器wordpress
  • 深圳建站公司专业公司重庆好玩的地方
  • 在线代理浏览国外网站公司的官网建设
  • 上海网站建站建设网络营销策略有哪些
  • 唐山网站建设培训360建站
  • 网站的开发平台临海网站开发公司
  • 做网站运营有提成吗上市公司seo是什么意思
  • 临沂中文网站建设wordpress 推送
  • mui 网站开发2021年4月重大新闻事件摘抄
  • 网站设计 价格wordpress添加留言板
  • 淘乐惠网站怎么做微网站开发提供的服务器
  • 51zwd做网站网站建设公司哪家好 都来磐石网络
  • 哪家网站建设网站建设与管理技术发展
  • 网站后台管理代码企业网站如何做
  • 衡阳网站网站建设有没有专门做ppt的网站吗