将对象数组 转成 二维数组(配合 xlsx 将对象数组转为二维数组使用)
/**
* @brief 将对象数组 转成 二维数组(配合 xlsx 将对象数组转为二维数组使用)
* @param[in] objs 对象数组数据: [{"t1":"V1"},{"t2":"V2"}]
* @return Arrays 返回二维数组: [["t1","t2"],["V1",""],["","V2"]]
*/
export default function (objs) {
// const ObjectToAyyaysExcel = function () {
// 遍历数组,看所有的对象有多少属性 存放在 keys 里
let keys = [];
for (let i = 0; i < objs.length; i++) {
for (let k in objs[i]) {
if (keys.indexOf(k) == -1) {
keys.push(k);
}
}
}
// console.log(keys);
// 制作二维数组,对象的属性名称 keys 就放在二维数组的第一项上
let arr = [keys];
for (let i = 0; i < objs.length; i++) {
let a = [];
for (let j = 0; j < keys.length; j++) {
let k = keys[j];
if (objs[i][k]) {
// 有值的时候直接赋值
a.push(objs[i][k]);
} else {
// 值结果为 错误 的时候赋值空
a.push("");
}
}
arr.push(a);
}
// 返回最后的二维数组
return arr;
}
将 二维数组 转化为excel文件 并下载
/**
* @brief 将 二维数组 转化为excel文件 并下载
* @param[in] arrs:Array[][] 二维数组数据: [["t1","t2"],["V1",""],["","V2"]]
* @param[in] name:Stying 报错文件名称
* @return None
*/
// 注意安装对应的插件
// npm install xlsx --save
import { utils, writeFile } from "xlsx"; // 注意处理方法引入方式
// import { ElMessage } from "element-plus";
export default (arrs, name) => {
try {
// console.log(arrs);
const ws = utils.aoa_to_sheet(arrs);
/* generate workbook and add the worksheet */
const wb = utils.book_new();
utils.book_append_sheet(wb, ws, "Sheet1");
/* save to file */
writeFile(wb, name + ".xlsx");
} catch (error) {
// ElMessage.error("转换出错");
console.log(error);
}
}
传入file地址 将excel内容转json数据(异步操作)
/**
* @brief 传入file地址 将excel内容转json(异步操作)
* @param[in] file 文件地址(input file 传入的地址 注意不能是数组)
* @param[in] code 编码方式
* @return promise
*/
// 注意安装对应的插件
// npm install xlsx --save
import { read, utils } from "xlsx"; // 注意处理方法引入方式
// import { ElMessage } from "element-plus";
export default function (file, code) {
code = code || "gb2312";
// console.log(code);
let p = new Promise((resolve, reject) => {
const fileReader = new FileReader();
fileReader.onload = ev => {
try {
const data = ev.target.result;
const workbook = read(data, { type: "binary" });
const params = [];
let tableData = [];
let tableHead = [];
// 取对应表生成json表格内容
workbook.SheetNames.forEach(item => {
params.push({
name: item,
dataList: utils.sheet_to_json(workbook.Sheets[item])
});
tableData.push(utils.sheet_to_json(workbook.Sheets[item]));
});
// 该算法仅针对表头无合并的情况
if (tableData.length > 0) {
// 获取excel中第一个表格数据tableData[0][0],并且将表头提取出来
for (const key in tableData[0][0]) {
tableHead.push(key);
}
}
// console.log(params);
resolve(params);
// 重写数据
} catch (e) {
// console.log('excel出错了');
// ElMessage.error("转换出错");
reject(e);
}
};
// console.log(file);
fileReader.readAsBinaryString(file);
});
return p;
}