31 lines
937 B
JavaScript
31 lines
937 B
JavaScript
import _ from 'lodash';
|
|
import XLSX from 'xlsx';
|
|
|
|
export default (file, lang) => {
|
|
const workbook = typeof window === 'undefined' ? XLSX.readFile(file) : XLSX.read(file, { type: 'binary' });
|
|
const sheetNames = workbook.SheetNames;
|
|
if (sheetNames.length === 0) {
|
|
return Promise.reject({ error: lang.error.noWorksheet });
|
|
}
|
|
const sheets = workbook.Sheets;
|
|
const json = XLSX.utils.sheet_to_json(sheets[sheetNames[0]], {
|
|
header: 1,
|
|
defVal: '',
|
|
blankrows: false,
|
|
});
|
|
|
|
if (json.length === 0) {
|
|
return Promise.reject({ error: lang.error.emptyWorksheet });
|
|
}
|
|
|
|
const transposedMatrix = _.unzip(json);
|
|
const normalizedOutput = transposedMatrix
|
|
.map(columnRows => ({
|
|
name: _.first(columnRows),
|
|
data: _.tail(columnRows),
|
|
}))
|
|
.filter(column => column.data.length === 0 || !column.data.every(data => data === undefined));
|
|
|
|
return Promise.resolve({ worksheet: normalizedOutput });
|
|
};
|