JSON для преобразования в excel - PullRequest
1 голос
/ 13 апреля 2020

Я конвертирую JSON данные в формат файла Excel. До сих пор я был в состоянии создать файл с данными. Я с нетерпением жду добавления пользовательского сообщения, которое будет отображаться (изображение ниже) в первой строке, и после этого данные должны отображаться в файле с заголовками столбцов.

Я взял ссылку на эту ссылку stackblitz

enter image description here

Как этого добиться?


Новый выпуск

enter image description here

Missing headers firstName, lastName, email, phone

Ответы [ 2 ]

1 голос
/ 13 апреля 2020

Полагаю, когда вы говорите JSON, вы имеете в виду объект Javascript, который был проанализирован из файла JSON. в моем примере это myObject.

  1. Мы создаем лист, используя XLSX.utils.json_to_sheet(myObject);
  2. Мы добавляем строку в начало листа, используя: XLSX.utils.sheet_add_aoa(myWorkSheet, [["Your Mesage Goes Here"]], { origin: 0 }); это вставит aoa (массив массивов) в новую строку в позиции, определенной origin.
    • { origin: 0 } означает первый ряд
    • { origin: 1 } означает второй ряд
    • { origin: -1 } означает последний ряд

в нашем случае мы добавляем только одну ячейку (A1) с содержанием: «Ваше сообщение здесь»

мы объединяем ячейки в диапазоне A1: D1 (4 ячейки), используя myWorkSheet['!merges'] = [{ s: 'A1', e: 'D1' }];

Остальное самоочевидно, я думаю

Вот рабочий пример

myObject = [
  { name: "Moran", role: "back" },
  { name: "Alain", role: "front" },
  { name: "Tony", role: "back" },
  { name: "Mike", role: "back" },
  { name: "Abo", role: "back" },
  { name: "Toni", role: "back" }
];

function exportWS() {
  var myFile = "myFile.xlsx";
  var myWorkSheet = XLSX.utils.json_to_sheet(myObject);
  var myWorkBook = XLSX.utils.book_new();
  XLSX.utils.book_append_sheet(myWorkBook, myWorkSheet, "myWorkSheet");
  XLSX.writeFile(myWorkBook, myFile);
}
function exportWSPlus() {
  var myFile = "myFilePlus.xlsx";
  var myWorkSheet = XLSX.utils.json_to_sheet(myObject);
  XLSX.utils.sheet_add_aoa(myWorkSheet, [["Your Mesage Goes Here"]], { origin: 0 });
  var merges = myWorkSheet['!merges'] = [{ s: 'A1', e: 'D1' }];
  var myWorkBook = XLSX.utils.book_new();
  XLSX.utils.book_append_sheet(myWorkBook, myWorkSheet, "myWorkSheet");
  XLSX.writeFile(myWorkBook, myFile);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.14.3/xlsx.full.min.js"></script>
<button type="button" onclick="exportWS()">Export Worksheet</button>
<button type="button" onclick="exportWSPlus()">Export Worksheet+</button>

Не стесняйтесь задавать любые ваши вопросы.

0 голосов
/ 14 апреля 2020

Я много исследовал это, и, наконец, я смог найти решение этого вопроса.

public exportAsExcelFile(json: Array<object>, excelFileName: string): void {
var worksheet: XLSX.WorkSheet = XLSX.utils.aoa_to_sheet([
  [`${excelFileName}`]]); // message to display
worksheet['!merges'] = [{ s: { r: 0, c: 0 }, e: { r: 0, c: 3 } }]; //for merging columns. s : start, e: end, c: column, r: row
XLSX.utils.sheet_add_json(worksheet, json, { origin: "A2" }); //origin for json data
const workbook: XLSX.WorkBook = { Sheets: { 'data': worksheet }, SheetNames: ['data'] };
const excelBuffer: any = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' });
var range = XLSX.utils.decode_range(worksheet['!ref']);
for (var C = range.s.r; C <= range.e.r; ++C) {
  var address = XLSX.utils.encode_col(C) + "1"; 
  if (!worksheet[address]) continue;
  worksheet[address].v = worksheet[address].v.charAt(0).toUpperCase() + worksheet[address].v.substr(1).toLowerCase();
}
}

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...