NGTools/uni_modules/sv-excel-json-each/uniCloud/cloudfunctions/common/sv-excel-json-handler/index.js
ldeyun 9dbfdc6c71 V1.0.0
微信小程序运行成功;
H5运行成功
2024-09-30 01:30:39 +08:00

143 lines
3.2 KiB
JavaScript

const xlsx = require('./lib/xlsx.style.js');
const {
convertDSTo26BS,
convert26BSToDS,
readXlsx,
formatExcelToJsonOptions
} = require('./util/index.js')
module.exports = {
excelToarray: async function(base64) {
return readXlsx(base64);
},
excelTojson: async function() {
const args = arguments
let base64 = args[0],options = formatExcelToJsonOptions(args[1]);
const sheetList = readXlsx(base64, options);
let data = [],
allKeys = [];
options.forEach(sheetItem => {
let keys = [];
try {
if (sheetItem.keys && sheetItem.keys.length > 0) {
keys = sheetItem.keys;
allKeys = allKeys.concat(keys);
} else {
keys = sheetList[sheetItem.index].data.find((item, rowIndex) => {
return rowIndex === sheetItem.keysIndex;
});
allKeys = keys;
}
sheetList[sheetItem.index].data.forEach((rowItem, rowIndex) => {
if (rowIndex < sheetItem.startIndex) return false;
if (rowIndex > sheetItem.endIndex && sheetItem.endIndex !== -1)
throw new Error('end forEach');
let obj = {};
rowItem.forEach((colItem, colIndex) => {
if (keys[colIndex]) {
obj[keys[colIndex]] = colItem;
}
})
data.push(obj)
})
} catch (e) {
//throw new Error(e);
}
})
let set = new Set(allKeys);
allKeys = Array.from(set);
return {
keys: allKeys,
data,
sheetListName: sheetList.map(item => {
return item.name
})
}
},
jsonToexcel: async function() {
let data = [],
options = {
title: "未命名",
mapping: {},
type: "base64",
merges: [],
appendHeaderData: []
}
const args = arguments
if (args.length === 5) {
data = args[0]
options = {
...options,
...args[4]
}
options.title = args[1]
options.mapping = args[2]
options.type = args[3]
} else if (args.length === 2) {
data = args[0]
options = {
...options,
...args[1]
}
} else if (args.length === 1) {
data = args[0].data
options = {
...options,
...args[0]
}
}
let {
title,
mapping,
type,
merges,
appendHeaderData
} = options
if (data.length === 0) return {
code: 'no data'
};
let header = [];
for (let key in data[0]) {
if (!mapping[key]) {
mapping[key] = key;
}
header.push(key);
}
let newData = [mapping, ...data];
if (appendHeaderData && appendHeaderData.length > 0) {
newData.unshift(...appendHeaderData)
}
const worksheet = xlsx.utils.json_to_sheet(newData, {
header: header,
skipHeader: true
});
var workbook = xlsx.utils.book_new();
worksheet['!merges'] = options.merges.map(item => {
return {
s: {
r: item.start[0],
c: item.start[1]
},
e: {
r: item.end[0],
c: item.end[1]
}
}
})
xlsx.utils.book_append_sheet(workbook, worksheet, "sheet1");
let xlsxData = xlsx.write(workbook, {
type: "base64"
});
if (type === 'file') {
xlsxData = await uniCloud.uploadFile({
cloudPath: title + '.xlsx',
fileContent: new Buffer(xlsxData, 'base64')
});
xlsxData = xlsxData.fileID;
} else if (type === 'base64') {
xlsxData = "data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64," +
xlsxData;
}
return xlsxData
}
}