Skip to content

Commit

Permalink
Merge pull request exceljs#584 from peakon/feature/decodeSharedString…
Browse files Browse the repository at this point in the history
…Escapes

Decode the _x<4 hex chars>_ escape notation in shared strings
  • Loading branch information
guyonroche authored Jun 26, 2018
2 parents 99789f5 + a35b976 commit ec4cd23
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 1 deletion.
4 changes: 3 additions & 1 deletion lib/xlsx/xform/strings/text-xform.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,9 @@ utils.inherits(TextXform, BaseXform, {
},

get model() {
return this._text.join('');
return this._text.join('').replace(/_x([0-9A-F]{4})_/g, function($0, $1) {
return String.fromCharCode(parseInt($1, 16));
});
},

parseOpen: function(node) {
Expand Down
Binary file not shown.
16 changes: 16 additions & 0 deletions spec/integration/workbook-xlsx-reader.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -127,4 +127,20 @@ describe('WorkbookReader', function() {
});
});
});

describe('with a spreadsheet that contains a shared string with an escaped underscore', function() {
before(function() {
var testContext = this;
var workbook = new Excel.Workbook();
return workbook.xlsx.read(fs.createReadStream('./spec/integration/data/shared_string_with_escape.xlsx'))
.then(function() {
testContext.worksheet = workbook.getWorksheet();
});
});

it('should decode the underscore', function() {
const cell = this.worksheet.getCell('A1');
expect(cell.value).to.equal('_x000D_');
});
});
});

0 comments on commit ec4cd23

Please sign in to comment.