JS(十四)前端导出表格和echats图形到excel

本文介绍了在前端使用JavaScript技术将网页中的表格数据和Echarts图表导出为Excel文件的方法,解决可能出现的字符转换问题。
import $ from 'jquery';
import echarts from 'echarts';
import store from '../../store';
import moment from 'moment';
import { getQueryString, NumberFormat, convertThousands } from '../../utils/commonLib';

export const exportExcel = (fName) => {
    let $container = document.querySelectorAll('.echarts-for-react');
    saveFile($container, fName);
}

const findS3 = (tData, index, s3) => {
    let res = '';
    if (!s3 && s3 !== 0) {
        for (let j = index, l = index + 28; j < l; ++j) {
            if (tData[j].v && tData[j].v.S3) {
                res = tData[j].v.S3;
                break;
            }
        }
    }
    return res;
}

const saveFile = function ($el, fileName) {
    let urlObject = window.URL || window.webkitURL || window;
    let exportBlob = new Blob([excelTemplate($el, fileName)]);
    let saveLink = document.createElementNS("http://www.w3.org/1999/xhtml", "a");
    saveLink.href = urlObject.createObjectURL(exportBlob);
    saveLink.download = fileName.toUpperCase() + '.xls';
    let ev = document.createEvent("MouseEvents");
    ev.initMouseEvent("click", true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
    saveLink.dispatchEvent(ev);
    urlObject.revokeObjectURL(saveLink.href);
}

const excelTemplate = (tagArr, fileName) => {
    let sheetsInfo = "",
        sheetsDate = "",
        picsDate = "";
    Array.from(tagArr).map((value, index) => {
        let table, sheetname;
        if (value.tagName === 'TABLE') {
            // if ($('.w-tabs-tabpane-active').length == 0) {
            //     sheetname = $('.w-table-title').text();
            //     if (!sheetname) {
            //         sheetname = fileName;
            //     }
            // } else {
            //     sheetname = $('.w-tabs-tab-active span').text()
            // }
            // table = value.outerHTML.replace(/=/g, '=3D').replace(/null/g, '');

        } else {
            const option = getChartData(value, fileName);
            const canvas = value.getElementsByTagName('canvas')[0];
            table = getChartTable(option, index).outerHTML.replace(/=/g, '=3D').replace(/null/g, '');
            option.title = fileName;
            if (option.title) {
                sheetname = option.title;
            } else {
                sheetname = document.getElementsByClassName('w-card-head-title')[0].textContent + index;
            }
            let picInfo = value.getElementsByTagName('canvas')[0].toDataURL(['image/png', 1]).slice(22);
            let picDate = '\r\n' +
                '\r\n------WIND----' +
                '\r\nContent-Transfer-Encoding: base64' +
                '\r\nContent-Location: file:///C:/MimeExcel/picture' + index +
                '\r\nContent-Type: image/png' +
                '\r\n' +
                '\r\n' + picInfo;
            picsDate = picsDate + picDate;
        }
        // 单页头信息
        let sheetInfo = '\r\n<x:ExcelWorksheet>' +
            '\r\
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fullstack_lth

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值