读取日期为new Date()格式
Tue May 18 2021 11:10:17 GMT+0800 (中国标准时间)
//非IE的xlsx文件的单元格日期原始值会少43秒或44秒
//读取Excel数据
function getExcelData(file, callback) {
var reader = new FileReader();
var isIE = false;
var isXls = false;
//IE
if (window.ActiveXObject || "ActiveXObject" in window) {
isIE = true;
}
//xls文件
if (file.name.substr((file.name.lastIndexOf('.')) + 1) == 'xls') {
isXls = true;
}
//文件加载完成后调用
reader.onload = function (e) {
var data = e.target.result;
//type为buffer时,IE浏览器不兼容xls
//var workbook = XLSX.read(data, {
// type: 'buffer'
//});
//兼容IE,需把type改为binary,并对data进行转化
var workbook = XLSX.read(arrayBufferToBinaryString(data), {
type: 'binary'
, cellDates: true //new Date()格式-->Tue May 18 2021 14:16:52 GMT+0800 (中国标准时间)
, cellText: false //不生成w
});
var sheet1 = workbook.Sheets[workbook.SheetNames[0]];
var sheet1Keys = Object.keys(sheet1);
//修正非IE的日期类型数据
for (var i = 0; i < sheet1Keys.length; i++) {
//单元格
var cell = sheet1[sheet1Keys[i]];
//类型为日期的单元格
if (cell.t && cell.t == 'd' && !isIE && !isXls) {
//非IE的xlsx文件的单元格日期原始值会少43秒,需要加上43秒
cell.v.setSeconds(cell.v.getSeconds() + 43);
}
}
//获取json格式的Excel数据
var jsonData = XLSX.utils.sheet_to_json(sheet1, {
defval: null //单元格为空时的默认值
});
console.log(jsonData);
};
//加载文件
reader.readAsArrayBuffer(file);
}
//ArrayBuffer转BinaryString转BinaryString
function arrayBufferToBinaryString(data) {
var o = "",
l = 0,
w = 10240;
for (; l < data.byteLength / w; ++l) o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w, l * w + w)));
o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w)));
return o;
}
读取日期为指定格式
//读取Excel数据
function getExcelData(file, callback) {
var reader = new FileReader();
//文件加载完成后调用
reader.onload = function (e) {
var data = e.target.result;
var workbook = XLSX.read(data, {
type: 'buffer'
, cellDates: true
, cellText: false
});
//获取json格式的Excel数据
var jsonData = XLSX.utils.sheet_to_json(workbook.Sheets[workbook.SheetNames[0]], {
defval: 'null' //单元格为空时的默认值
, raw: false
, dateNF: 'yyyy-mm-dd'
});
};
//加载文件
reader.readAsArrayBuffer(file);
}
读取日期为原有格式(建议使用这种~)
var CellsData; //符合Cells格式的数据
//读取Excel数据
function getExcelData(file, callback) {
var reader = new FileReader();
var isIE = false;
var isXls = false;
//IE
if (window.ActiveXObject || "ActiveXObject" in window) {
isIE = true;
}
//xls文件
if (file.name.substr((file.name.lastIndexOf('.')) + 1) == 'xls') {
isXls = true;
}
//文件加载完成后调用
reader.onload = function (e) {
var data = e.target.result;
//type为buffer时,IE浏览器不兼容xls
//var workbook = XLSX.read(data, {
// type: 'buffer'
//});
//兼容IE,需把type改为binary,并对data进行转化
var workbook = XLSX.read(arrayBufferToBinaryString(data), {
type: 'binary'
, cellDates: true
, cellText: false
});
var sheet1 = workbook.Sheets[workbook.SheetNames[0]];
var sheet1Keys = Object.keys(sheet1);
var dateFormate = 'yyyy-MM-dd';
console.log(sheet1);
//修正非IE的日期类型数据
for (var i = 0; i < sheet1Keys.length; i++) {
//单元格
var cell = sheet1[sheet1Keys[i]];
//类型为日期的单元格
if (cell.t && cell.t == 'd') {
//单元格日期原始值
var date = new Date(cell.v);
if (!isIE) {
if (isXls) {
//非IE的xls文件的日期生成jsonData会多43秒,需要减去43秒
cell.v = new Date(date.getTime() - 43 * 1000);
}
else {
//非IE的xlsx文件的单元格日期原始值会少43秒,需要加上43秒
date = new Date(date.getTime() + 43 * 1000);;
}
}
console.log(date);
//单元格日期原始值含有HH:mm:ss
if (date.getHours() > 0 || date.getMinutes() > 0 || date.getSeconds() > 0) {
dateFormate = 'yyyy-MM-dd HH:mm:ss';
}
}
}
console.log(sheet1);
//获取json格式的Excel数据
var jsonData = XLSX.utils.sheet_to_json(workbook.Sheets[workbook.SheetNames[0]], {
defval: null //单元格为空时的默认值
, raw: false //使用w的值而不是v
, dateNF: dateFormate //日期格式
});
//获取符合Cells格式的数据
CellsData = jsonDataToCells(jsonData);
console.log(jsonData);
//console.log(CellsData);
//do something
callback();
};
//加载文件
reader.readAsArrayBuffer(file);
}
//ArrayBuffer转BinaryString转BinaryString
function arrayBufferToBinaryString(data) {
var o = "",
l = 0,
w = 10240;
for (; l < data.byteLength / w; ++l) o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w, l * w + w)));
o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w)));
return o;
}
//转化为符合Cells格式的数据
/*
[
[], //第一行数据
[], //第二行数据
[], //第三行数据
[] //第N行数据
]
*/
function jsonDataToCells(jsonData) {
if (jsonData.length == 0) {
return [];
}
var cellsData = []; //用于存储所有数据
var rowData = []; //用于存储每行数据
var jsonDataKeys = Object.keys(jsonData[0]);
for (var i = 0; i < jsonData.length; i++) {
//IE不兼容
//cellsData.push(Object.values(jsonData[i]));
for (var j = 0; j < jsonDataKeys.length; j++) {
rowData.push(jsonData[i][jsonDataKeys[j]]);
}
cellsData.push(rowData);
rowData = [];
}
return cellsData;
}
//获取Cells数据
function getCellsData(row, col) {
if ((row - 2) > (CellsData.length - 1) || row < 2 || col < 1 || (col - 1) > (CellsData[0].length - 1)) {
return { Value: undefined };
}
var cellData = CellsData[row - 2][col - 1];
return { Value: cellData == null ? undefined : cellData };
}