first commit + add fe component vue accone
This commit is contained in:
27
libs/vendor/xlsprse/parser/index.js
vendored
Normal file
27
libs/vendor/xlsprse/parser/index.js
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
import parseXlsx from './xlsx-parser';
|
||||
|
||||
function parseFileExcelFile(file, lang, callback) {
|
||||
const reader = new FileReader();
|
||||
|
||||
reader.onload = event =>
|
||||
parseXlsx(event.target.result, lang)
|
||||
.then(result => callback(result))
|
||||
.catch(error => callback(error));
|
||||
|
||||
if (file.type === 'text/csv') {
|
||||
reader.readAsText(file);
|
||||
} else {
|
||||
reader.readAsBinaryString(file);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
export default (htmlFile, lang) =>
|
||||
new Promise((resolve, reject) => {
|
||||
parseFileExcelFile(htmlFile, lang, (result) => {
|
||||
if (result.error) {
|
||||
return reject(result.error);
|
||||
}
|
||||
return resolve(result.worksheet);
|
||||
});
|
||||
});
|
||||
30
libs/vendor/xlsprse/parser/xlsx-parser.js
vendored
Normal file
30
libs/vendor/xlsprse/parser/xlsx-parser.js
vendored
Normal file
@@ -0,0 +1,30 @@
|
||||
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 });
|
||||
};
|
||||
Reference in New Issue
Block a user