Skip to content

[BUG] hasOwnProperty, constructor special words not serialized correctly with stream.xlsx.WorkbookWriter #1339

Closed
@yapus

Description

@yapus

🐛 Bug Report

When trying to serialize a simple list of strings to XLSX using stream.xlsx.WorkbookWriter i get unreadable XLSX file - MS Excel complains that the file is broken. Looking inside the XML-files - it's broken for sure. Here's an example:

Lib version: 1.15.0

Steps To Reproduce

Run this sample code to output test.xslx file.

const ExcelJS = require('exceljs')
const filename = './test.xlsx'
const testThat = async () => {
  const workbook = new ExcelJS.stream.xlsx.WorkbookWriter({ filename, useStyles: true, useSharedStrings: true })
  const worksheet = workbook.addWorksheet('Data', {})
  const row = worksheet.addRow()
  row.values = ['hasOwnProperty', 'prototype', 'constructor']
  row.commit()
  return await workbook.commit()
}
testThat().then(result => console.log(result.modified))

Unzip xl/sharedStrings.xml and xl/worksheets/sheet1.xml files from the resulting test.xslx and pretty-print them using xmllint:

7z e test.xlsx xl/worksheets/sheet1.xml xl/sharedStrings.xml
xmllint --pretty 1 sharedStrings.xml
xmllint --pretty 1 sheet1.xml 

The expected behaviour:

All 3 strings hasOwnProperty, prototype, constructor should have been added to sharedStrings.xml and referenced from the sheet1.xml file by index.

Here's what i see in the sheet1.xml now - only the prototype string has been mapped correctly, and two other strings have been replaced with the weird function ... { [native code] } which breaks MS Excel.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac" mc:Ignorable="x14ac">
  <sheetFormatPr defaultRowHeight="15" outlineLevelRow="0" outlineLevelCol="0" x14ac:dyDescent="55"/>
  <sheetData>
    <row r="1" spans="1:3" x14ac:dyDescent="0.25">
      <c r="A1" t="s">
        <v>function hasOwnProperty() { [native code] }</v>
      </c>
      <c r="B1" t="s">
        <v>0</v>
      </c>
      <c r="C1" t="s">
        <v>function Object() { [native code] }</v>
      </c>
    </row>
  </sheetData>
  <pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"/>
  <pageSetup orientation="portrait" horizontalDpi="4294967295" verticalDpi="4294967295" scale="100" fitToWidth="1" fitToHeight="1"/>
</worksheet>

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      pFad - Phonifier reborn

      Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

      Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


      Alternative Proxies:

      Alternative Proxy

      pFad Proxy

      pFad v3 Proxy

      pFad v4 Proxy