diff --git a/package-lock.json b/package-lock.json
index 0241ff8..95f0c95 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -12,7 +12,7 @@
"@borgar/fx": "~5.0.5",
"@borgar/simple-xml": "~2.2.2",
"@borgar/zip": "~1.0.0",
- "@jsfkit/types": "~2.5.0",
+ "@jsfkit/types": "~2.6.0",
"@jsfkit/utils": "~1.2.0",
"numfmt": "~3.2.6"
},
@@ -997,9 +997,9 @@
}
},
"node_modules/@jsfkit/types": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/@jsfkit/types/-/types-2.5.0.tgz",
- "integrity": "sha512-HtwwB1Jm1OSwWVulCzpEH73/X92caWOYVLKJ+OrQIuSDG9X/9vFq4gn6GWJ/RZvshARqWoFBAhlak6gMShh1HA==",
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/@jsfkit/types/-/types-2.6.0.tgz",
+ "integrity": "sha512-AWdQjHHrs1Iv/4vBRu//zExD3x/qzd24gEDAJjVuAmS1OyrUr4gQENgppTYsmipgKsoUX775Tfo84Z0JeNsy9w==",
"license": "MIT"
},
"node_modules/@jsfkit/utils": {
diff --git a/package.json b/package.json
index 560a067..d773248 100644
--- a/package.json
+++ b/package.json
@@ -85,7 +85,7 @@
"@borgar/fx": "~5.0.5",
"@borgar/simple-xml": "~2.2.2",
"@borgar/zip": "~1.0.0",
- "@jsfkit/types": "~2.5.0",
+ "@jsfkit/types": "~2.6.0",
"@jsfkit/utils": "~1.2.0",
"numfmt": "~3.2.6"
},
diff --git a/src/handler/worksheet.spec.ts b/src/handler/worksheet.spec.ts
index f4d3e91..ee4e716 100644
--- a/src/handler/worksheet.spec.ts
+++ b/src/handler/worksheet.spec.ts
@@ -96,3 +96,211 @@ describe('handlerWorksheet selection', () => {
expect(sheet.views![0]?.activeRanges).toEqual([ 'A1:D4', 'C3:G8' ]);
});
});
+
+describe('handlerWorksheet sheetViews', () => {
+ it('defaults to no frozen panes', () => {
+ const sheet = parseSheet(
+ SHEET_OPEN +
+ `
+
+ ` +
+ SHEET_CLOSE,
+ );
+ expect(sheet.views).toBeUndefined();
+ });
+
+ it('includes two frozen panes vertically split ', () => {
+ const sheetViews = `
+
+
+
+
+ `;
+ const sheet = parseSheet(SHEET_OPEN + sheetViews + SHEET_CLOSE);
+ expect(sheet.views).toHaveLength(1);
+ const view = sheet.views![0];
+ expect(view.panes).toEqual({
+ type: 'frozen',
+ columns: 1,
+ firstVisibleCell: 'C1',
+ activePane: 'topEnd',
+ });
+ });
+
+ it('includes two frozen panes horizontally split ', () => {
+ const sheetViews = `
+
+
+
+
+ `;
+ const sheet = parseSheet(SHEET_OPEN + sheetViews + SHEET_CLOSE);
+ expect(sheet.views).toHaveLength(1);
+ const view = sheet.views![0];
+ expect(view.panes).toEqual({
+ type: 'frozen',
+ rows: 2,
+ firstVisibleCell: 'A3',
+ activePane: 'bottomStart',
+ });
+ });
+
+ it('includes four frozen panes', () => {
+ const sheetViews = `
+
+
+
+
+ `;
+ const sheet = parseSheet(SHEET_OPEN + sheetViews + SHEET_CLOSE);
+ expect(sheet.views).toHaveLength(1);
+ const view = sheet.views![0];
+ expect(view.workbookView).toEqual(42);
+ expect(view.panes).toEqual({
+ type: 'frozen',
+ columns: 1,
+ rows: 2,
+ firstVisibleCell: 'B9',
+ activePane: 'bottomEnd',
+ });
+ });
+
+ it('parses "frozenSplit" panes', () => {
+ const sheetViews = `
+
+
+
+
+
+
+
+ `;
+ const sheet = parseSheet(SHEET_OPEN + sheetViews + SHEET_CLOSE);
+ expect(sheet.views).toHaveLength(1);
+ const view = sheet.views![0];
+ expect(view.workbookView).toEqual(0);
+ expect(view.panes).toEqual({
+ type: 'frozen',
+ columns: 10,
+ rows: 19,
+ firstVisibleCell: 'K20',
+ activePane: 'bottomEnd',
+ });
+ });
+
+ it('ignores default frozen panes', () => {
+ const sheetViews = `
+
+
+
+
+ `;
+ const sheet = parseSheet(SHEET_OPEN + sheetViews + SHEET_CLOSE);
+ expect(sheet.views).toBeUndefined();
+ });
+
+ it('ignores frozen panes with a zero split but valid topLeftCell and activePane attributes', () => {
+ const sheetViews = `
+
+
+
+
+ `;
+ const sheet = parseSheet(SHEET_OPEN + sheetViews + SHEET_CLOSE);
+ expect(sheet.views).toBeUndefined();
+ });
+
+ it('handles default selection in frozen panes', () => {
+ const sheetViews = `
+
+
+
+
+
+
+ `;
+ const sheet = parseSheet(SHEET_OPEN + sheetViews + SHEET_CLOSE);
+ expect(sheet.views![0].activeCell).toEqual('C1');
+ });
+
+ it('handles selection in frozen panes', () => {
+ const sheetViews = `
+
+
+
+
+
+
+
+
+ `;
+ const sheet = parseSheet(SHEET_OPEN + sheetViews + SHEET_CLOSE);
+ expect(sheet.views![0].activeCell).toEqual('A3');
+ });
+
+ it('omits firstVisibleCell when a frozen pane has no topLeftCell', () => {
+ const sheetViews = `
+
+
+
+
+
+ `;
+ const sheet = parseSheet(SHEET_OPEN + sheetViews + SHEET_CLOSE);
+ expect(sheet.views).toHaveLength(1);
+ expect(sheet.views![0].panes).toBeDefined();
+ expect(sheet.views![0].panes!.firstVisibleCell).toBeUndefined();
+ });
+
+ it('omits activePane when a frozen pane uses default activePane="topLeft"', () => {
+ const sheetViews = `
+
+
+
+
+
+ `;
+ const sheet = parseSheet(SHEET_OPEN + sheetViews + SHEET_CLOSE);
+ expect(sheet.views).toHaveLength(1);
+ expect(sheet.views![0].panes).toBeDefined();
+ expect(sheet.views![0].panes!.activePane).toBeUndefined();
+ });
+
+ it('discards implicitly split panes ( has no state attribute)', () => {
+ const sheetViews = `
+
+
+
+
+
+
+
+
+ `;
+ const sheet = parseSheet(SHEET_OPEN + sheetViews + SHEET_CLOSE);
+ expect(sheet.views).toHaveLength(1);
+ expect(sheet.views![0]).toEqual({
+ activeCell: 'F9',
+ workbookView: 0,
+ });
+ });
+
+ it('discards explicitly split panes ()', () => {
+ const sheetViews = `
+
+
+
+
+
+
+
+
+ `;
+ const sheet = parseSheet(SHEET_OPEN + sheetViews + SHEET_CLOSE);
+ expect(sheet.views).toHaveLength(1);
+ expect(sheet.views![0]).toEqual({
+ activeCell: 'F9',
+ workbookView: 0,
+ });
+ });
+});
diff --git a/src/handler/worksheet.ts b/src/handler/worksheet.ts
index a7a1a4a..ffe01a2 100644
--- a/src/handler/worksheet.ts
+++ b/src/handler/worksheet.ts
@@ -1,4 +1,4 @@
-import type { GridSize, PageMargins, Worksheet, WorksheetLayoutScales, WorksheetView } from '@jsfkit/types';
+import type { GridSize, PageMargins, Worksheet, WorksheetLayoutScales, WorksheetView, WorksheetViewFrozenPanes } from '@jsfkit/types';
import { Document, Element } from '@borgar/simple-xml';
import { attr, boolAttr, numAttr } from '../utils/attr.ts';
import { rle } from '../utils/rle.ts';
@@ -13,6 +13,15 @@ import { toInt } from '../utils/typecast.ts';
import { addProp } from '../utils/addProp.ts';
import { DEFAULT_PAGE_MARGINS } from '../constants.ts';
+type ExcelFrozenPaneLocation = 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight';
+type JSFFrozenPaneLocation = NonNullable;
+const FROZEN_PANE_LOCATIONS: Record = {
+ topLeft: 'topStart',
+ topRight: 'topEnd',
+ bottomLeft: 'bottomStart',
+ bottomRight: 'bottomEnd',
+};
+
/**
* Extracts zoom levels (layout scales) for the different view modes for a sheet.
*
@@ -62,10 +71,7 @@ export function handlerWorksheet (
hidden: context.sheetLinks.find(link => link.name === sheetName)?.hidden ?? 0,
};
- // Store last selected cell and/or range (both optional) for each of the sheet's view. A sheet
- // view may be split into four panes, although of course most aren't. But to cover that case we
- // need to find the active pane then find its active cell. When there's only one pane (i.e. almost
- // all spreadsheets), you look for the default pane, "topLeft".
+ // Store the sheet's views (layout, zoom level, selected cell/range, frozen panes).
const views: WorksheetView[] = [];
const sheetViews = dom.querySelectorAll('sheetViews > sheetView');
sheetViews.forEach(sheetView => {
@@ -74,8 +80,34 @@ export function handlerWorksheet (
if (activeLayout === 'normal' || activeLayout === 'pageLayout' || activeLayout === 'pageBreakPreview') {
view.activeLayout = activeLayout;
}
+
+ // Sheet views can be split into two panes (horizontally or vertically), or four panes
+ // (quadrants). When they're split, they can be "split panes" (four different views of the full
+ // sheet) or "frozen panes" (one view of the sheet but with fixed header rows and/or columns).
+ // Split panes have been around forever, but frozen panes are more common. Only frozen panes are
+ // supported here.
const pane = getFirstChild(sheetView, 'pane');
- const activePane = pane ? attr(pane, 'activePane', 'topLeft') : 'topLeft';
+ const activePane = (
+ pane ? attr(pane, 'activePane', 'topLeft') : 'topLeft'
+ ) as ExcelFrozenPaneLocation;
+ if (pane && (attr(pane, 'state') === 'frozen' || attr(pane, 'state') === 'frozenSplit')) {
+ const columnSplit = numAttr(pane, 'xSplit', 0);
+ const rowSplit = numAttr(pane, 'ySplit', 0);
+ const firstVisibleCell = attr(pane, 'topLeftCell');
+
+ // If a view contains frozen panes, find which row and column they're split on, where the
+ // non-frozen pane is scrolled to, and which pane is active.
+ if (columnSplit !== 0 || rowSplit !== 0) {
+ view.panes = { type: 'frozen' };
+ addProp(view.panes, 'columns', columnSplit, 0);
+ addProp(view.panes, 'rows', rowSplit, 0);
+ addProp(view.panes, 'firstVisibleCell', firstVisibleCell, '');
+ addProp(view.panes, 'activePane', FROZEN_PANE_LOCATIONS[activePane], 'topStart');
+ }
+ }
+
+ // Which cell/range is selected within which pane? If there are no frozen panes, OOXML pretends
+ // there's a single "topLeft" pane that defines the selection.
const selection = sheetView.children
.find(el => el.tagName === 'selection' && attr(el, 'pane', 'topLeft') === activePane);
if (selection) {
@@ -88,6 +120,7 @@ export function handlerWorksheet (
view.activeRanges = activeRanges;
}
}
+
addProp(view, 'showGridLines', boolAttr(sheetView, 'showGridLines'), true);
addProp(view, 'layoutScales', getLayoutScales(sheetView));
diff --git a/tests/excel/freeze-panes.xlsx b/tests/excel/freeze-panes.xlsx
new file mode 100644
index 0000000..b79deb4
Binary files /dev/null and b/tests/excel/freeze-panes.xlsx differ
diff --git a/tests/excel/freeze-panes.xlsx.json b/tests/excel/freeze-panes.xlsx.json
new file mode 100644
index 0000000..7c77c05
--- /dev/null
+++ b/tests/excel/freeze-panes.xlsx.json
@@ -0,0 +1,1059 @@
+{
+ "name": "freeze-panes.xlsx",
+ "sheets": [
+ {
+ "name": "VIS01000",
+ "cells": {
+ "A1": {
+ "s": 1,
+ "v": "Consumer price index and changes, base 1988=100"
+ },
+ "B2": { "s": 2, "v": "Monthly change, %" },
+ "A3": { "s": 2, "v": "1988M05" },
+ "B3": { "s": 3, "v": "." },
+ "A4": { "s": 2, "v": "1988M06" },
+ "B4": { "s": 4, "v": 3.4 },
+ "A5": { "s": 2, "v": "1988M07" },
+ "B5": { "s": 4, "v": 3.48 },
+ "A6": { "s": 2, "v": "1988M08" },
+ "B6": { "s": 4, "v": 2.15 },
+ "A7": { "s": 2, "v": "1988M09" },
+ "B7": { "s": 4, "v": 0.64 },
+ "A8": { "s": 2, "v": "1988M10" },
+ "B8": { "s": 4, "v": 0.36 },
+ "A9": { "s": 2, "v": "1988M11" },
+ "B9": { "s": 4, "v": 0.09 },
+ "A10": { "s": 2, "v": "1988M12" },
+ "B10": { "s": 4, "v": 0.18 },
+ "A11": { "s": 2, "v": "1989M01" },
+ "B11": { "s": 4, "v": 1.72 },
+ "A12": { "s": 2, "v": "1989M02" },
+ "B12": { "s": 4, "v": 1.42 },
+ "A13": { "s": 2, "v": "1989M03" },
+ "B13": { "s": 4, "v": 2.8 },
+ "A14": { "s": 2, "v": "1989M04" },
+ "B14": { "s": 4, "v": 2.13 },
+ "A15": { "s": 2, "v": "1989M05" },
+ "B15": { "s": 4, "v": 2 },
+ "A16": { "s": 2, "v": "1989M06" },
+ "B16": { "s": 4, "v": 2.94 },
+ "A17": { "s": 2, "v": "1989M07" },
+ "B17": { "s": 4, "v": 0.71 },
+ "A18": { "s": 2, "v": "1989M08" },
+ "B18": { "s": 4, "v": 1.34 },
+ "A19": { "s": 2, "v": "1989M09" },
+ "B19": { "s": 4, "v": 2.02 },
+ "A20": { "s": 2, "v": "1989M10" },
+ "B20": { "s": 4, "v": 1.98 },
+ "A21": { "s": 2, "v": "1989M11" },
+ "B21": { "s": 4, "v": 1.5 },
+ "A22": { "s": 2, "v": "1989M12" },
+ "B22": { "s": 4, "v": 2.14 },
+ "A23": { "s": 2, "v": "1990M01" },
+ "B23": { "s": 4, "v": 0.51 },
+ "A24": { "s": 2, "v": "1990M02" },
+ "B24": { "s": 4, "v": 1.58 },
+ "A25": { "s": 2, "v": "1990M03" },
+ "B25": { "s": 4, "v": 0.85 },
+ "A26": { "s": 2, "v": "1990M04" },
+ "B26": { "s": 4, "v": 0.28 },
+ "A27": { "s": 2, "v": "1990M05" },
+ "B27": { "s": 4, "v": 0.91 },
+ "A28": { "s": 2, "v": "1990M06" },
+ "B28": { "s": 4, "v": 0.69 },
+ "A29": { "s": 2, "v": "1990M07" },
+ "B29": { "s": 4, "v": 0.69 },
+ "A30": { "s": 2, "v": "1990M08" },
+ "B30": { "s": 4, "v": 0.27 },
+ "A31": { "s": 2, "v": "1990M09" },
+ "B31": { "s": 4, "v": 0 },
+ "A32": { "s": 2, "v": "1990M10" },
+ "B32": { "s": 4, "v": 0.27 },
+ "A33": { "s": 2, "v": "1990M11" },
+ "B33": { "s": 4, "v": 0.68 },
+ "A34": { "s": 2, "v": "1990M12" },
+ "B34": { "s": 4, "v": 0.27 },
+ "A35": { "s": 2, "v": "1991M01" },
+ "B35": { "s": 4, "v": 0.61 },
+ "A36": { "s": 2, "v": "1991M02" },
+ "B36": { "s": 4, "v": 0.33 },
+ "A37": { "s": 2, "v": "1991M03" },
+ "B37": { "s": 4, "v": 0.2 },
+ "A38": { "s": 2, "v": "1991M04" },
+ "B38": { "s": 4, "v": 0.47 },
+ "A39": { "s": 2, "v": "1991M05" },
+ "B39": { "s": 4, "v": 1.19 },
+ "A40": { "s": 2, "v": "1991M06" },
+ "B40": { "s": 4, "v": 1.37 },
+ "A41": { "s": 2, "v": "1991M07" },
+ "B41": { "s": 4, "v": 0.71 },
+ "A42": { "s": 2, "v": "1991M08" },
+ "B42": { "s": 4, "v": 0.77 },
+ "A43": { "s": 2, "v": "1991M09" },
+ "B43": { "s": 4, "v": 0.57 },
+ "A44": { "s": 2, "v": "1991M10" },
+ "B44": { "s": 4, "v": 0.76 },
+ "A45": { "s": 2, "v": "1991M11" },
+ "B45": { "s": 4, "v": 0.44 },
+ "A46": { "s": 2, "v": "1991M12" },
+ "B46": { "s": 4, "v": -0.12 },
+ "A47": { "s": 2, "v": "1992M01" },
+ "B47": { "s": 4, "v": 0.25 },
+ "A48": { "s": 2, "v": "1992M02" },
+ "B48": { "s": 4, "v": 0.12 },
+ "A49": { "s": 2, "v": "1992M03" },
+ "B49": { "s": 4, "v": 0.12 },
+ "A50": { "s": 2, "v": "1992M04" },
+ "B50": { "s": 4, "v": 0 },
+ "A51": { "s": 2, "v": "1992M05" },
+ "B51": { "s": 4, "v": -0.06 },
+ "A52": { "s": 2, "v": "1992M06" },
+ "B52": { "s": 4, "v": 0.37 },
+ "A53": { "s": 2, "v": "1992M07" },
+ "B53": { "s": 4, "v": 0.19 },
+ "A54": { "s": 2, "v": "1992M08" },
+ "B54": { "s": 4, "v": 0 },
+ "A55": { "s": 2, "v": "1992M09" },
+ "B55": { "s": 4, "v": -0.06 },
+ "A56": { "s": 2, "v": "1992M10" },
+ "B56": { "s": 4, "v": 0.06 },
+ "A57": { "s": 2, "v": "1992M11" },
+ "B57": { "s": 4, "v": 0 },
+ "A58": { "s": 2, "v": "1992M12" },
+ "B58": { "s": 4, "v": 0.5 },
+ "A59": { "s": 2, "v": "1993M01" },
+ "B59": { "s": 4, "v": 1.17 },
+ "A60": { "s": 2, "v": "1993M02" },
+ "B60": { "s": 4, "v": 0.73 },
+ "A61": { "s": 2, "v": "1993M03" },
+ "B61": { "s": 4, "v": 0.06 },
+ "A62": { "s": 2, "v": "1993M04" },
+ "B62": { "s": 4, "v": 0.3 },
+ "A63": { "s": 2, "v": "1993M05" },
+ "B63": { "s": 4, "v": 0.24 },
+ "A64": { "s": 2, "v": "1993M06" },
+ "B64": { "s": 4, "v": -0.06 },
+ "A65": { "s": 2, "v": "1993M07" },
+ "B65": { "s": 4, "v": 0.9 },
+ "A66": { "s": 2, "v": "1993M08" },
+ "B66": { "s": 4, "v": 0.89 },
+ "A67": { "s": 2, "v": "1993M09" },
+ "B67": { "s": 4, "v": 0.35 },
+ "A68": { "s": 2, "v": "1993M10" },
+ "B68": { "s": 4, "v": 0.59 },
+ "A69": { "s": 2, "v": "1993M11" },
+ "B69": { "s": 4, "v": 0 },
+ "A70": { "s": 2, "v": "1993M12" },
+ "B70": { "s": 4, "v": -0.53 },
+ "A71": { "s": 2, "v": "1994M01" },
+ "B71": { "s": 4, "v": -0.35 },
+ "A72": { "s": 2, "v": "1994M02" },
+ "B72": { "s": 4, "v": 0.12 },
+ "A73": { "s": 2, "v": "1994M03" },
+ "B73": { "s": 4, "v": 0.12 },
+ "A74": { "s": 2, "v": "1994M04" },
+ "B74": { "s": 4, "v": 0.12 },
+ "A75": { "s": 2, "v": "1994M05" },
+ "B75": { "s": 4, "v": 0 },
+ "A76": { "s": 2, "v": "1994M06" },
+ "B76": { "s": 4, "v": 0.12 },
+ "A77": { "s": 2, "v": "1994M07" },
+ "B77": { "s": 4, "v": 0.18 },
+ "A78": { "s": 2, "v": "1994M08" },
+ "B78": { "s": 4, "v": 0.06 },
+ "A79": { "s": 2, "v": "1994M09" },
+ "B79": { "s": 4, "v": 0.29 },
+ "A80": { "s": 2, "v": "1994M10" },
+ "B80": { "s": 4, "v": -0.12 },
+ "A81": { "s": 2, "v": "1994M11" },
+ "B81": { "s": 4, "v": -0.06 },
+ "A82": { "s": 2, "v": "1994M12" },
+ "B82": { "s": 4, "v": 0.06 },
+ "A83": { "s": 2, "v": "1995M01" },
+ "B83": { "s": 4, "v": 0.76 },
+ "A84": { "s": 2, "v": "1995M02" },
+ "B84": { "s": 4, "v": 0.12 },
+ "A85": { "s": 2, "v": "1995M03" },
+ "B85": { "s": 4, "v": -0.17 },
+ "A86": { "s": 2, "v": "1995M04" },
+ "B86": { "s": 4, "v": -0.12 },
+ "A87": { "s": 2, "v": "1995M05" },
+ "B87": { "s": 4, "v": 0.17 },
+ "A88": { "s": 2, "v": "1995M06" },
+ "B88": { "s": 4, "v": 0.12 },
+ "A89": { "s": 2, "v": "1995M07" },
+ "B89": { "s": 4, "v": 0.29 },
+ "A90": { "s": 2, "v": "1995M08" },
+ "B90": { "s": 4, "v": 0.41 },
+ "A91": { "s": 2, "v": "1995M09" },
+ "B91": { "s": 4, "v": 0.35 },
+ "A92": { "s": 2, "v": "1995M10" },
+ "B92": { "s": 4, "v": 0.46 },
+ "A93": { "s": 2, "v": "1995M11" },
+ "B93": { "s": 4, "v": -0.34 },
+ "A94": { "s": 2, "v": "1995M12" },
+ "B94": { "s": 4, "v": -0.06 },
+ "A95": { "s": 2, "v": "1996M01" },
+ "B95": { "s": 4, "v": 0.4 },
+ "A96": { "s": 2, "v": "1996M02" },
+ "B96": { "s": 4, "v": 0.17 },
+ "A97": { "s": 2, "v": "1996M03" },
+ "B97": { "s": 4, "v": 0.17 },
+ "A98": { "s": 2, "v": "1996M04" },
+ "B98": { "s": 4, "v": 0.17 },
+ "A99": { "s": 2, "v": "1996M05" },
+ "B99": { "s": 4, "v": 0.63 },
+ "A100": { "s": 2, "v": "1996M06" },
+ "B100": { "s": 4, "v": -0.11 },
+ "A101": { "s": 2, "v": "1996M07" },
+ "B101": { "s": 4, "v": 0.11 },
+ "A102": { "s": 2, "v": "1996M08" },
+ "B102": { "s": 4, "v": 0.62 },
+ "A103": { "s": 2, "v": "1996M09" },
+ "B103": { "s": 4, "v": 0.22 },
+ "A104": { "s": 2, "v": "1996M10" },
+ "B104": { "s": 4, "v": 0.06 },
+ "A105": { "s": 2, "v": "1996M11" },
+ "B105": { "s": 4, "v": 0.06 },
+ "A106": { "s": 2, "v": "1996M12" },
+ "B106": { "s": 4, "v": -0.45 },
+ "A107": { "s": 2, "v": "1997M01" },
+ "B107": { "s": 4, "v": 0.34 },
+ "A108": { "s": 2, "v": "1997M02" },
+ "B108": { "s": 4, "v": 0.06 },
+ "A109": { "s": 2, "v": "1997M03" },
+ "B109": { "s": 4, "v": -0.06 },
+ "A110": { "s": 2, "v": "1997M04" },
+ "B110": { "s": 4, "v": 0.73 },
+ "A111": { "s": 2, "v": "1997M05" },
+ "B111": { "s": 4, "v": -0.17 },
+ "A112": { "s": 2, "v": "1997M06" },
+ "B112": { "s": 4, "v": 0.22 },
+ "A113": { "s": 2, "v": "1997M07" },
+ "B113": { "s": 4, "v": 0.17 },
+ "A114": { "s": 2, "v": "1997M08" },
+ "B114": { "s": 4, "v": 0.28 },
+ "A115": { "s": 2, "v": "1997M09" },
+ "B115": { "s": 4, "v": 0.39 },
+ "A116": { "s": 2, "v": "1997M10" },
+ "B116": { "s": 4, "v": 0.33 },
+ "A117": { "s": 2, "v": "1997M11" },
+ "B117": { "s": 4, "v": -0.11 },
+ "A118": { "s": 2, "v": "1997M12" },
+ "B118": { "s": 4, "v": -0.17 },
+ "A119": { "s": 2, "v": "1998M01" },
+ "B119": { "s": 4, "v": 0.55 },
+ "A120": { "s": 2, "v": "1998M02" },
+ "B120": { "s": 4, "v": -0.22 },
+ "A121": { "s": 2, "v": "1998M03" },
+ "B121": { "s": 4, "v": 0.38 },
+ "A122": { "s": 2, "v": "1998M04" },
+ "B122": { "s": 4, "v": 0.22 },
+ "A123": { "s": 2, "v": "1998M05" },
+ "B123": { "s": 4, "v": 0.33 },
+ "A124": { "s": 2, "v": "1998M06" },
+ "B124": { "s": 4, "v": 0.16 },
+ "A125": { "s": 2, "v": "1998M07" },
+ "B125": { "s": 4, "v": -0.22 },
+ "A126": { "s": 2, "v": "1998M08" },
+ "B126": { "s": 4, "v": -0.54 },
+ "A127": { "s": 2, "v": "1998M09" },
+ "B127": { "s": 4, "v": 0.11 },
+ "A128": { "s": 2, "v": "1998M10" },
+ "B128": { "s": 4, "v": 0.44 },
+ "A129": { "s": 2, "v": "1998M11" },
+ "B129": { "s": 4, "v": 0.27 },
+ "A130": { "s": 2, "v": "1998M12" },
+ "B130": { "s": 4, "v": -0.22 },
+ "A131": { "s": 2, "v": "1999M01" },
+ "B131": { "s": 4, "v": 0.6 },
+ "A132": { "s": 2, "v": "1999M02" },
+ "B132": { "s": 4, "v": -0.16 },
+ "A133": { "s": 2, "v": "1999M03" },
+ "B133": { "s": 4, "v": 0.49 },
+ "A134": { "s": 2, "v": "1999M04" },
+ "B134": { "s": 4, "v": 0.54 },
+ "A135": { "s": 2, "v": "1999M05" },
+ "B135": { "s": 4, "v": 0.48 },
+ "A136": { "s": 2, "v": "1999M06" },
+ "B136": { "s": 4, "v": 0.8 },
+ "A137": { "s": 2, "v": "1999M07" },
+ "B137": { "s": 4, "v": 0.37 },
+ "A138": { "s": 2, "v": "1999M08" },
+ "B138": { "s": 4, "v": 0.37 },
+ "A139": { "s": 2, "v": "1999M09" },
+ "B139": { "s": 4, "v": 0.84 },
+ "A140": { "s": 2, "v": "1999M10" },
+ "B140": { "s": 4, "v": 0.78 },
+ "A141": { "s": 2, "v": "1999M11" },
+ "B141": { "s": 4, "v": 0 },
+ "A142": { "s": 2, "v": "1999M12" },
+ "B142": { "s": 4, "v": 0.36 },
+ "A143": { "s": 2, "v": "2000M01" },
+ "B143": { "s": 4, "v": 0.77 },
+ "A144": { "s": 2, "v": "2000M02" },
+ "B144": { "s": 4, "v": -0.31 },
+ "A145": { "s": 2, "v": "2000M03" },
+ "B145": { "s": 4, "v": 0.77 },
+ "A146": { "s": 2, "v": "2000M04" },
+ "B146": { "s": 4, "v": 0.61 },
+ "A147": { "s": 2, "v": "2000M05" },
+ "B147": { "s": 4, "v": 0.4 },
+ "A148": { "s": 2, "v": "2000M06" },
+ "B148": { "s": 4, "v": 0.35 },
+ "A149": { "s": 2, "v": "2000M07" },
+ "B149": { "s": 4, "v": 0.5 },
+ "A150": { "s": 2, "v": "2000M08" },
+ "B150": { "s": 4, "v": -0.5 },
+ "A151": { "s": 2, "v": "2000M09" },
+ "B151": { "s": 4, "v": 0.2 },
+ "A152": { "s": 2, "v": "2000M10" },
+ "B152": { "s": 4, "v": 1 },
+ "A153": { "s": 2, "v": "2000M11" },
+ "B153": { "s": 4, "v": 0.3 },
+ "A154": { "s": 2, "v": "2000M12" },
+ "B154": { "s": 4, "v": 0 },
+ "A155": { "s": 2, "v": "2001M01" },
+ "B155": { "s": 4, "v": 0.15 },
+ "A156": { "s": 2, "v": "2001M02" },
+ "B156": { "s": 4, "v": 0.2 },
+ "A157": { "s": 2, "v": "2001M03" },
+ "B157": { "s": 4, "v": 0.59 },
+ "A158": { "s": 2, "v": "2001M04" },
+ "B158": { "s": 4, "v": 1.23 },
+ "A159": { "s": 2, "v": "2001M05" },
+ "B159": { "s": 4, "v": 1.4 },
+ "A160": { "s": 2, "v": "2001M06" },
+ "B160": { "s": 4, "v": 1.53 },
+ "A161": { "s": 2, "v": "2001M07" },
+ "B161": { "s": 4, "v": 0.75 },
+ "A162": { "s": 2, "v": "2001M08" },
+ "B162": { "s": 4, "v": 0.33 },
+ "A163": { "s": 2, "v": "2001M09" },
+ "B163": { "s": 4, "v": 0.65 },
+ "A164": { "s": 2, "v": "2001M10" },
+ "B164": { "s": 4, "v": 0.65 },
+ "A165": { "s": 2, "v": "2001M11" },
+ "B165": { "s": 4, "v": 0.37 },
+ "A166": { "s": 2, "v": "2001M12" },
+ "B166": { "s": 4, "v": 0.46 },
+ "A167": { "s": 2, "v": "2002M01" },
+ "B167": { "s": 4, "v": 0.91 },
+ "A168": { "s": 2, "v": "2002M02" },
+ "B168": { "s": 4, "v": -0.27 },
+ "A169": { "s": 2, "v": "2002M03" },
+ "B169": { "s": 4, "v": 0.41 },
+ "A170": { "s": 2, "v": "2002M04" },
+ "B170": { "s": 4, "v": 0.05 },
+ "A171": { "s": 2, "v": "2002M05" },
+ "B171": { "s": 4, "v": -0.05 },
+ "A172": { "s": 2, "v": "2002M06" },
+ "B172": { "s": 4, "v": 0.45 },
+ "A173": { "s": 2, "v": "2002M07" },
+ "B173": { "s": 4, "v": 0.09 },
+ "A174": { "s": 2, "v": "2002M08" },
+ "B174": { "s": 4, "v": -0.54 },
+ "A175": { "s": 2, "v": "2002M09" },
+ "B175": { "s": 4, "v": 0.5 },
+ "A176": { "s": 2, "v": "2002M10" },
+ "B176": { "s": 4, "v": 0.54 },
+ "A177": { "s": 2, "v": "2002M11" },
+ "B177": { "s": 4, "v": -0.18 },
+ "A178": { "s": 2, "v": "2002M12" },
+ "B178": { "s": 4, "v": 0.09 },
+ "A179": { "s": 2, "v": "2003M01" },
+ "B179": { "s": 4, "v": 0.36 },
+ "A180": { "s": 2, "v": "2003M02" },
+ "B180": { "s": 4, "v": -0.18 },
+ "A181": { "s": 2, "v": "2003M03" },
+ "B181": { "s": 4, "v": 1.07 },
+ "A182": { "s": 2, "v": "2003M04" },
+ "B182": { "s": 4, "v": 0.13 },
+ "A183": { "s": 2, "v": "2003M05" },
+ "B183": { "s": 4, "v": -0.18 },
+ "A184": { "s": 2, "v": "2003M06" },
+ "B184": { "s": 4, "v": 0.09 },
+ "A185": { "s": 2, "v": "2003M07" },
+ "B185": { "s": 4, "v": -0.13 },
+ "A186": { "s": 2, "v": "2003M08" },
+ "B186": { "s": 4, "v": -0.09 },
+ "A187": { "s": 2, "v": "2003M09" },
+ "B187": { "s": 4, "v": 0.71 },
+ "A188": { "s": 2, "v": "2003M10" },
+ "B188": { "s": 4, "v": 0.48 },
+ "A189": { "s": 2, "v": "2003M11" },
+ "B189": { "s": 4, "v": 0.13 },
+ "A190": { "s": 2, "v": "2003M12" },
+ "B190": { "s": 4, "v": 0.31 },
+ "A191": { "s": 2, "v": "2004M01" },
+ "B191": { "s": 4, "v": 0.04 },
+ "A192": { "s": 2, "v": "2004M02" },
+ "B192": { "s": 4, "v": -0.3 },
+ "A193": { "s": 2, "v": "2004M03" },
+ "B193": { "s": 4, "v": 0.57 },
+ "A194": { "s": 2, "v": "2004M04" },
+ "B194": { "s": 4, "v": 0.56 },
+ "A195": { "s": 2, "v": "2004M05" },
+ "B195": { "s": 4, "v": 0.82 },
+ "A196": { "s": 2, "v": "2004M06" },
+ "B196": { "s": 4, "v": 0.77 },
+ "A197": { "s": 2, "v": "2004M07" },
+ "B197": { "s": 4, "v": -0.47 },
+ "A198": { "s": 2, "v": "2004M08" },
+ "B198": { "s": 4, "v": 0 },
+ "A199": { "s": 2, "v": "2004M09" },
+ "B199": { "s": 4, "v": 0.43 },
+ "A200": { "s": 2, "v": "2004M10" },
+ "B200": { "s": 4, "v": 0.76 },
+ "A201": { "s": 2, "v": "2004M11" },
+ "B201": { "s": 4, "v": 0.21 },
+ "A202": { "s": 2, "v": "2004M12" },
+ "B202": { "s": 4, "v": 0.46 },
+ "A203": { "s": 2, "v": "2005M01" },
+ "B203": { "s": 4, "v": 0.08 },
+ "A204": { "s": 2, "v": "2005M02" },
+ "B204": { "s": 4, "v": 0.21 },
+ "A205": { "s": 2, "v": "2005M03" },
+ "B205": { "s": 4, "v": 0.75 },
+ "A206": { "s": 2, "v": "2005M04" },
+ "B206": { "s": 4, "v": 0.21 },
+ "A207": { "s": 2, "v": "2005M05" },
+ "B207": { "s": 4, "v": -0.54 },
+ "A208": { "s": 2, "v": "2005M06" },
+ "B208": { "s": 4, "v": 0.71 },
+ "A209": { "s": 2, "v": "2005M07" },
+ "B209": { "s": 4, "v": 0.12 },
+ "A210": { "s": 2, "v": "2005M08" },
+ "B210": { "s": 4, "v": 0.21 },
+ "A211": { "s": 2, "v": "2005M09" },
+ "B211": { "s": 4, "v": 1.52 },
+ "A212": { "s": 2, "v": "2005M10" },
+ "B212": { "s": 4, "v": 0.61 },
+ "A213": { "s": 2, "v": "2005M11" },
+ "B213": { "s": 4, "v": -0.16 },
+ "A214": { "s": 2, "v": "2005M12" },
+ "B214": { "s": 4, "v": 0.36 },
+ "A215": { "s": 2, "v": "2006M01" },
+ "B215": { "s": 4, "v": 0.32 },
+ "A216": { "s": 2, "v": "2006M02" },
+ "B216": { "s": 4, "v": -0.08 },
+ "A217": { "s": 2, "v": "2006M03" },
+ "B217": { "s": 4, "v": 1.12 },
+ "A218": { "s": 2, "v": "2006M04" },
+ "B218": { "s": 4, "v": 1.15 },
+ "A219": { "s": 2, "v": "2006M05" },
+ "B219": { "s": 4, "v": 1.45 },
+ "A220": { "s": 2, "v": "2006M06" },
+ "B220": { "s": 4, "v": 1.16 },
+ "A221": { "s": 2, "v": "2006M07" },
+ "B221": { "s": 4, "v": 0.46 },
+ "A222": { "s": 2, "v": "2006M08" },
+ "B222": { "s": 4, "v": 0.34 },
+ "A223": { "s": 2, "v": "2006M09" },
+ "B223": { "s": 4, "v": 0.61 },
+ "A224": { "s": 2, "v": "2006M10" },
+ "B224": { "s": 4, "v": 0.23 },
+ "A225": { "s": 2, "v": "2006M11" },
+ "B225": { "s": 4, "v": -0.04 },
+ "A226": { "s": 2, "v": "2006M12" },
+ "B226": { "s": 4, "v": 0.04 },
+ "A227": { "s": 2, "v": "2007M01" },
+ "B227": { "s": 4, "v": 0.26 },
+ "A228": { "s": 2, "v": "2007M02" },
+ "B228": { "s": 4, "v": 0.41 },
+ "A229": { "s": 2, "v": "2007M03" },
+ "B229": { "s": 4, "v": -0.34 },
+ "A230": { "s": 2, "v": "2007M04" },
+ "B230": { "s": 4, "v": 0.6 },
+ "A231": { "s": 2, "v": "2007M05" },
+ "B231": { "s": 4, "v": 0.86 },
+ "A232": { "s": 2, "v": "2007M06" },
+ "B232": { "s": 4, "v": 0.52 },
+ "A233": { "s": 2, "v": "2007M07" },
+ "B233": { "s": 4, "v": 0.22 },
+ "A234": { "s": 2, "v": "2007M08" },
+ "B234": { "s": 4, "v": 0.04 },
+ "A235": { "s": 2, "v": "2007M09" },
+ "B235": { "s": 4, "v": 1.32 },
+ "A236": { "s": 2, "v": "2007M10" },
+ "B236": { "s": 4, "v": 0.51 },
+ "A237": { "s": 2, "v": "2007M11" },
+ "B237": { "s": 4, "v": 0.65 },
+ "A238": { "s": 2, "v": "2007M12" },
+ "B238": { "s": 4, "v": 0.68 },
+ "A239": { "s": 2, "v": "2008M01" },
+ "B239": { "s": 4, "v": 0.18 },
+ "A240": { "s": 2, "v": "2008M02" },
+ "B240": { "s": 4, "v": 1.38 },
+ "A241": { "s": 2, "v": "2008M03" },
+ "B241": { "s": 4, "v": 1.47 },
+ "A242": { "s": 2, "v": "2008M04" },
+ "B242": { "s": 4, "v": 3.41 },
+ "A243": { "s": 2, "v": "2008M05" },
+ "B243": { "s": 4, "v": 1.37 },
+ "A244": { "s": 2, "v": "2008M06" },
+ "B244": { "s": 4, "v": 0.89 },
+ "A245": { "s": 2, "v": "2008M07" },
+ "B245": { "s": 4, "v": 0.94 },
+ "A246": { "s": 2, "v": "2008M08" },
+ "B246": { "s": 4, "v": 0.9 },
+ "A247": { "s": 2, "v": "2008M09" },
+ "B247": { "s": 4, "v": 0.86 },
+ "A248": { "s": 2, "v": "2008M10" },
+ "B248": { "s": 4, "v": 2.16 },
+ "A249": { "s": 2, "v": "2008M11" },
+ "B249": { "s": 4, "v": 1.74 },
+ "A250": { "s": 2, "v": "2008M12" },
+ "B250": { "s": 4, "v": 1.52 },
+ "A251": { "s": 2, "v": "2009M01" },
+ "B251": { "s": 4, "v": 0.57 },
+ "A252": { "s": 2, "v": "2009M02" },
+ "B252": { "s": 4, "v": 0.51 },
+ "A253": { "s": 2, "v": "2009M03" },
+ "B253": { "s": 4, "v": -0.59 },
+ "A254": { "s": 2, "v": "2009M04" },
+ "B254": { "s": 4, "v": 0.45 },
+ "A255": { "s": 2, "v": "2009M05" },
+ "B255": { "s": 4, "v": 1.13 },
+ "A256": { "s": 2, "v": "2009M06" },
+ "B256": { "s": 4, "v": 1.38 },
+ "A257": { "s": 2, "v": "2009M07" },
+ "B257": { "s": 4, "v": 0.17 },
+ "A258": { "s": 2, "v": "2009M08" },
+ "B258": { "s": 4, "v": 0.52 },
+ "A259": { "s": 2, "v": "2009M09" },
+ "B259": { "s": 4, "v": 0.78 },
+ "A260": { "s": 2, "v": "2009M10" },
+ "B260": { "s": 4, "v": 1.14 },
+ "A261": { "s": 2, "v": "2009M11" },
+ "B261": { "s": 4, "v": 0.74 },
+ "A262": { "s": 2, "v": "2009M12" },
+ "B262": { "s": 4, "v": 0.48 },
+ "A263": { "s": 2, "v": "2010M01" },
+ "B263": { "s": 4, "v": -0.31 },
+ "A264": { "s": 2, "v": "2010M02" },
+ "B264": { "s": 4, "v": 1.15 },
+ "A265": { "s": 2, "v": "2010M03" },
+ "B265": { "s": 4, "v": 0.55 },
+ "A266": { "s": 2, "v": "2010M04" },
+ "B266": { "s": 4, "v": 0.25 },
+ "A267": { "s": 2, "v": "2010M05" },
+ "B267": { "s": 4, "v": 0.41 },
+ "A268": { "s": 2, "v": "2010M06" },
+ "B268": { "s": 4, "v": -0.33 },
+ "A269": { "s": 2, "v": "2010M07" },
+ "B269": { "s": 4, "v": -0.66 },
+ "A270": { "s": 2, "v": "2010M08" },
+ "B270": { "s": 4, "v": 0.25 },
+ "A271": { "s": 2, "v": "2010M09" },
+ "B271": { "s": 4, "v": 0 },
+ "A272": { "s": 2, "v": "2010M10" },
+ "B272": { "s": 4, "v": 0.74 },
+ "A273": { "s": 2, "v": "2010M11" },
+ "B273": { "s": 4, "v": 0.05 },
+ "A274": { "s": 2, "v": "2010M12" },
+ "B274": { "s": 4, "v": 0.33 },
+ "A275": { "s": 2, "v": "2011M01" },
+ "B275": { "s": 4, "v": -0.9 },
+ "A276": { "s": 2, "v": "2011M02" },
+ "B276": { "s": 4, "v": 1.18 },
+ "A277": { "s": 2, "v": "2011M03" },
+ "B277": { "s": 4, "v": 0.95 },
+ "A278": { "s": 2, "v": "2011M04" },
+ "B278": { "s": 4, "v": 0.78 },
+ "A279": { "s": 2, "v": "2011M05" },
+ "B279": { "s": 4, "v": 0.94 },
+ "A280": { "s": 2, "v": "2011M06" },
+ "B280": { "s": 4, "v": 0.5 },
+ "A281": { "s": 2, "v": "2011M07" },
+ "B281": { "s": 4, "v": 0.11 },
+ "A282": { "s": 2, "v": "2011M08" },
+ "B282": { "s": 4, "v": 0.26 },
+ "A283": { "s": 2, "v": "2011M09" },
+ "B283": { "s": 4, "v": 0.63 },
+ "A284": { "s": 2, "v": "2011M10" },
+ "B284": { "s": 4, "v": 0.34 },
+ "A285": { "s": 2, "v": "2011M11" },
+ "B285": { "s": 4, "v": 0 },
+ "A286": { "s": 2, "v": "2011M12" },
+ "B286": { "s": 4, "v": 0.36 },
+ "A287": { "s": 2, "v": "2012M01" },
+ "B287": { "s": 4, "v": 0.28 },
+ "A288": { "s": 2, "v": "2012M02" },
+ "B288": { "s": 4, "v": 1.01 },
+ "A289": { "s": 2, "v": "2012M03" },
+ "B289": { "s": 4, "v": 1.05 },
+ "A290": { "s": 2, "v": "2012M04" },
+ "B290": { "s": 4, "v": 0.78 },
+ "A291": { "s": 2, "v": "2012M05" },
+ "B291": { "s": 4, "v": -0.03 },
+ "A292": { "s": 2, "v": "2012M06" },
+ "B292": { "s": 4, "v": 0.5 },
+ "A293": { "s": 2, "v": "2012M07" },
+ "B293": { "s": 4, "v": -0.72 },
+ "A294": { "s": 2, "v": "2012M08" },
+ "B294": { "s": 4, "v": -0.15 },
+ "A295": { "s": 2, "v": "2012M09" },
+ "B295": { "s": 4, "v": 0.76 },
+ "A296": { "s": 2, "v": "2012M10" },
+ "B296": { "s": 4, "v": 0.28 },
+ "A297": { "s": 2, "v": "2012M11" },
+ "B297": { "s": 4, "v": 0.32 },
+ "A298": { "s": 2, "v": "2012M12" },
+ "B298": { "s": 4, "v": 0.05 },
+ "A299": { "s": 2, "v": "2013M01" },
+ "B299": { "s": 4, "v": 0.27 },
+ "A300": { "s": 2, "v": "2013M02" },
+ "B300": { "s": 4, "v": 1.64 },
+ "A301": { "s": 2, "v": "2013M03" },
+ "B301": { "s": 4, "v": 0.2 },
+ "A302": { "s": 2, "v": "2013M04" },
+ "B302": { "s": 4, "v": 0.19 },
+ "A303": { "s": 2, "v": "2013M05" },
+ "B303": { "s": 4, "v": -0.05 },
+ "A304": { "s": 2, "v": "2013M06" },
+ "B304": { "s": 4, "v": 0.53 },
+ "A305": { "s": 2, "v": "2013M07" },
+ "B305": { "s": 4, "v": -0.27 },
+ "A306": { "s": 2, "v": "2013M08" },
+ "B306": { "s": 4, "v": 0.34 },
+ "A307": { "s": 2, "v": "2013M09" },
+ "B307": { "s": 4, "v": 0.34 },
+ "A308": { "s": 2, "v": "2013M10" },
+ "B308": { "s": 4, "v": 0 },
+ "A309": { "s": 2, "v": "2013M11" },
+ "B309": { "s": 4, "v": 0.36 },
+ "A310": { "s": 2, "v": "2013M12" },
+ "B310": { "s": 4, "v": 0.53 },
+ "A311": { "s": 2, "v": "2014M01" },
+ "B311": { "s": 4, "v": -0.72 },
+ "A312": { "s": 2, "v": "2014M02" },
+ "B312": { "s": 4, "v": 0.67 },
+ "A313": { "s": 2, "v": "2014M03" },
+ "B313": { "s": 4, "v": 0.24 },
+ "A314": { "s": 2, "v": "2014M04" },
+ "B314": { "s": 4, "v": 0.31 },
+ "A315": { "s": 2, "v": "2014M05" },
+ "B315": { "s": 4, "v": 0.07 },
+ "A316": { "s": 2, "v": "2014M06" },
+ "B316": { "s": 4, "v": 0.36 },
+ "A317": { "s": 2, "v": "2014M07" },
+ "B317": { "s": 4, "v": -0.17 },
+ "A318": { "s": 2, "v": "2014M08" },
+ "B318": { "s": 4, "v": 0.24 },
+ "A319": { "s": 2, "v": "2014M09" },
+ "B319": { "s": 4, "v": -0.12 },
+ "A320": { "s": 2, "v": "2014M10" },
+ "B320": { "s": 4, "v": 0.14 },
+ "A321": { "s": 2, "v": "2014M11" },
+ "B321": { "s": 4, "v": -0.52 },
+ "A322": { "s": 2, "v": "2014M12" },
+ "B322": { "s": 4, "v": 0.31 },
+ "A323": { "s": 2, "v": "2015M01" },
+ "B323": { "s": 4, "v": -0.71 },
+ "A324": { "s": 2, "v": "2015M02" },
+ "B324": { "s": 4, "v": 0.67 },
+ "A325": { "s": 2, "v": "2015M03" },
+ "B325": { "s": 4, "v": 1.02 },
+ "A326": { "s": 2, "v": "2015M04" },
+ "B326": { "s": 4, "v": 0.14 },
+ "A327": { "s": 2, "v": "2015M05" },
+ "B327": { "s": 4, "v": 0.28 },
+ "A328": { "s": 2, "v": "2015M06" },
+ "B328": { "s": 4, "v": 0.26 },
+ "A329": { "s": 2, "v": "2015M07" },
+ "B329": { "s": 4, "v": 0.16 },
+ "A330": { "s": 2, "v": "2015M08" },
+ "B330": { "s": 4, "v": 0.53 },
+ "A331": { "s": 2, "v": "2015M09" },
+ "B331": { "s": 4, "v": -0.39 },
+ "A332": { "s": 2, "v": "2015M10" },
+ "B332": { "s": 4, "v": 0.07 },
+ "A333": { "s": 2, "v": "2015M11" },
+ "B333": { "s": 4, "v": -0.35 },
+ "A334": { "s": 2, "v": "2015M12" },
+ "B334": { "s": 4, "v": 0.33 },
+ "A335": { "s": 2, "v": "2016M01" },
+ "B335": { "s": 4, "v": -0.58 },
+ "A336": { "s": 2, "v": "2016M02" },
+ "B336": { "s": 4, "v": 0.68 },
+ "A337": { "s": 2, "v": "2016M03" },
+ "B337": { "s": 4, "v": 0.37 },
+ "A338": { "s": 2, "v": "2016M04" },
+ "B338": { "s": 4, "v": 0.21 },
+ "A339": { "s": 2, "v": "2016M05" },
+ "B339": { "s": 4, "v": 0.42 },
+ "A340": { "s": 2, "v": "2016M06" },
+ "B340": { "s": 4, "v": 0.18 },
+ "A341": { "s": 2, "v": "2016M07" },
+ "B341": { "s": 4, "v": -0.32 },
+ "A342": { "s": 2, "v": "2016M08" },
+ "B342": { "s": 4, "v": 0.34 },
+ "A343": { "s": 2, "v": "2016M09" },
+ "B343": { "s": 4, "v": 0.48 },
+ "A344": { "s": 2, "v": "2016M10" },
+ "B344": { "s": 4, "v": 0 },
+ "A345": { "s": 2, "v": "2016M11" },
+ "B345": { "s": 4, "v": -0.02 },
+ "A346": { "s": 2, "v": "2016M12" },
+ "B346": { "s": 4, "v": 0.14 },
+ "A347": { "s": 2, "v": "2017M01" },
+ "B347": { "s": 4, "v": -0.57 },
+ "A348": { "s": 2, "v": "2017M02" },
+ "B348": { "s": 4, "v": 0.71 },
+ "A349": { "s": 2, "v": "2017M03" },
+ "B349": { "s": 4, "v": 0.07 },
+ "A350": { "s": 2, "v": "2017M04" },
+ "B350": { "s": 4, "v": 0.5 },
+ "A351": { "s": 2, "v": "2017M05" },
+ "B351": { "s": 4, "v": 0.2 },
+ "A352": { "s": 2, "v": "2017M06" },
+ "B352": { "s": 4, "v": 0 },
+ "A353": { "s": 2, "v": "2017M07" },
+ "B353": { "s": 4, "v": -0.02 },
+ "A354": { "s": 2, "v": "2017M08" },
+ "B354": { "s": 4, "v": 0.25 },
+ "A355": { "s": 2, "v": "2017M09" },
+ "B355": { "s": 4, "v": 0.14 },
+ "A356": { "s": 2, "v": "2017M10" },
+ "B356": { "s": 4, "v": 0.47 },
+ "A357": { "s": 2, "v": "2017M11" },
+ "B357": { "s": 4, "v": -0.16 },
+ "A358": { "s": 2, "v": "2017M12" },
+ "B358": { "s": 4, "v": 0.27 },
+ "A359": { "s": 2, "v": "2018M01" },
+ "B359": { "s": 4, "v": -0.09 },
+ "A360": { "s": 2, "v": "2018M02" },
+ "B360": { "s": 4, "v": 0.6 },
+ "A361": { "s": 2, "v": "2018M03" },
+ "B361": { "s": 4, "v": 0.56 },
+ "A362": { "s": 2, "v": "2018M04" },
+ "B362": { "s": 4, "v": 0.04 },
+ "A363": { "s": 2, "v": "2018M05" },
+ "B363": { "s": 4, "v": -0.09 },
+ "A364": { "s": 2, "v": "2018M06" },
+ "B364": { "s": 4, "v": 0.62 },
+ "A365": { "s": 2, "v": "2018M07" },
+ "B365": { "s": 4, "v": 0.04 },
+ "A366": { "s": 2, "v": "2018M08" },
+ "B366": { "s": 4, "v": 0.2 },
+ "A367": { "s": 2, "v": "2018M09" },
+ "B367": { "s": 4, "v": 0.24 },
+ "A368": { "s": 2, "v": "2018M10" },
+ "B368": { "s": 4, "v": 0.57 },
+ "A369": { "s": 2, "v": "2018M11" },
+ "B369": { "s": 4, "v": 0.24 },
+ "A370": { "s": 2, "v": "2018M12" },
+ "B370": { "s": 4, "v": 0.74 },
+ "A371": { "s": 2, "v": "2019M01" },
+ "B371": { "s": 4, "v": -0.41 },
+ "A372": { "s": 2, "v": "2019M02" },
+ "B372": { "s": 4, "v": 0.19 },
+ "A373": { "s": 2, "v": "2019M03" },
+ "B373": { "s": 4, "v": 0.52 },
+ "A374": { "s": 2, "v": "2019M04" },
+ "B374": { "s": 4, "v": 0.37 },
+ "A375": { "s": 2, "v": "2019M05" },
+ "B375": { "s": 4, "v": 0.21 },
+ "A376": { "s": 2, "v": "2019M06" },
+ "B376": { "s": 4, "v": 0.38 },
+ "A377": { "s": 2, "v": "2019M07" },
+ "B377": { "s": 4, "v": -0.21 },
+ "A378": { "s": 2, "v": "2019M08" },
+ "B378": { "s": 4, "v": 0.28 },
+ "A379": { "s": 2, "v": "2019M09" },
+ "B379": { "s": 4, "v": 0.09 },
+ "A380": { "s": 2, "v": "2019M10" },
+ "B380": { "s": 4, "v": 0.36 },
+ "A381": { "s": 2, "v": "2019M11" },
+ "B381": { "s": 4, "v": 0.13 },
+ "A382": { "s": 2, "v": "2019M12" },
+ "B382": { "s": 4, "v": 0.11 },
+ "A383": { "s": 2, "v": "2020M01" },
+ "B383": { "s": 4, "v": -0.74 },
+ "A384": { "s": 2, "v": "2020M02" },
+ "B384": { "s": 4, "v": 0.92 },
+ "A385": { "s": 2, "v": "2020M03" },
+ "B385": { "s": 4, "v": 0.23 },
+ "A386": { "s": 2, "v": "2020M04" },
+ "B386": { "s": 4, "v": 0.48 },
+ "A387": { "s": 2, "v": "2020M05" },
+ "B387": { "s": 4, "v": 0.54 },
+ "A388": { "s": 2, "v": "2020M06" },
+ "B388": { "s": 4, "v": 0.44 },
+ "A389": { "s": 2, "v": "2020M07" },
+ "B389": { "s": 4, "v": 0.15 },
+ "A390": { "s": 2, "v": "2020M08" },
+ "B390": { "s": 4, "v": 0.46 },
+ "A391": { "s": 2, "v": "2020M09" },
+ "B391": { "s": 4, "v": 0.39 },
+ "A392": { "s": 2, "v": "2020M10" },
+ "B392": { "s": 4, "v": 0.43 },
+ "A393": { "s": 2, "v": "2020M11" },
+ "B393": { "s": 4, "v": 0.04 },
+ "A394": { "s": 2, "v": "2020M12" },
+ "B394": { "s": 4, "v": 0.2 },
+ "A395": { "s": 2, "v": "2021M01" },
+ "B395": { "s": 4, "v": -0.06 },
+ "A396": { "s": 2, "v": "2021M02" },
+ "B396": { "s": 4, "v": 0.69 },
+ "A397": { "s": 2, "v": "2021M03" },
+ "B397": { "s": 4, "v": 0.49 },
+ "A398": { "s": 2, "v": "2021M04" },
+ "B398": { "s": 4, "v": 0.71 },
+ "A399": { "s": 2, "v": "2021M05" },
+ "B399": { "s": 4, "v": 0.42 },
+ "A400": { "s": 2, "v": "2021M06" },
+ "B400": { "s": 4, "v": 0.26 },
+ "A401": { "s": 2, "v": "2021M07" },
+ "B401": { "s": 4, "v": 0.16 },
+ "A402": { "s": 2, "v": "2021M08" },
+ "B402": { "s": 4, "v": 0.46 },
+ "A403": { "s": 2, "v": "2021M09" },
+ "B403": { "s": 4, "v": 0.47 },
+ "A404": { "s": 2, "v": "2021M10" },
+ "B404": { "s": 4, "v": 0.59 },
+ "A405": { "s": 2, "v": "2021M11" },
+ "B405": { "s": 4, "v": 0.35 },
+ "A406": { "s": 2, "v": "2021M12" },
+ "B406": { "s": 4, "v": 0.45 },
+ "A407": { "s": 2, "v": "2022M01" },
+ "B407": { "s": 4, "v": 0.5 },
+ "A408": { "s": 2, "v": "2022M02" },
+ "B408": { "s": 4, "v": 1.16 },
+ "A409": { "s": 2, "v": "2022M03" },
+ "B409": { "s": 4, "v": 0.94 },
+ "A410": { "s": 2, "v": "2022M04" },
+ "B410": { "s": 4, "v": 1.25 },
+ "A411": { "s": 2, "v": "2022M05" },
+ "B411": { "s": 4, "v": 0.77 },
+ "A412": { "s": 2, "v": "2022M06" },
+ "B412": { "s": 4, "v": 1.41 },
+ "A413": { "s": 2, "v": "2022M07" },
+ "B413": { "s": 4, "v": 1.17 },
+ "A414": { "s": 2, "v": "2022M08" },
+ "B414": { "s": 4, "v": 0.29 },
+ "A415": { "s": 2, "v": "2022M09" },
+ "B415": { "s": 4, "v": 0.09 },
+ "A416": { "s": 2, "v": "2022M10" },
+ "B416": { "s": 4, "v": 0.67 },
+ "A417": { "s": 2, "v": "2022M11" },
+ "B417": { "s": 4, "v": 0.29 },
+ "A418": { "s": 2, "v": "2022M12" },
+ "B418": { "s": 4, "v": 0.66 },
+ "A419": { "s": 2, "v": "2023M01" },
+ "B419": { "s": 4, "v": 0.85 },
+ "A420": { "s": 2, "v": "2023M02" },
+ "B420": { "s": 4, "v": 1.39 },
+ "A421": { "s": 2, "v": "2023M03" },
+ "B421": { "s": 4, "v": 0.59 },
+ "A422": { "s": 2, "v": "2023M04" },
+ "B422": { "s": 4, "v": 1.31 },
+ "A423": { "s": 2, "v": "2023M05" },
+ "B423": { "s": 4, "v": 0.39 },
+ "A424": { "s": 2, "v": "2023M06" },
+ "B424": { "s": 4, "v": 0.85 },
+ "A425": { "s": 2, "v": "2023M07" },
+ "B425": { "s": 4, "v": 0.03 },
+ "A426": { "s": 2, "v": "2023M08" },
+ "B426": { "s": 4, "v": 0.34 },
+ "A427": { "s": 2, "v": "2023M09" },
+ "B427": { "s": 4, "v": 0.35 },
+ "A428": { "s": 2, "v": "2023M10" },
+ "B428": { "s": 4, "v": 0.6 },
+ "A429": { "s": 2, "v": "2023M11" },
+ "B429": { "s": 4, "v": 0.38 },
+ "A430": { "s": 2, "v": "2023M12" },
+ "B430": { "s": 4, "v": 0.41 },
+ "A431": { "s": 2, "v": "2024M01" },
+ "B431": { "s": 4, "v": -0.16 },
+ "A432": { "s": 2, "v": "2024M02" },
+ "B432": { "s": 4, "v": 1.33 },
+ "A433": { "s": 2, "v": "2024M03" },
+ "B433": { "s": 4, "v": 0.8 },
+ "A434": { "s": 2, "v": "2024M04" },
+ "B434": { "s": 4, "v": 0.55 },
+ "A435": { "s": 2, "v": "2024M05" },
+ "B435": { "s": 4, "v": 0.58 },
+ "A436": { "s": 2, "v": "2024M06" },
+ "B436": { "s": 4, "v": 0.48 },
+ "A437": { "s": 2, "v": "2024M07" },
+ "B437": { "s": 4, "v": 0.46 },
+ "A438": { "s": 2, "v": "2024M08" },
+ "B438": { "s": 4, "v": 0.09 },
+ "A439": { "s": 2, "v": "2024M09" },
+ "B439": { "s": 4, "v": -0.24 },
+ "A440": { "s": 2, "v": "2024M10" },
+ "B440": { "s": 4, "v": 0.28 },
+ "A441": { "s": 2, "v": "2024M11" },
+ "B441": { "s": 4, "v": 0.09 },
+ "A442": { "s": 2, "v": "2024M12" },
+ "B442": { "s": 4, "v": 0.39 },
+ "A443": { "s": 2, "v": "2025M01" },
+ "B443": { "s": 4, "v": -0.27 },
+ "A444": { "s": 2, "v": "2025M02" },
+ "B444": { "s": 4, "v": 0.91 },
+ "A445": { "s": 2, "v": "2025M03" },
+ "B445": { "s": 4, "v": 0.37 },
+ "A446": { "s": 2, "v": "2025M04" },
+ "B446": { "s": 4, "v": 0.93 },
+ "A447": { "s": 2, "v": "2025M05" },
+ "B447": { "s": 4, "v": 0.2 },
+ "A448": { "s": 2, "v": "2025M06" },
+ "B448": { "s": 4, "v": 0.84 },
+ "A449": { "s": 2, "v": "2025M07" },
+ "B449": { "s": 4, "v": 0.32 },
+ "A450": { "s": 2, "v": "2025M08" },
+ "B450": { "s": 4, "v": -0.15 },
+ "A451": { "s": 2, "v": "2025M09" },
+ "B451": { "s": 4, "v": 0.11 },
+ "A452": { "s": 2, "v": "2025M10" },
+ "B452": { "s": 4, "v": 0.47 },
+ "A453": { "s": 2, "v": "2025M11" },
+ "B453": { "s": 4, "v": -0.48 },
+ "A454": { "s": 2, "v": "2025M12" },
+ "B454": { "s": 4, "v": 1.15 },
+ "A455": { "s": 2, "v": "2026M01" },
+ "B455": { "s": 4, "v": 0.38 },
+ "A456": { "s": 2, "v": "2026M02" },
+ "B456": { "s": 4, "v": 0.94 },
+ "A457": { "s": 2, "v": "2026M03" },
+ "B457": { "s": 4, "v": 0.55 },
+ "A458": { "s": 2, "v": "2026M04" },
+ "B458": { "s": 4, "v": 0.81 },
+ "A459": { "s": 2, "v": "2026M05" },
+ "B459": { "s": 4, "v": 0.07 },
+ "A460": { "s": 2, "v": "2026M06" },
+ "B460": { "s": 4, "v": 0.94 },
+ "A461": { "s": 2, "v": "2026M07" },
+ "B461": { "s": 4, "v": 0.36 }
+ },
+ "columns": [
+ { "start": 1, "end": 1, "size": 69 },
+ { "start": 2, "end": 2, "size": 95 },
+ { "start": 3, "end": 4, "size": 55 }
+ ],
+ "rows": [ { "start": 1, "end": 1, "size": 19 } ],
+ "merges": [],
+ "defaults": { "colWidth": 53, "rowHeight": 15 },
+ "hidden": 0,
+ "views": [
+ {
+ "workbookView": 0,
+ "panes": {
+ "type": "frozen",
+ "columns": 1,
+ "rows": 2,
+ "firstVisibleCell": "B3",
+ "activePane": "bottomEnd"
+ },
+ "activeCell": "D9"
+ }
+ ],
+ "pageMargins": {
+ "left": 0.75,
+ "right": 0.75,
+ "top": 0.75,
+ "bottom": 0.5,
+ "header": 0.5,
+ "footer": 0.75
+ },
+ "notes": [
+ {
+ "ref": "A412",
+ "author": "IUSR",
+ "text": "The price change in passenger transport by air (07332) in June 2022 was underestimated but corrected in the compilation a month later.\n"
+ },
+ {
+ "ref": "A413",
+ "author": "IUSR",
+ "text": "The price change in passenger transport by air (07332) in July 2022 is due to a price increase in airfares that month (0.43% effect) in addition to undervalued price levels in the compilation in June 2022 (0.29% effect)\n"
+ }
+ ]
+ }
+ ],
+ "names": [],
+ "calculationProperties": {
+ "iterate": false,
+ "iterateCount": 100,
+ "iterateDelta": 0.001,
+ "epoch": 1900
+ },
+ "styles": [
+ {
+ "fontFamily": "Calibri",
+ "fontSize": 11,
+ "color": { "type": "srgb", "value": "000000" }
+ },
+ {
+ "fontFamily": "Calibri",
+ "fontSize": 14,
+ "color": { "type": "srgb", "value": "000000" },
+ "bold": true
+ },
+ {
+ "fontFamily": "Calibri",
+ "fontSize": 11,
+ "color": { "type": "srgb", "value": "000000" },
+ "bold": true
+ },
+ {
+ "horizontalAlignment": "right",
+ "fontFamily": "Calibri",
+ "fontSize": 11,
+ "color": { "type": "srgb", "value": "000000" }
+ },
+ {
+ "numberFormat": "0.00",
+ "fontFamily": "Calibri",
+ "fontSize": 11,
+ "color": { "type": "srgb", "value": "000000" }
+ }
+ ],
+ "tables": [],
+ "views": [ {} ],
+ "theme": {
+ "name": "Office Theme",
+ "colorScheme": {
+ "name": "Office",
+ "dk1": { "type": "system", "value": "windowText" },
+ "lt1": { "type": "system", "value": "window" },
+ "dk2": { "type": "srgb", "value": "1F497D" },
+ "lt2": { "type": "srgb", "value": "EEECE1" },
+ "accent1": { "type": "srgb", "value": "4F81BD" },
+ "accent2": { "type": "srgb", "value": "C0504D" },
+ "accent3": { "type": "srgb", "value": "9BBB59" },
+ "accent4": { "type": "srgb", "value": "8064A2" },
+ "accent5": { "type": "srgb", "value": "4BACC6" },
+ "accent6": { "type": "srgb", "value": "F79646" },
+ "hlink": { "type": "srgb", "value": "0000FF" },
+ "folHlink": { "type": "srgb", "value": "800080" }
+ },
+ "fontScheme": {
+ "name": "Office",
+ "major": {
+ "latin": { "typeface": "Cambria" }
+ },
+ "minor": {
+ "latin": { "typeface": "Calibri" }
+ }
+ }
+ },
+ "namedStyles": {
+ "Normal": {
+ "name": "Normal",
+ "fontFamily": "Calibri",
+ "fontSize": 11,
+ "color": { "type": "srgb", "value": "000000" },
+ "builtinId": 0
+ }
+ },
+ "formulas": [],
+ "meta": {
+ "app": {
+ "name": "Microsoft Excel",
+ "variant": "Macintosh",
+ "version": "16.0300"
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/index.ts b/tests/index.ts
index b60e4a2..bf85b07 100644
--- a/tests/index.ts
+++ b/tests/index.ts
@@ -57,6 +57,7 @@ const tests = [
'tests/excel/errors-gsheets.xlsx',
'tests/excel/external-refs.xlsx',
'tests/excel/fonts.xlsx',
+ 'tests/excel/freeze-panes.xlsx',
'tests/excel/grouped-grouped-charts.xlsx',
'tests/excel/gt-in-attr-value.xlsx',
'tests/excel/hidden-sheets.xlsx',