Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit c6ea4e9

Browse files
authored
Merge pull request #294 from peakon/error_reference
Support error references in cell ranges
2 parents 1c99318 + f6d6907 commit c6ea4e9

File tree

2 files changed

+8
-8
lines changed

2 files changed

+8
-8
lines changed

lib/utils/col-cache.js

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -165,15 +165,12 @@ var colCache = module.exports = {
165165

166166
// convert [sheetName!][$]col[$]row[[$]col[$]row] into address or range structures
167167
decodeEx: function(value) {
168-
var sheetName;
168+
var groups = value.match(/(?:(?:(?:'((?:[^']|'')*)')|([^'^ ^!]*))!)?(.*)/);
169169

170-
var parts = value.split('!');
171-
if (parts.length > 1) {
172-
value = parts.pop();
173-
sheetName = parts.join('!').replace(/^'|'$/g, '');
174-
}
170+
var sheetName = groups[1] || groups[2]; // Qouted and unqouted groups
171+
var reference = groups[3]; // Remaining address
175172

176-
parts = value.split(':');
173+
var parts = reference.split(':');
177174
if (parts.length > 1) {
178175
var tl = this.decodeAddress(parts[0]);
179176
var br = this.decodeAddress(parts[1]);
@@ -192,8 +189,10 @@ var colCache = module.exports = {
192189
br: { address: br, col: right, row: bottom, $col$row: '$' + this.n2l(right) + '$' + bottom, sheetName: sheetName },
193190
dimensions: tl + ':' + br
194191
};
192+
} else if (reference.startsWith('#')) {
193+
return sheetName ? {sheetName: sheetName, error: reference} : {error: reference};
195194
} else {
196-
var address = this.decodeAddress(value);
195+
var address = this.decodeAddress(reference);
197196
return sheetName ? Object.assign({sheetName: sheetName}, address) : address;
198197
}
199198
},

spec/unit/utils/col-cache.spec.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ describe('colCache', function() {
7272
expect(colCache.decodeEx('Sheet1!$H$1')).to.deep.equal({'$col$row':'$H$1', address:'H1', col:8, row:1, sheetName:'Sheet1'});
7373
expect(colCache.decodeEx("'Sheet 1'!$H$1")).to.deep.equal({'$col$row':'$H$1', address:'H1', col:8, row:1, sheetName:'Sheet 1'});
7474
expect(colCache.decodeEx("'Sheet !$:1'!$H$1")).to.deep.equal({'$col$row':'$H$1', address:'H1', col:8, row:1, sheetName:'Sheet !$:1'});
75+
expect(colCache.decodeEx("'Sheet !$:1'!#REF!")).to.deep.equal({sheetName:'Sheet !$:1', error:'#REF!'});
7576
});
7677
});
7778

0 commit comments

Comments
 (0)