xlsx的操作方法

将对象数组 转成 二维数组(配合 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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值