javascript - JSON till Excel-konvertering


Jag konverterar JSON-data till ett Excel-filformat. Hittills har jag kunnat skapa en fil med datan. Jag ser fram emot att lägga till ett eget meddelande som ska visas (bild nedan) i den första raden och därefter ska data visas i filen med kolumnrubriker.

Jag har tagit referens från denna StackBlitz-länk

Hur kan jag uppnå detta?

Ny fråga

Missing headers firstName, lastName, email, phone

Svar #1

Jag antar att när du säger JSON menar du ett Javascript-objekt som har parserats från en JSON-fil. I mitt exempel är det myObject.

  1. Vi skapar ett kalkylblad med XLSX.utils.json_to_sheet(myObject);
  2. Vi lägger till en rad i början av kalkylbladet med: XLSX.utils.sheet_add_aoa(myWorkSheet, [["Your Mesage Goes Here"]], { origin: 0 }); detta kommer att infoga en aoa (array av arrayer) till en ny rad på den position som definieras av origin.

    • { origin: 0 } betyder första raden
    • { origin: 1 } betyder andra raden
    • { origin: -1 } betyder sista raden

i vårt fall lägger vi till bara en cell (A1) med innehållet: "Ditt meddelande går här"

  1. vi slår ihop cellerna i intervallet A1:D1 (4 celler) med hjälp av myWorkSheet['!merges']=[{ s: 'A1', e: 'D1' }];

    Resten talar för sig själv, tror jag

Här är ett fungerande exempel

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>

tveka inte att ställa eventuella frågor du kan ha.

Svar #2

Jag har forskat mycket om detta och till slut kunde jag komma på en lösning på det här.

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();
}
}