@borgar/fx 4.8.0 → 4.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/fx.d.ts +8 -0
- package/dist/fx.js +1 -1
- package/docs/API.md +18 -15
- package/lib/a1.js +58 -23
- package/lib/a1.spec.js +75 -13
- package/lib/addTokenMeta.js +1 -1
- package/lib/addTokenMeta.spec.js +12 -0
- package/lib/constants.js +1 -0
- package/lib/extraTypes.js +1 -0
- package/lib/fixRanges.js +3 -2
- package/lib/fixRanges.spec.js +3 -0
- package/lib/lexer.js +24 -2
- package/lib/lexer.spec.js +106 -0
- package/lib/lexerParts.js +18 -11
- package/lib/mergeRefTokens.js +9 -0
- package/lib/mergeRefTokens.spec.js +3 -0
- package/lib/parseRef.js +5 -3
- package/lib/parser.js +1 -0
- package/lib/parser.spec.js +1 -0
- package/lib/rc.js +28 -16
- package/lib/rc.spec.js +52 -13
- package/lib/sr.js +5 -3
- package/lib/sr.spec.js +50 -0
- package/lib/stringifyPrefix.js +3 -3
- package/lib/translate-toA1.spec.js +13 -0
- package/lib/translate-toRC.spec.js +13 -0
- package/lib/translate.js +6 -0
- package/package.json +1 -1
|
@@ -199,3 +199,16 @@ test('translate works with xlsx mode references', t => {
|
|
|
199
199
|
]);
|
|
200
200
|
t.end();
|
|
201
201
|
});
|
|
202
|
+
|
|
203
|
+
test('translate works with trimmed ranges', t => {
|
|
204
|
+
const testExpr = (expr, anchor, expected) => {
|
|
205
|
+
const opts = { mergeRefs: true, xlsx: true, r1c1: true };
|
|
206
|
+
t.deepEqual(translateToA1(tokenize(expr, opts), anchor, opts), expected, expr);
|
|
207
|
+
};
|
|
208
|
+
testExpr('Sheet!R[-1]C[-1].:.RC*Sheet2!C[50].:.C[700]', 'B2', [
|
|
209
|
+
{ type: 'range', value: 'Sheet!A1.:.B2' },
|
|
210
|
+
{ type: 'operator', value: '*' },
|
|
211
|
+
{ type: 'range_beam', value: 'Sheet2!AZ.:.ZZ' }
|
|
212
|
+
]);
|
|
213
|
+
t.end();
|
|
214
|
+
});
|
|
@@ -182,3 +182,16 @@ test('translate works with xlsx mode', t => {
|
|
|
182
182
|
]);
|
|
183
183
|
t.end();
|
|
184
184
|
});
|
|
185
|
+
|
|
186
|
+
test('translate works with trimmed ranges', t => {
|
|
187
|
+
const testExpr = (expr, anchor, expected) => {
|
|
188
|
+
const opts = { mergeRefs: true, xlsx: true, r1c1: false };
|
|
189
|
+
t.deepEqual(translateToR1C1(tokenize(expr, opts), anchor, opts), expected, expr);
|
|
190
|
+
};
|
|
191
|
+
testExpr('Sheet!A1.:.B2*Sheet2!AZ.:.ZZ', 'B2', [
|
|
192
|
+
{ type: 'range', value: 'Sheet!R[-1]C[-1].:.RC' },
|
|
193
|
+
{ type: 'operator', value: '*' },
|
|
194
|
+
{ type: 'range_beam', value: 'Sheet2!C[50].:.C[700]' }
|
|
195
|
+
]);
|
|
196
|
+
t.end();
|
|
197
|
+
});
|
package/lib/translate.js
CHANGED
|
@@ -61,6 +61,9 @@ export function translateToR1C1 (formula, anchorCell, { xlsx = false, allowTerna
|
|
|
61
61
|
range.$r1 = d.$bottom;
|
|
62
62
|
range.$c0 = d.$left;
|
|
63
63
|
range.$c1 = d.$right;
|
|
64
|
+
if (d.trim) {
|
|
65
|
+
range.trim = d.trim;
|
|
66
|
+
}
|
|
64
67
|
ref.range = range;
|
|
65
68
|
token.value = stringifyR1C1Ref(ref, refOpts);
|
|
66
69
|
// if token includes offsets, those offsets are now likely wrong!
|
|
@@ -204,6 +207,9 @@ export function translateToA1 (formula, anchorCell, options = defaultOptions) {
|
|
|
204
207
|
range.right = c1;
|
|
205
208
|
range.$right = d.$c1;
|
|
206
209
|
}
|
|
210
|
+
if (d.trim) {
|
|
211
|
+
range.trim = d.trim;
|
|
212
|
+
}
|
|
207
213
|
if (isNaN(r0) || isNaN(r1) || isNaN(c0) || isNaN(c1)) {
|
|
208
214
|
// convert to ref error
|
|
209
215
|
token.type = ERROR;
|