首页 > 解决方案 > 如何将 excel 转换为 json 并在 cypress 中以编程方式写入 json 文件?

问题描述

我已经编写了将 excel 文件读入 json 的代码,但无法按预期读取。它返回每一行的数组。有人可以帮我读取数据并将其正确写入 json 文件。提前致谢。下面是我的代码:

插件/index.js 文件

const xlsx = require("node-xlsx").default;
const fs = require("fs");
const path = require("path");
module.exports = (on, config) => {
  on("task", {
    parseXlsx({ filePath }) {
      return new Promise((resolve, reject) => {
        try {
          const jsonData = xlsx.parse(fs.readFileSync(filePath));
          resolve(jsonData);
        } catch (e) {
          reject(e);
        }
      });
    }
  });
}

规范.js 文件

describe('API', () => {
    it('readf', () => {
        cy.parseXlsx("/Cypress/cypress/fixtures/data.xlsx").then(
            (jsonData) => {
                const rowLength = Cypress.$(jsonData[0].data).length
                for (let index = 0; index < rowLength; index++) {
                    console.log(jsonData[index].data)
                }
            }
        )
    }
)

我想要json输出并写入json文件,如下所示:

{
    "Sheet1": [
        {
            "Username": "user1",
            "password": "password1"
        },
        {
            "Username": "user2",
            "password": "password2"
        },
        {
            "Username": "user3",
            "password": "password3"
        }
    ]
}

标签: javascriptjsonexcelpromisecypress

解决方案


为了将 Excel 工作表转换为 JSON(并返回),我使用 SheetJS 的xlsx

const XLSX = require('xlsx');

// read file
let workbook = XLSX.readFile(filename);

// read first sheet (identified by first of SheetNames)
let sheet = workbook.Sheets[workbook.SheetNames[0]];

// convert to JSON
let json = XLSX.utils.sheet_to_json(sheet);

请记住,尤其是在运行服务器应用程序时,xlsx使用阻塞方法并会导致进程线程上的 I/O 等待。最好在fork中运行这个异步。


推荐阅读