ExcelJS将数组写入excel

jv4diomz  于 2022-12-27  发布在  其他
关注(0)|答案(1)|浏览(227)

我正在使用一个API获取信息,并将其存储在一个名为res的数组中。我希望将此数组写入Excel文件。数组中的第一个信息应该在A2中,第二个信息应该在B2中,等等。
这是我的代码:

  1. const api2 = require("fordonsuppgifter-api-wrapper");
  2. (async () => {
  3. console.log("fetching vehicle info");
  4. var res = await api2.GetVehicleInformation("XMP433");
  5. console.log(res);
  6. })();
  7. const Excel = require('exceljs');
  8. const fileName = 'simple.xlsx';
  9. const wb = new Excel.Workbook();
  10. const ws = wb.addWorksheet('My Sheet');
  11. const r3 = ws.getRow(3);
  12. r3.values = [1, 2, 3, 4, 5, 6];
  13. wb.xlsx
  14. .writeFile(fileName)
  15. .then(() => {
  16. console.log('file created');
  17. })
  18. .catch(err => {
  19. console.log(err.message);
  20. });

API工作正常,但我无法让它写入Excel文件。

6ljaweal

6ljaweal1#

您可以创建excel文件与这两个组合调用。exceljs库需要移动单元格写入函数

  1. ws.getCell(<cell_address>).value = <assigned_value>

cell_address需要增加数字以向下移动(增加行号)
示例:A1 -〉A2表示下一行。
columnName()可以将整数转换为Excel列地址。
示例

  1. columnName(1) -> A
  2. columnName(2) -> B

您需要将Object()从JSON转换为Object类型,然后可以获得JSON key的列表

  1. Object.keys(carData)

最终代码

  1. const Excel = require('exceljs');
  2. const api2 = require("fordonsuppgifter-api-wrapper");
  3. const columnName = (index) => {
  4. var cname = String.fromCharCode(65 + ((index - 1) % 26));
  5. if (index > 26)
  6. cname = String.fromCharCode(64 + (index - 1) / 26) + cname;
  7. return cname;
  8. }
  9. const getCarInformation = async (keyword) => {
  10. try {
  11. const res = await api2.GetVehicleInformation(keyword);
  12. return Promise.resolve(res);
  13. } catch (error) {
  14. return Promise.reject(error);
  15. }
  16. }
  17. // Search car by keyword
  18. getCarInformation("XMP433")
  19. .then((carData) => {
  20. const fileName = 'simple.xlsx';
  21. const workbook = new Excel.Workbook();
  22. // make workbook with 'car' name
  23. const ws = workbook.addWorksheet("car")
  24. // Start Cell A1 for title column
  25. let headerColumn = 1
  26. let section_number = 1
  27. for (let key in carData) {
  28. // title column, example : A1 = Sammanfattning
  29. ws.getCell(columnName(headerColumn) + String(section_number)).value = key
  30. subItems = carData[key]
  31. row_number = section_number
  32. for (let subKey in subItems) {
  33. // Sub title Cell Bx, example : B1 = Registreringsnummer
  34. ws.getCell(columnName(headerColumn + 1) + String(row_number)).value = subKey
  35. // value Cell Cx, example : C1 = '(2*) XMP433'
  36. ws.getCell(columnName(headerColumn + 2) + String(row_number)).value = subItems[subKey]
  37. row_number++;
  38. }
  39. // Jump to next title
  40. section_number = section_number + Object.keys(carData[key]).length;
  41. }
  42. workbook.xlsx
  43. .writeFile(fileName)
  44. .then(() => {
  45. console.log('file created');
  46. })
  47. .catch(err => {
  48. console.log(err.message);
  49. });
  50. })
  51. .catch(err => {
  52. console.log(err.message);
  53. });

结果以simple.xlsx表示

保存文件后,您需要单击标题以扩展列宽,以适应其内容。

展开查看全部

相关问题