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;
}