js中使用jszip实现excel导入

js中使用jszip实现excel中当有文件或者图片时不能被导入

function readWorkbookFromLocalFile(file, callback) {
    var reader = new FileReader();
    // 使用JSZip解析Excel文件
    reader.onload = function (e) {
        const data = new Uint8Array(e.target.result);
        const zip = new JSZip();

        zip.loadAsync(data).then(function (zip) {
            // 遍历zip文件中的所有文件
            var containsImageOrFile = false;
            Object.keys(zip.files).forEach(function (filename) {
                if (filename.startsWith("xl/media/")) {
                    containsImageOrFile = true;
                    return;
                }
            });

            if (containsImageOrFile) {
                ShowMsg("此excel包含图片或文件!!");
                return;
            } else {
                // 如果没有包含图片或文件,则使用XLSX库读取Excel文件
                var workbookReader = new FileReader();
                workbookReader.onload = function (e) {
                    var data = e.target.result;
                    var workbook = XLSX.read(data, { type: 'binary' });
                    if (callback) callback(workbook);
                };
                workbookReader.readAsBinaryString(file);
            }
           
        });
    };
    reader.readAsArrayBuffer(file);
}

$(".btn_import").click(function () {//导入
        var userid = $.session.get('userId');
        $.ajax({
            type: "post",
            url: "",
            data: JSON.stringify({ 'userid': userid }),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            traditional: true,
            success: function (data) {
                var tempData = eval(data.d);
                if (tempData[0].rows == 'NoData') {
                    ShowMsg("您沒有此权限");
                    return;
                }
                document.getElementById('fileParams').addEventListener('change', function (e) {
                    var files = e.target.files;
                    if (files.length == 0) return;
                    var f = files[0];
                    if (!(/\.xlsx$/g.test(f.name) || /\.xls$/g.test(f.name))) {
                        alert('仅支持读取xlsx,xls格式!');
                        return;
                    }
                    readWorkbookFromLocalFile(f, function (workbook) {
                        paramsOverview(workbook);
                    });
                    document.getElementById('fileParams').value = '';
                });
                document.getElementById('fileParams').click();
            },
            error: function (t1, t2, t3) {
                var m = t1 + t2 + t3;
                alert(m);
            }
        });
});

function paramsOverview(workbook) {
    var sheetNames = workbook.SheetNames; // 工作表名称集合
    var worksheet = workbook.Sheets[sheetNames[0]]; // 这里我们只读取第一张sheet
    worksheet['A'] = { t: 's', v: '' };
    var csv = XLSX.utils.sheet_to_csv(worksheet);
    var lines = csv.split('\n');
    lines = lines.map(row => splitCSVLine(row));
    csv = lines.join('\n');
    document.getElementById('ContentDiv1').innerHTML = csv2table(csv);
    /*$('#ContentDiv').addClass('hidden');
    $('#ContentDiv1').removeClass('hidden');
    rReportTable.clear().draw();*/
    $('#ContentDiv1>table').attr('id', 'hisRecords1');
    $('#ContentDiv1>table').attr('class', 'reList  row-border');
    $('#ContentDiv1>table>tbody').attr('id', 'handleHistory1');

    $('#handleHistory1').children('tr:nth-child(1)').remove();

    planTb = $('#hisRecords1').DataTable({
        searching: false, // 隐藏搜索框
        lengthChange: false, // 隐藏每页显示条数选项
        destroy: true,
        'info': true,
        'fixedHeader': true,
        'scrollY': "300px",
        columns: [
                        { title: "序号" },
                        { title: "title1" },
                        { title: "title2" },
                        { title: "title3" },
                        { title: "title4" },
                        { title: "title5" },
        ],
        language: {
            url: '../../css/DataTables-1.13.6/zh-Traditional.json',
        },
        'autoWidth': true,
    });
    $('.alarmImportpop').toggleClass('block');
}

function splitCSVLine(line) {//进行行过滤只要前几列
    var regex = /,(?=(?:(?:[^"]*"){2})*[^"]*$)/;
    var columns = line.split(regex);
    columns = columns.map(item => item.replace(',', ',').replace('\"', '').replace('\"', ''));
    var slicedColumns = columns.slice(0, 6);
    return slicedColumns.join(',');
}

// 将csv转换成表格
function csv2table(csv)
{
    var html = '<table>';
    var rows = csv.split('\n');
    var len = rows.length;
    rows.pop(); // 最后一行没用的
    rows.forEach(function(row, idx) {
        var columns = row.split(',');
        //columns.unshift(idx+1); // 添加行索引取消第一列
      if (idx != 0) {
            html += '<tr>';
            columns.forEach(function(column) {
                html += '<td>'+column+'</td>';
            });
            html += '</tr>';
        }

    });
    html += '</table>';
    return html;
}

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值