@extend-ai/react-xlsx 0.16.2 → 0.16.3

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/index.cjs CHANGED
@@ -4471,6 +4471,7 @@ function parseWorkbookStyles(archive) {
4471
4471
  const xml = readArchiveText2(archive, "xl/styles.xml");
4472
4472
  if (!xml) {
4473
4473
  return {
4474
+ differentialStyles: [],
4474
4475
  defaultFont: null,
4475
4476
  namedCellStyleByName: {},
4476
4477
  styleById: {},
@@ -4480,6 +4481,7 @@ function parseWorkbookStyles(archive) {
4480
4481
  const document2 = parseXml2(xml);
4481
4482
  if (!document2) {
4482
4483
  return {
4484
+ differentialStyles: [],
4483
4485
  defaultFont: null,
4484
4486
  namedCellStyleByName: {},
4485
4487
  styleById: {},
@@ -4496,6 +4498,7 @@ function parseWorkbookStyles(archive) {
4496
4498
  const tableStylesNode = getFirstDescendant(document2, "tableStyles");
4497
4499
  if (!cellXfsNode) {
4498
4500
  return {
4501
+ differentialStyles: [],
4499
4502
  defaultFont: null,
4500
4503
  namedCellStyleByName: {},
4501
4504
  styleById: {},
@@ -4552,6 +4555,7 @@ function parseWorkbookStyles(archive) {
4552
4555
  sizePt: typeof normalFont.size === "number" ? normalFont.size : void 0
4553
4556
  } : null;
4554
4557
  return {
4558
+ differentialStyles,
4555
4559
  defaultFont,
4556
4560
  namedCellStyleByName,
4557
4561
  styleById,
@@ -4592,10 +4596,11 @@ function parseSpreadsheetBooleanAttribute(node, name) {
4592
4596
  }
4593
4597
  return value !== "0" && value !== "false";
4594
4598
  }
4595
- function parseStandardConditionalFormatRule(cfRuleNode, ranges) {
4599
+ function parseStandardConditionalFormatRule(cfRuleNode, ranges, differentialStyles = []) {
4596
4600
  const type = cfRuleNode.getAttribute("type");
4597
4601
  const rawPriority = Number(cfRuleNode.getAttribute("priority") ?? Number.NaN);
4598
4602
  const priority = Number.isFinite(rawPriority) ? rawPriority : Number.MAX_SAFE_INTEGER;
4603
+ const formulas = getChildElements(cfRuleNode, "formula").map((formulaNode) => (formulaNode.textContent ?? "").trim()).filter((formula) => formula.length > 0);
4599
4604
  if (type === "colorScale") {
4600
4605
  const colorScaleNode = getFirstChild(cfRuleNode, "colorScale");
4601
4606
  if (!colorScaleNode) {
@@ -4656,7 +4661,34 @@ function parseStandardConditionalFormatRule(cfRuleNode, ranges) {
4656
4661
  showValue: parseSpreadsheetBooleanAttribute(iconSetNode, "showValue")
4657
4662
  };
4658
4663
  }
4659
- return null;
4664
+ const rawDxfId = Number(cfRuleNode.getAttribute("dxfId") ?? Number.NaN);
4665
+ if (!type || !Number.isFinite(rawDxfId)) {
4666
+ return null;
4667
+ }
4668
+ const style = differentialStyles[rawDxfId];
4669
+ if (!style) {
4670
+ return null;
4671
+ }
4672
+ const rawRank = Number(cfRuleNode.getAttribute("rank") ?? Number.NaN);
4673
+ const rawStdDev = Number(cfRuleNode.getAttribute("stdDev") ?? Number.NaN);
4674
+ return {
4675
+ aboveAverage: parseSpreadsheetBooleanAttribute(cfRuleNode, "aboveAverage"),
4676
+ bottom: parseSpreadsheetBooleanAttribute(cfRuleNode, "bottom"),
4677
+ equalAverage: parseSpreadsheetBooleanAttribute(cfRuleNode, "equalAverage"),
4678
+ formulas,
4679
+ kind: "styled",
4680
+ operator: cfRuleNode.getAttribute("operator") ?? void 0,
4681
+ percent: parseSpreadsheetBooleanAttribute(cfRuleNode, "percent"),
4682
+ priority,
4683
+ rank: Number.isFinite(rawRank) ? rawRank : void 0,
4684
+ ranges,
4685
+ ruleType: type,
4686
+ stdDev: Number.isFinite(rawStdDev) ? rawStdDev : void 0,
4687
+ stopIfTrue: parseSpreadsheetBooleanAttribute(cfRuleNode, "stopIfTrue"),
4688
+ style,
4689
+ text: cfRuleNode.getAttribute("text") ?? void 0,
4690
+ timePeriod: cfRuleNode.getAttribute("timePeriod") ?? void 0
4691
+ };
4660
4692
  }
4661
4693
  function parseExtendedConditionalFormatRule(cfRuleNode, ranges) {
4662
4694
  const type = cfRuleNode.getAttribute("type");
@@ -4767,14 +4799,14 @@ function mergeConditionalFormatRule(baseRule, extendedRule) {
4767
4799
  }
4768
4800
  return baseRule;
4769
4801
  }
4770
- function parseConditionalFormatRules(document2) {
4802
+ function parseConditionalFormatRules(document2, differentialStyles = []) {
4771
4803
  const standardRules = [];
4772
4804
  const extendedRules = [];
4773
4805
  getLocalElements(document2, "conditionalFormatting").forEach((conditionalFormattingNode) => {
4774
4806
  const isExtended = conditionalFormattingNode.namespaceURI !== SPREADSHEET_NS;
4775
4807
  const ranges = isExtended ? parseSqrefRanges(getFirstChild(conditionalFormattingNode, "sqref")?.textContent ?? "") : parseSqrefRanges(conditionalFormattingNode.getAttribute("sqref"));
4776
4808
  getChildElements(conditionalFormattingNode, "cfRule").forEach((cfRuleNode) => {
4777
- const parsedRule = isExtended ? parseExtendedConditionalFormatRule(cfRuleNode, ranges) : parseStandardConditionalFormatRule(cfRuleNode, ranges);
4809
+ const parsedRule = isExtended ? parseExtendedConditionalFormatRule(cfRuleNode, ranges) : parseStandardConditionalFormatRule(cfRuleNode, ranges, differentialStyles);
4778
4810
  if (parsedRule) {
4779
4811
  if (isExtended) {
4780
4812
  extendedRules.push(parsedRule);
@@ -4820,8 +4852,9 @@ function parseSheetState(archive, path, options) {
4820
4852
  return null;
4821
4853
  }
4822
4854
  const includeCachedFormulaValues = options?.includeCachedFormulaValues ?? true;
4855
+ const autoFilterRanges = parseSqrefRanges(getLocalElements(document2, "autoFilter")[0]?.getAttribute("ref"));
4823
4856
  const cachedFormulaValues = {};
4824
- const conditionalFormatRules = parseConditionalFormatRules(document2);
4857
+ const conditionalFormatRules = parseConditionalFormatRules(document2, options?.differentialStyles ?? []);
4825
4858
  const sparklines = parseSheetSparklines(document2, options?.themePalette);
4826
4859
  const sheetFormatNode = getLocalElements(document2, "sheetFormatPr")[0] ?? null;
4827
4860
  const sheetViewNode = getLocalElements(document2, "sheetView")[0] ?? null;
@@ -4913,6 +4946,7 @@ function parseSheetState(archive, path, options) {
4913
4946
  }
4914
4947
  });
4915
4948
  return {
4949
+ autoFilterRanges,
4916
4950
  cachedFormulaValues,
4917
4951
  columnWidthCharacterWidthPx,
4918
4952
  colWidthOverridesPx,
@@ -6078,12 +6112,13 @@ function parseWorkbookStructureAssetsFromArchive(archive, options) {
6078
6112
  const workbookSheets = parseWorkbookSheets(archive);
6079
6113
  const theme = parseWorkbookTheme(archive);
6080
6114
  const themePalette = buildThemePalette(theme);
6081
- const { defaultFont, namedCellStyleByName, styleById, tableStyleByName } = parseWorkbookStyles(archive);
6115
+ const { defaultFont, differentialStyles, namedCellStyleByName, styleById, tableStyleByName } = parseWorkbookStyles(archive);
6082
6116
  return {
6083
6117
  contentTypes,
6084
6118
  namedCellStyleByName,
6085
6119
  sheetStatesByWorkbookSheetIndex: workbookSheets.map((sheet) => parseSheetState(archive, sheet.path, {
6086
6120
  ...options,
6121
+ differentialStyles,
6087
6122
  defaultFont,
6088
6123
  themePalette
6089
6124
  })),
@@ -7237,6 +7272,7 @@ function buildSheetList(workbook, sheetStatesByWorkbookSheetIndex, themePalette,
7237
7272
  const usedRange = worksheet.usedRange();
7238
7273
  if (!usedRange) {
7239
7274
  sheets.push({
7275
+ autoFilterRanges: sheetState?.autoFilterRanges ?? [],
7240
7276
  cachedFormulaValues: sheetState?.cachedFormulaValues ?? {},
7241
7277
  columnWidthCharacterWidthPx: sheetState?.columnWidthCharacterWidthPx,
7242
7278
  colWidthOverridesPx: sheetState?.colWidthOverridesPx ?? {},
@@ -7323,6 +7359,7 @@ function buildSheetList(workbook, sheetStatesByWorkbookSheetIndex, themePalette,
7323
7359
  return colWidthsCache;
7324
7360
  };
7325
7361
  const sheet = {
7362
+ autoFilterRanges: sheetState?.autoFilterRanges ?? [],
7326
7363
  cachedFormulaValues: sheetState?.cachedFormulaValues ?? {},
7327
7364
  columnWidthCharacterWidthPx: sheetState?.columnWidthCharacterWidthPx,
7328
7365
  colWidthOverridesPx: sheetState?.colWidthOverridesPx ?? {},
@@ -7703,9 +7740,9 @@ function rangeContainsCell(range, cell) {
7703
7740
  const normalized = normalizeRange(range);
7704
7741
  return cell.row >= normalized.start.row && cell.row <= normalized.end.row && cell.col >= normalized.start.col && cell.col <= normalized.end.col;
7705
7742
  }
7706
- function mapWorksheetTables(worksheet) {
7743
+ function mapWorksheetTables(worksheet, autoFilterRanges = []) {
7707
7744
  const rawTables = worksheet?.tables ?? [];
7708
- return rawTables.flatMap((table, index) => {
7745
+ const mappedTables = rawTables.flatMap((table, index) => {
7709
7746
  const rawColumns = Array.isArray(table.columns) ? table.columns : [];
7710
7747
  const rawName = typeof table.name === "string" ? table.name : `Table${index + 1}`;
7711
7748
  const rawDisplayName = typeof table.displayName === "string" ? table.displayName : typeof table.name === "string" ? table.name : `Table ${index + 1}`;
@@ -7733,6 +7770,34 @@ function mapWorksheetTables(worksheet) {
7733
7770
  totalsRowShown: resolveWorkbookTableBoolean(table.totalsRowShown)
7734
7771
  }];
7735
7772
  });
7773
+ const existingReferences = new Set(mappedTables.map((table) => table.reference));
7774
+ const mappedAutoFilterTables = autoFilterRanges.flatMap((range, index) => {
7775
+ const reference = rangeToA1(range);
7776
+ if (existingReferences.has(reference)) {
7777
+ return [];
7778
+ }
7779
+ const columnCount = Math.max(0, range.end.col - range.start.col + 1);
7780
+ const columns = Array.from({ length: columnCount }, (_, columnIndex) => {
7781
+ const headerValue = worksheet ? decodeHtmlEntities(worksheet.getFormattedValueAt(range.start.row, range.start.col + columnIndex) ?? "") : "";
7782
+ return {
7783
+ id: columnIndex + 1,
7784
+ index: columnIndex,
7785
+ name: headerValue.trim().length > 0 ? headerValue : `Column ${columnIndex + 1}`
7786
+ };
7787
+ });
7788
+ return [{
7789
+ columns,
7790
+ displayName: `AutoFilter ${index + 1}`,
7791
+ end: range.end,
7792
+ headerRowCount: 1,
7793
+ name: `__autofilter_${index + 1}_${reference}`,
7794
+ reference,
7795
+ start: range.start,
7796
+ totalsRowCount: 0,
7797
+ totalsRowShown: false
7798
+ }];
7799
+ });
7800
+ return [...mappedTables, ...mappedAutoFilterTables];
7736
7801
  }
7737
7802
  function resolveWorkbookTableCount(value, fallback) {
7738
7803
  if (typeof value === "number" && Number.isFinite(value) && value >= 0) {
@@ -9037,8 +9102,8 @@ function useXlsxViewerController(options) {
9037
9102
  }
9038
9103
  }, [activeSheetIndex, sheets, workbook]);
9039
9104
  const tables = React.useMemo(
9040
- () => isWorkerBacked ? workerTablesByWorkbookSheetIndex[activeSheet?.workbookSheetIndex ?? -1] ?? [] : mapWorksheetTables(getActiveWorksheet()),
9041
- [activeSheet?.workbookSheetIndex, getActiveWorksheet, isWorkerBacked, revision, workerTablesByWorkbookSheetIndex]
9105
+ () => isWorkerBacked ? workerTablesByWorkbookSheetIndex[activeSheet?.workbookSheetIndex ?? -1] ?? [] : mapWorksheetTables(getActiveWorksheet(), activeSheet?.autoFilterRanges ?? []),
9106
+ [activeSheet?.autoFilterRanges, activeSheet?.workbookSheetIndex, getActiveWorksheet, isWorkerBacked, revision, workerTablesByWorkbookSheetIndex]
9042
9107
  );
9043
9108
  const getCellSnapshotAsync = React.useCallback((workbookSheetIndex, row, col) => {
9044
9109
  if (!isWorkerBacked) {
@@ -11089,6 +11154,570 @@ function useXlsxViewerController(options) {
11089
11154
  var React4 = __toESM(require("react"), 1);
11090
11155
  var import_react_virtual = require("@tanstack/react-virtual");
11091
11156
 
11157
+ // src/builtin-table-styles.ts
11158
+ var BUILTIN_TABLE_STYLES = {
11159
+ TableStyleLight1: {
11160
+ wholeTable: { "font": { "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 1 }, "style": "thin" }, "bottom": { "color": { "theme": 1 }, "style": "thin" } } },
11161
+ headerRow: { "font": { "bold": true, "color": { "theme": 1 } }, "border": { "bottom": { "color": { "theme": 1 }, "style": "thin" } } },
11162
+ totalRow: { "font": { "bold": true, "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 1 }, "style": "thin" } } },
11163
+ firstColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11164
+ lastColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11165
+ firstRowStripe: { "fill": { "color": { "theme": 0, "tint": -0.15 }, "fillType": "solid" } },
11166
+ firstColumnStripe: { "fill": { "color": { "theme": 0, "tint": -0.15 }, "fillType": "solid" } }
11167
+ },
11168
+ TableStyleLight2: {
11169
+ wholeTable: { "font": { "color": { "theme": 4, "tint": -0.25 } }, "border": { "top": { "color": { "theme": 4 }, "style": "thin" }, "bottom": { "color": { "theme": 4 }, "style": "thin" } } },
11170
+ headerRow: { "font": { "bold": true, "color": { "theme": 4, "tint": -0.25 } }, "border": { "bottom": { "color": { "theme": 4 }, "style": "thin" } } },
11171
+ totalRow: { "font": { "bold": true, "color": { "theme": 4, "tint": -0.25 } }, "border": { "top": { "color": { "theme": 4 }, "style": "thin" } } },
11172
+ firstColumn: { "font": { "bold": true, "color": { "theme": 4, "tint": -0.25 } } },
11173
+ lastColumn: { "font": { "bold": true, "color": { "theme": 4, "tint": -0.25 } } },
11174
+ firstRowStripe: { "fill": { "color": { "theme": 4, "tint": 0.8 }, "fillType": "solid" } },
11175
+ firstColumnStripe: { "fill": { "color": { "theme": 4, "tint": 0.8 }, "fillType": "solid" } }
11176
+ },
11177
+ TableStyleLight3: {
11178
+ wholeTable: { "font": { "color": { "theme": 5, "tint": -0.25 } }, "border": { "top": { "color": { "theme": 5 }, "style": "thin" }, "bottom": { "color": { "theme": 5 }, "style": "thin" } } },
11179
+ headerRow: { "font": { "bold": true, "color": { "theme": 5, "tint": -0.25 } }, "border": { "bottom": { "color": { "theme": 5 }, "style": "thin" } } },
11180
+ totalRow: { "font": { "bold": true, "color": { "theme": 5, "tint": -0.25 } }, "border": { "top": { "color": { "theme": 5 }, "style": "thin" } } },
11181
+ firstColumn: { "font": { "bold": true, "color": { "theme": 5, "tint": -0.25 } } },
11182
+ lastColumn: { "font": { "bold": true, "color": { "theme": 5, "tint": -0.25 } } },
11183
+ firstRowStripe: { "fill": { "color": { "theme": 5, "tint": 0.8 }, "fillType": "solid" } },
11184
+ firstColumnStripe: { "fill": { "color": { "theme": 5, "tint": 0.8 }, "fillType": "solid" } }
11185
+ },
11186
+ TableStyleLight4: {
11187
+ wholeTable: { "font": { "color": { "theme": 6, "tint": -0.25 } }, "border": { "top": { "color": { "theme": 6 }, "style": "thin" }, "bottom": { "color": { "theme": 6 }, "style": "thin" } } },
11188
+ headerRow: { "font": { "bold": true, "color": { "theme": 6, "tint": -0.25 } }, "border": { "bottom": { "color": { "theme": 6 }, "style": "thin" } } },
11189
+ totalRow: { "font": { "bold": true, "color": { "theme": 6, "tint": -0.25 } }, "border": { "top": { "color": { "theme": 6 }, "style": "thin" } } },
11190
+ firstColumn: { "font": { "bold": true, "color": { "theme": 6, "tint": -0.25 } } },
11191
+ lastColumn: { "font": { "bold": true, "color": { "theme": 6, "tint": -0.25 } } },
11192
+ firstRowStripe: { "fill": { "color": { "theme": 6, "tint": 0.8 }, "fillType": "solid" } },
11193
+ firstColumnStripe: { "fill": { "color": { "theme": 6, "tint": 0.8 }, "fillType": "solid" } }
11194
+ },
11195
+ TableStyleLight5: {
11196
+ wholeTable: { "font": { "color": { "theme": 7, "tint": -0.25 } }, "border": { "top": { "color": { "theme": 7 }, "style": "thin" }, "bottom": { "color": { "theme": 7 }, "style": "thin" } } },
11197
+ headerRow: { "font": { "bold": true, "color": { "theme": 7, "tint": -0.25 } }, "border": { "bottom": { "color": { "theme": 7 }, "style": "thin" } } },
11198
+ totalRow: { "font": { "bold": true, "color": { "theme": 7, "tint": -0.25 } }, "border": { "top": { "color": { "theme": 7 }, "style": "thin" } } },
11199
+ firstColumn: { "font": { "bold": true, "color": { "theme": 7, "tint": -0.25 } } },
11200
+ lastColumn: { "font": { "bold": true, "color": { "theme": 7, "tint": -0.25 } } },
11201
+ firstRowStripe: { "fill": { "color": { "theme": 7, "tint": 0.8 }, "fillType": "solid" } },
11202
+ firstColumnStripe: { "fill": { "color": { "theme": 7, "tint": 0.8 }, "fillType": "solid" } }
11203
+ },
11204
+ TableStyleLight6: {
11205
+ wholeTable: { "font": { "color": { "theme": 8, "tint": -0.25 } }, "border": { "top": { "color": { "theme": 8 }, "style": "thin" }, "bottom": { "color": { "theme": 8 }, "style": "thin" } } },
11206
+ headerRow: { "font": { "bold": true, "color": { "theme": 8, "tint": -0.25 } }, "border": { "bottom": { "color": { "theme": 8 }, "style": "thin" } } },
11207
+ totalRow: { "font": { "bold": true, "color": { "theme": 8, "tint": -0.25 } }, "border": { "top": { "color": { "theme": 8 }, "style": "thin" } } },
11208
+ firstColumn: { "font": { "bold": true, "color": { "theme": 8, "tint": -0.25 } } },
11209
+ lastColumn: { "font": { "bold": true, "color": { "theme": 8, "tint": -0.25 } } },
11210
+ firstRowStripe: { "fill": { "color": { "theme": 8, "tint": 0.8 }, "fillType": "solid" } },
11211
+ firstColumnStripe: { "fill": { "color": { "theme": 8, "tint": 0.8 }, "fillType": "solid" } }
11212
+ },
11213
+ TableStyleLight7: {
11214
+ wholeTable: { "font": { "color": { "theme": 9, "tint": -0.25 } }, "border": { "top": { "color": { "theme": 9 }, "style": "thin" }, "bottom": { "color": { "theme": 9 }, "style": "thin" } } },
11215
+ headerRow: { "font": { "bold": true, "color": { "theme": 9, "tint": -0.25 } }, "border": { "bottom": { "color": { "theme": 9 }, "style": "thin" } } },
11216
+ totalRow: { "font": { "bold": true, "color": { "theme": 9, "tint": -0.25 } }, "border": { "top": { "color": { "theme": 9 }, "style": "thin" } } },
11217
+ firstColumn: { "font": { "bold": true, "color": { "theme": 9, "tint": -0.25 } } },
11218
+ lastColumn: { "font": { "bold": true, "color": { "theme": 9, "tint": -0.25 } } },
11219
+ firstRowStripe: { "fill": { "color": { "theme": 9, "tint": 0.8 }, "fillType": "solid" } },
11220
+ firstColumnStripe: { "fill": { "color": { "theme": 9, "tint": 0.8 }, "fillType": "solid" } }
11221
+ },
11222
+ TableStyleLight8: {
11223
+ wholeTable: { "font": { "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 1 }, "style": "thin" }, "right": { "color": { "theme": 1 }, "style": "thin" }, "bottom": { "color": { "theme": 1 }, "style": "thin" }, "left": { "color": { "theme": 1 }, "style": "thin" } } },
11224
+ headerRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 1 }, "fillType": "solid" } },
11225
+ totalRow: { "font": { "bold": true, "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 1 }, "style": "double" } } },
11226
+ firstColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11227
+ lastColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11228
+ firstRowStripe: { "border": { "top": { "color": { "theme": 1 }, "style": "thin" } } },
11229
+ secondRowStripe: { "border": { "top": { "color": { "theme": 1 }, "style": "thin" } } },
11230
+ firstColumnStripe: { "border": { "left": { "color": { "theme": 1 }, "style": "thin" } } },
11231
+ secondColumnStripe: { "border": { "left": { "color": { "theme": 1 }, "style": "thin" } } }
11232
+ },
11233
+ TableStyleLight9: {
11234
+ wholeTable: { "font": { "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 4 }, "style": "thin" }, "right": { "color": { "theme": 4 }, "style": "thin" }, "bottom": { "color": { "theme": 4 }, "style": "thin" }, "left": { "color": { "theme": 4 }, "style": "thin" } } },
11235
+ headerRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 4 }, "fillType": "solid" } },
11236
+ totalRow: { "font": { "bold": true, "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 4 }, "style": "double" } } },
11237
+ firstColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11238
+ lastColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11239
+ firstRowStripe: { "border": { "top": { "color": { "theme": 4 }, "style": "thin" } } },
11240
+ secondRowStripe: { "border": { "top": { "color": { "theme": 4 }, "style": "thin" } } },
11241
+ firstColumnStripe: { "border": { "left": { "color": { "theme": 4 }, "style": "thin" } } },
11242
+ secondColumnStripe: { "border": { "left": { "color": { "theme": 4 }, "style": "thin" } } }
11243
+ },
11244
+ TableStyleLight10: {
11245
+ wholeTable: { "font": { "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 5 }, "style": "thin" }, "right": { "color": { "theme": 5 }, "style": "thin" }, "bottom": { "color": { "theme": 5 }, "style": "thin" }, "left": { "color": { "theme": 5 }, "style": "thin" } } },
11246
+ headerRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 5 }, "fillType": "solid" } },
11247
+ totalRow: { "font": { "bold": true, "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 5 }, "style": "double" } } },
11248
+ firstColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11249
+ lastColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11250
+ firstRowStripe: { "border": { "top": { "color": { "theme": 5 }, "style": "thin" } } },
11251
+ secondRowStripe: { "border": { "top": { "color": { "theme": 5 }, "style": "thin" } } },
11252
+ firstColumnStripe: { "border": { "left": { "color": { "theme": 5 }, "style": "thin" } } },
11253
+ secondColumnStripe: { "border": { "left": { "color": { "theme": 5 }, "style": "thin" } } }
11254
+ },
11255
+ TableStyleLight11: {
11256
+ wholeTable: { "font": { "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 6 }, "style": "thin" }, "right": { "color": { "theme": 6 }, "style": "thin" }, "bottom": { "color": { "theme": 6 }, "style": "thin" }, "left": { "color": { "theme": 6 }, "style": "thin" } } },
11257
+ headerRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 6 }, "fillType": "solid" } },
11258
+ totalRow: { "font": { "bold": true, "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 6 }, "style": "double" } } },
11259
+ firstColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11260
+ lastColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11261
+ firstRowStripe: { "border": { "top": { "color": { "theme": 6 }, "style": "thin" } } },
11262
+ secondRowStripe: { "border": { "top": { "color": { "theme": 6 }, "style": "thin" } } },
11263
+ firstColumnStripe: { "border": { "left": { "color": { "theme": 6 }, "style": "thin" } } },
11264
+ secondColumnStripe: { "border": { "left": { "color": { "theme": 6 }, "style": "thin" } } }
11265
+ },
11266
+ TableStyleLight12: {
11267
+ wholeTable: { "font": { "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 7 }, "style": "thin" }, "right": { "color": { "theme": 7 }, "style": "thin" }, "bottom": { "color": { "theme": 7 }, "style": "thin" }, "left": { "color": { "theme": 7 }, "style": "thin" } } },
11268
+ headerRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 7 }, "fillType": "solid" } },
11269
+ totalRow: { "font": { "bold": true, "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 7 }, "style": "double" } } },
11270
+ firstColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11271
+ lastColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11272
+ firstRowStripe: { "border": { "top": { "color": { "theme": 7 }, "style": "thin" } } },
11273
+ secondRowStripe: { "border": { "top": { "color": { "theme": 7 }, "style": "thin" } } },
11274
+ firstColumnStripe: { "border": { "left": { "color": { "theme": 7 }, "style": "thin" } } },
11275
+ secondColumnStripe: { "border": { "left": { "color": { "theme": 7 }, "style": "thin" } } }
11276
+ },
11277
+ TableStyleLight13: {
11278
+ wholeTable: { "font": { "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 8 }, "style": "thin" }, "right": { "color": { "theme": 8 }, "style": "thin" }, "bottom": { "color": { "theme": 8 }, "style": "thin" }, "left": { "color": { "theme": 8 }, "style": "thin" } } },
11279
+ headerRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 8 }, "fillType": "solid" } },
11280
+ totalRow: { "font": { "bold": true, "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 8 }, "style": "double" } } },
11281
+ firstColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11282
+ lastColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11283
+ firstRowStripe: { "border": { "top": { "color": { "theme": 8 }, "style": "thin" } } },
11284
+ secondRowStripe: { "border": { "top": { "color": { "theme": 8 }, "style": "thin" } } },
11285
+ firstColumnStripe: { "border": { "left": { "color": { "theme": 8 }, "style": "thin" } } },
11286
+ secondColumnStripe: { "border": { "left": { "color": { "theme": 8 }, "style": "thin" } } }
11287
+ },
11288
+ TableStyleLight14: {
11289
+ wholeTable: { "font": { "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 9 }, "style": "thin" }, "right": { "color": { "theme": 9 }, "style": "thin" }, "bottom": { "color": { "theme": 9 }, "style": "thin" }, "left": { "color": { "theme": 9 }, "style": "thin" } } },
11290
+ headerRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 9 }, "fillType": "solid" } },
11291
+ totalRow: { "font": { "bold": true, "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 9 }, "style": "double" } } },
11292
+ firstColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11293
+ lastColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11294
+ firstRowStripe: { "border": { "top": { "color": { "theme": 9 }, "style": "thin" } } },
11295
+ secondRowStripe: { "border": { "top": { "color": { "theme": 9 }, "style": "thin" } } },
11296
+ firstColumnStripe: { "border": { "left": { "color": { "theme": 9 }, "style": "thin" } } },
11297
+ secondColumnStripe: { "border": { "left": { "color": { "theme": 9 }, "style": "thin" } } }
11298
+ },
11299
+ TableStyleLight15: {
11300
+ wholeTable: { "font": { "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 1 }, "style": "thin" }, "right": { "color": { "theme": 1 }, "style": "thin" }, "bottom": { "color": { "theme": 1 }, "style": "thin" }, "left": { "color": { "theme": 1 }, "style": "thin" }, "horizontal": { "color": { "theme": 1 }, "style": "thin" }, "vertical": { "color": { "theme": 1 }, "style": "thin" } } },
11301
+ headerRow: { "font": { "bold": true, "color": { "theme": 1 } }, "border": { "bottom": { "color": { "theme": 1 }, "style": "medium" } } },
11302
+ totalRow: { "font": { "bold": true, "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 1 }, "style": "double" } } },
11303
+ firstColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11304
+ lastColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11305
+ firstRowStripe: { "fill": { "color": { "theme": 0, "tint": -0.15 }, "fillType": "solid" } },
11306
+ firstColumnStripe: { "fill": { "color": { "theme": 0, "tint": -0.15 }, "fillType": "solid" } }
11307
+ },
11308
+ TableStyleLight16: {
11309
+ wholeTable: { "font": { "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 4 }, "style": "thin" }, "right": { "color": { "theme": 4 }, "style": "thin" }, "bottom": { "color": { "theme": 4 }, "style": "thin" }, "left": { "color": { "theme": 4 }, "style": "thin" }, "horizontal": { "color": { "theme": 4 }, "style": "thin" }, "vertical": { "color": { "theme": 4 }, "style": "thin" } } },
11310
+ headerRow: { "font": { "bold": true, "color": { "theme": 1 } }, "border": { "bottom": { "color": { "theme": 4 }, "style": "medium" } } },
11311
+ totalRow: { "font": { "bold": true, "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 4 }, "style": "double" } } },
11312
+ firstColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11313
+ lastColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11314
+ firstRowStripe: { "fill": { "color": { "theme": 4, "tint": 0.8 }, "fillType": "solid" } },
11315
+ firstColumnStripe: { "fill": { "color": { "theme": 4, "tint": 0.8 }, "fillType": "solid" } }
11316
+ },
11317
+ TableStyleLight17: {
11318
+ wholeTable: { "font": { "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 5 }, "style": "thin" }, "right": { "color": { "theme": 5 }, "style": "thin" }, "bottom": { "color": { "theme": 5 }, "style": "thin" }, "left": { "color": { "theme": 5 }, "style": "thin" }, "horizontal": { "color": { "theme": 5 }, "style": "thin" }, "vertical": { "color": { "theme": 5 }, "style": "thin" } } },
11319
+ headerRow: { "font": { "bold": true, "color": { "theme": 1 } }, "border": { "bottom": { "color": { "theme": 5 }, "style": "medium" } } },
11320
+ totalRow: { "font": { "bold": true, "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 5 }, "style": "double" } } },
11321
+ firstColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11322
+ lastColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11323
+ firstRowStripe: { "fill": { "color": { "theme": 5, "tint": 0.8 }, "fillType": "solid" } },
11324
+ firstColumnStripe: { "fill": { "color": { "theme": 5, "tint": 0.8 }, "fillType": "solid" } }
11325
+ },
11326
+ TableStyleLight18: {
11327
+ wholeTable: { "font": { "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 6 }, "style": "thin" }, "right": { "color": { "theme": 6 }, "style": "thin" }, "bottom": { "color": { "theme": 6 }, "style": "thin" }, "left": { "color": { "theme": 6 }, "style": "thin" }, "horizontal": { "color": { "theme": 6 }, "style": "thin" }, "vertical": { "color": { "theme": 6 }, "style": "thin" } } },
11328
+ headerRow: { "font": { "bold": true, "color": { "theme": 1 } }, "border": { "bottom": { "color": { "theme": 6 }, "style": "medium" } } },
11329
+ totalRow: { "font": { "bold": true, "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 6 }, "style": "double" } } },
11330
+ firstColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11331
+ lastColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11332
+ firstRowStripe: { "fill": { "color": { "theme": 6, "tint": 0.8 }, "fillType": "solid" } },
11333
+ firstColumnStripe: { "fill": { "color": { "theme": 6, "tint": 0.8 }, "fillType": "solid" } }
11334
+ },
11335
+ TableStyleLight19: {
11336
+ wholeTable: { "font": { "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 7 }, "style": "thin" }, "right": { "color": { "theme": 7 }, "style": "thin" }, "bottom": { "color": { "theme": 7 }, "style": "thin" }, "left": { "color": { "theme": 7 }, "style": "thin" }, "horizontal": { "color": { "theme": 7 }, "style": "thin" }, "vertical": { "color": { "theme": 7 }, "style": "thin" } } },
11337
+ headerRow: { "font": { "bold": true, "color": { "theme": 1 } }, "border": { "bottom": { "color": { "theme": 7 }, "style": "medium" } } },
11338
+ totalRow: { "font": { "bold": true, "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 7 }, "style": "double" } } },
11339
+ firstColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11340
+ lastColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11341
+ firstRowStripe: { "fill": { "color": { "theme": 7, "tint": 0.8 }, "fillType": "solid" } },
11342
+ firstColumnStripe: { "fill": { "color": { "theme": 7, "tint": 0.8 }, "fillType": "solid" } }
11343
+ },
11344
+ TableStyleLight20: {
11345
+ wholeTable: { "font": { "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 8 }, "style": "thin" }, "right": { "color": { "theme": 8 }, "style": "thin" }, "bottom": { "color": { "theme": 8 }, "style": "thin" }, "left": { "color": { "theme": 8 }, "style": "thin" }, "horizontal": { "color": { "theme": 8 }, "style": "thin" }, "vertical": { "color": { "theme": 8 }, "style": "thin" } } },
11346
+ headerRow: { "font": { "bold": true, "color": { "theme": 1 } }, "border": { "bottom": { "color": { "theme": 8 }, "style": "medium" } } },
11347
+ totalRow: { "font": { "bold": true, "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 8 }, "style": "double" } } },
11348
+ firstColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11349
+ lastColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11350
+ firstRowStripe: { "fill": { "color": { "theme": 8, "tint": 0.8 }, "fillType": "solid" } },
11351
+ firstColumnStripe: { "fill": { "color": { "theme": 8, "tint": 0.8 }, "fillType": "solid" } }
11352
+ },
11353
+ TableStyleLight21: {
11354
+ wholeTable: { "font": { "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 9 }, "style": "thin" }, "right": { "color": { "theme": 9 }, "style": "thin" }, "bottom": { "color": { "theme": 9 }, "style": "thin" }, "left": { "color": { "theme": 9 }, "style": "thin" }, "horizontal": { "color": { "theme": 9 }, "style": "thin" }, "vertical": { "color": { "theme": 9 }, "style": "thin" } } },
11355
+ headerRow: { "font": { "bold": true, "color": { "theme": 1 } }, "border": { "bottom": { "color": { "theme": 9 }, "style": "medium" } } },
11356
+ totalRow: { "font": { "bold": true, "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 9 }, "style": "double" } } },
11357
+ firstColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11358
+ lastColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11359
+ firstRowStripe: { "fill": { "color": { "theme": 9, "tint": 0.8 }, "fillType": "solid" } },
11360
+ firstColumnStripe: { "fill": { "color": { "theme": 9, "tint": 0.8 }, "fillType": "solid" } }
11361
+ },
11362
+ TableStyleMedium1: {
11363
+ wholeTable: { "font": { "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 1 }, "style": "thin" }, "right": { "color": { "theme": 1 }, "style": "thin" }, "bottom": { "color": { "theme": 1 }, "style": "thin" }, "left": { "color": { "theme": 1 }, "style": "thin" }, "horizontal": { "color": { "theme": 1 }, "style": "thin" } } },
11364
+ headerRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 1 }, "fillType": "solid" } },
11365
+ totalRow: { "font": { "bold": true, "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 1 }, "style": "double" } } },
11366
+ firstColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11367
+ lastColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11368
+ firstRowStripe: { "fill": { "color": { "theme": 0, "tint": -0.15 }, "fillType": "solid" } },
11369
+ firstColumnStripe: { "fill": { "color": { "theme": 0, "tint": -0.15 }, "fillType": "solid" } }
11370
+ },
11371
+ TableStyleMedium2: {
11372
+ wholeTable: { "font": { "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 4, "tint": 0.4 }, "style": "thin" }, "right": { "color": { "theme": 4, "tint": 0.4 }, "style": "thin" }, "bottom": { "color": { "theme": 4, "tint": 0.4 }, "style": "thin" }, "left": { "color": { "theme": 4, "tint": 0.4 }, "style": "thin" }, "horizontal": { "color": { "theme": 4, "tint": 0.4 }, "style": "thin" } } },
11373
+ headerRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 4 }, "fillType": "solid" } },
11374
+ totalRow: { "font": { "bold": true, "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 4 }, "style": "double" } } },
11375
+ firstColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11376
+ lastColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11377
+ firstRowStripe: { "fill": { "color": { "theme": 4, "tint": 0.8 }, "fillType": "solid" } },
11378
+ firstColumnStripe: { "fill": { "color": { "theme": 4, "tint": 0.8 }, "fillType": "solid" } }
11379
+ },
11380
+ TableStyleMedium3: {
11381
+ wholeTable: { "font": { "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 5, "tint": 0.4 }, "style": "thin" }, "right": { "color": { "theme": 5, "tint": 0.4 }, "style": "thin" }, "bottom": { "color": { "theme": 5, "tint": 0.4 }, "style": "thin" }, "left": { "color": { "theme": 5, "tint": 0.4 }, "style": "thin" }, "horizontal": { "color": { "theme": 5, "tint": 0.4 }, "style": "thin" } } },
11382
+ headerRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 5 }, "fillType": "solid" } },
11383
+ totalRow: { "font": { "bold": true, "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 5 }, "style": "double" } } },
11384
+ firstColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11385
+ lastColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11386
+ firstRowStripe: { "fill": { "color": { "theme": 5, "tint": 0.8 }, "fillType": "solid" } },
11387
+ firstColumnStripe: { "fill": { "color": { "theme": 5, "tint": 0.8 }, "fillType": "solid" } }
11388
+ },
11389
+ TableStyleMedium4: {
11390
+ wholeTable: { "font": { "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 6, "tint": 0.4 }, "style": "thin" }, "right": { "color": { "theme": 6, "tint": 0.4 }, "style": "thin" }, "bottom": { "color": { "theme": 6, "tint": 0.4 }, "style": "thin" }, "left": { "color": { "theme": 6, "tint": 0.4 }, "style": "thin" }, "horizontal": { "color": { "theme": 6, "tint": 0.4 }, "style": "thin" } } },
11391
+ headerRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 6 }, "fillType": "solid" } },
11392
+ totalRow: { "font": { "bold": true, "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 6 }, "style": "double" } } },
11393
+ firstColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11394
+ lastColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11395
+ firstRowStripe: { "fill": { "color": { "theme": 6, "tint": 0.8 }, "fillType": "solid" } },
11396
+ firstColumnStripe: { "fill": { "color": { "theme": 6, "tint": 0.8 }, "fillType": "solid" } }
11397
+ },
11398
+ TableStyleMedium5: {
11399
+ wholeTable: { "font": { "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 7, "tint": 0.4 }, "style": "thin" }, "right": { "color": { "theme": 7, "tint": 0.4 }, "style": "thin" }, "bottom": { "color": { "theme": 7, "tint": 0.4 }, "style": "thin" }, "left": { "color": { "theme": 7, "tint": 0.4 }, "style": "thin" }, "horizontal": { "color": { "theme": 7, "tint": 0.4 }, "style": "thin" } } },
11400
+ headerRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 7 }, "fillType": "solid" } },
11401
+ totalRow: { "font": { "bold": true, "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 7 }, "style": "double" } } },
11402
+ firstColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11403
+ lastColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11404
+ firstRowStripe: { "fill": { "color": { "theme": 7, "tint": 0.8 }, "fillType": "solid" } },
11405
+ firstColumnStripe: { "fill": { "color": { "theme": 7, "tint": 0.8 }, "fillType": "solid" } }
11406
+ },
11407
+ TableStyleMedium6: {
11408
+ wholeTable: { "font": { "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 8, "tint": 0.4 }, "style": "thin" }, "right": { "color": { "theme": 8, "tint": 0.4 }, "style": "thin" }, "bottom": { "color": { "theme": 8, "tint": 0.4 }, "style": "thin" }, "left": { "color": { "theme": 8, "tint": 0.4 }, "style": "thin" }, "horizontal": { "color": { "theme": 8, "tint": 0.4 }, "style": "thin" } } },
11409
+ headerRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 8 }, "fillType": "solid" } },
11410
+ totalRow: { "font": { "bold": true, "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 8 }, "style": "double" } } },
11411
+ firstColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11412
+ lastColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11413
+ firstRowStripe: { "fill": { "color": { "theme": 8, "tint": 0.8 }, "fillType": "solid" } },
11414
+ firstColumnStripe: { "fill": { "color": { "theme": 8, "tint": 0.8 }, "fillType": "solid" } }
11415
+ },
11416
+ TableStyleMedium7: {
11417
+ wholeTable: { "font": { "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 9, "tint": 0.4 }, "style": "thin" }, "right": { "color": { "theme": 9, "tint": 0.4 }, "style": "thin" }, "bottom": { "color": { "theme": 9, "tint": 0.4 }, "style": "thin" }, "left": { "color": { "theme": 9, "tint": 0.4 }, "style": "thin" }, "horizontal": { "color": { "theme": 9, "tint": 0.4 }, "style": "thin" } } },
11418
+ headerRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 9 }, "fillType": "solid" } },
11419
+ totalRow: { "font": { "bold": true, "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 9 }, "style": "double" } } },
11420
+ firstColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11421
+ lastColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11422
+ firstRowStripe: { "fill": { "color": { "theme": 9, "tint": 0.8 }, "fillType": "solid" } },
11423
+ firstColumnStripe: { "fill": { "color": { "theme": 9, "tint": 0.8 }, "fillType": "solid" } }
11424
+ },
11425
+ TableStyleMedium8: {
11426
+ wholeTable: { "font": { "color": { "theme": 1 } }, "fill": { "color": { "theme": 0, "tint": -0.15 }, "fillType": "solid" }, "border": { "horizontal": { "color": { "theme": 0 }, "style": "thin" }, "vertical": { "color": { "theme": 0 }, "style": "thin" } } },
11427
+ headerRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 1 }, "fillType": "solid" }, "border": { "bottom": { "color": { "theme": 0 }, "style": "thick" } } },
11428
+ totalRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 1 }, "fillType": "solid" }, "border": { "top": { "color": { "theme": 0 }, "style": "thick" } } },
11429
+ firstColumn: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 1 }, "fillType": "solid" } },
11430
+ lastColumn: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 1 }, "fillType": "solid" } },
11431
+ firstRowStripe: { "fill": { "color": { "theme": 0, "tint": -0.35 }, "fillType": "solid" } },
11432
+ firstColumnStripe: { "fill": { "color": { "theme": 0, "tint": -0.35 }, "fillType": "solid" } }
11433
+ },
11434
+ TableStyleMedium9: {
11435
+ wholeTable: { "font": { "color": { "theme": 1 } }, "fill": { "color": { "theme": 4, "tint": 0.8 }, "fillType": "solid" }, "border": { "horizontal": { "color": { "theme": 0 }, "style": "thin" }, "vertical": { "color": { "theme": 0 }, "style": "thin" } } },
11436
+ headerRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 4 }, "fillType": "solid" }, "border": { "bottom": { "color": { "theme": 0 }, "style": "thick" } } },
11437
+ totalRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 4 }, "fillType": "solid" }, "border": { "top": { "color": { "theme": 0 }, "style": "thick" } } },
11438
+ firstColumn: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 4 }, "fillType": "solid" } },
11439
+ lastColumn: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 4 }, "fillType": "solid" } },
11440
+ firstRowStripe: { "fill": { "color": { "theme": 4, "tint": 0.6 }, "fillType": "solid" } },
11441
+ firstColumnStripe: { "fill": { "color": { "theme": 4, "tint": 0.6 }, "fillType": "solid" } }
11442
+ },
11443
+ TableStyleMedium10: {
11444
+ wholeTable: { "font": { "color": { "theme": 1 } }, "fill": { "color": { "theme": 5, "tint": 0.8 }, "fillType": "solid" }, "border": { "horizontal": { "color": { "theme": 0 }, "style": "thin" }, "vertical": { "color": { "theme": 0 }, "style": "thin" } } },
11445
+ headerRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 5 }, "fillType": "solid" }, "border": { "bottom": { "color": { "theme": 0 }, "style": "thick" } } },
11446
+ totalRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 5 }, "fillType": "solid" }, "border": { "top": { "color": { "theme": 0 }, "style": "thick" } } },
11447
+ firstColumn: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 5 }, "fillType": "solid" } },
11448
+ lastColumn: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 5 }, "fillType": "solid" } },
11449
+ firstRowStripe: { "fill": { "color": { "theme": 5, "tint": 0.6 }, "fillType": "solid" } },
11450
+ firstColumnStripe: { "fill": { "color": { "theme": 5, "tint": 0.6 }, "fillType": "solid" } }
11451
+ },
11452
+ TableStyleMedium11: {
11453
+ wholeTable: { "font": { "color": { "theme": 1 } }, "fill": { "color": { "theme": 6, "tint": 0.8 }, "fillType": "solid" }, "border": { "horizontal": { "color": { "theme": 0 }, "style": "thin" }, "vertical": { "color": { "theme": 0 }, "style": "thin" } } },
11454
+ headerRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 6 }, "fillType": "solid" }, "border": { "bottom": { "color": { "theme": 0 }, "style": "thick" } } },
11455
+ totalRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 6 }, "fillType": "solid" }, "border": { "top": { "color": { "theme": 0 }, "style": "thick" } } },
11456
+ firstColumn: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 6 }, "fillType": "solid" } },
11457
+ lastColumn: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 6 }, "fillType": "solid" } },
11458
+ firstRowStripe: { "fill": { "color": { "theme": 6, "tint": 0.6 }, "fillType": "solid" } },
11459
+ firstColumnStripe: { "fill": { "color": { "theme": 6, "tint": 0.6 }, "fillType": "solid" } }
11460
+ },
11461
+ TableStyleMedium12: {
11462
+ wholeTable: { "font": { "color": { "theme": 1 } }, "fill": { "color": { "theme": 7, "tint": 0.8 }, "fillType": "solid" }, "border": { "horizontal": { "color": { "theme": 0 }, "style": "thin" }, "vertical": { "color": { "theme": 0 }, "style": "thin" } } },
11463
+ headerRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 7 }, "fillType": "solid" }, "border": { "bottom": { "color": { "theme": 0 }, "style": "thick" } } },
11464
+ totalRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 7 }, "fillType": "solid" }, "border": { "top": { "color": { "theme": 0 }, "style": "thick" } } },
11465
+ firstColumn: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 7 }, "fillType": "solid" } },
11466
+ lastColumn: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 7 }, "fillType": "solid" } },
11467
+ firstRowStripe: { "fill": { "color": { "theme": 7, "tint": 0.6 }, "fillType": "solid" } },
11468
+ firstColumnStripe: { "fill": { "color": { "theme": 7, "tint": 0.6 }, "fillType": "solid" } }
11469
+ },
11470
+ TableStyleMedium13: {
11471
+ wholeTable: { "font": { "color": { "theme": 1 } }, "fill": { "color": { "theme": 8, "tint": 0.8 }, "fillType": "solid" }, "border": { "horizontal": { "color": { "theme": 0 }, "style": "thin" }, "vertical": { "color": { "theme": 0 }, "style": "thin" } } },
11472
+ headerRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 8 }, "fillType": "solid" }, "border": { "bottom": { "color": { "theme": 0 }, "style": "thick" } } },
11473
+ totalRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 8 }, "fillType": "solid" }, "border": { "top": { "color": { "theme": 0 }, "style": "thick" } } },
11474
+ firstColumn: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 8 }, "fillType": "solid" } },
11475
+ lastColumn: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 8 }, "fillType": "solid" } },
11476
+ firstRowStripe: { "fill": { "color": { "theme": 8, "tint": 0.6 }, "fillType": "solid" } },
11477
+ firstColumnStripe: { "fill": { "color": { "theme": 8, "tint": 0.6 }, "fillType": "solid" } }
11478
+ },
11479
+ TableStyleMedium14: {
11480
+ wholeTable: { "font": { "color": { "theme": 1 } }, "fill": { "color": { "theme": 9, "tint": 0.8 }, "fillType": "solid" }, "border": { "horizontal": { "color": { "theme": 0 }, "style": "thin" }, "vertical": { "color": { "theme": 0 }, "style": "thin" } } },
11481
+ headerRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 9 }, "fillType": "solid" }, "border": { "bottom": { "color": { "theme": 0 }, "style": "thick" } } },
11482
+ totalRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 9 }, "fillType": "solid" }, "border": { "top": { "color": { "theme": 0 }, "style": "thick" } } },
11483
+ firstColumn: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 9 }, "fillType": "solid" } },
11484
+ lastColumn: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 9 }, "fillType": "solid" } },
11485
+ firstRowStripe: { "fill": { "color": { "theme": 9, "tint": 0.6 }, "fillType": "solid" } },
11486
+ firstColumnStripe: { "fill": { "color": { "theme": 9, "tint": 0.6 }, "fillType": "solid" } }
11487
+ },
11488
+ TableStyleMedium15: {
11489
+ wholeTable: { "font": { "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 1 }, "style": "medium" }, "right": { "color": { "theme": 1 }, "style": "thin" }, "bottom": { "color": { "theme": 1 }, "style": "medium" }, "left": { "color": { "theme": 1 }, "style": "thin" }, "horizontal": { "color": { "theme": 1 }, "style": "thin" }, "vertical": { "color": { "theme": 1 }, "style": "thin" } } },
11490
+ headerRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 1 }, "fillType": "solid" }, "border": { "bottom": { "color": { "theme": 1 }, "style": "medium" } } },
11491
+ totalRow: { "border": { "top": { "color": { "theme": 1 }, "style": "double" } } },
11492
+ firstColumn: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 1 }, "fillType": "solid" } },
11493
+ lastColumn: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 1 }, "fillType": "solid" } },
11494
+ firstRowStripe: { "fill": { "color": { "theme": 0, "tint": -0.15 }, "fillType": "solid" } },
11495
+ firstColumnStripe: { "fill": { "color": { "theme": 0, "tint": -0.15 }, "fillType": "solid" } }
11496
+ },
11497
+ TableStyleMedium16: {
11498
+ wholeTable: { "font": { "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 1 }, "style": "medium" }, "bottom": { "color": { "theme": 1 }, "style": "medium" } } },
11499
+ headerRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 4 }, "fillType": "solid" }, "border": { "bottom": { "color": { "theme": 1 }, "style": "medium" } } },
11500
+ totalRow: { "border": { "top": { "color": { "theme": 1 }, "style": "double" } } },
11501
+ firstColumn: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 4 }, "fillType": "solid" } },
11502
+ lastColumn: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 4 }, "fillType": "solid" } },
11503
+ firstRowStripe: { "fill": { "color": { "theme": 0, "tint": -0.15 }, "fillType": "solid" } },
11504
+ firstColumnStripe: { "fill": { "color": { "theme": 0, "tint": -0.15 }, "fillType": "solid" } }
11505
+ },
11506
+ TableStyleMedium17: {
11507
+ wholeTable: { "font": { "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 1 }, "style": "medium" }, "bottom": { "color": { "theme": 1 }, "style": "medium" } } },
11508
+ headerRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 5 }, "fillType": "solid" }, "border": { "bottom": { "color": { "theme": 1 }, "style": "medium" } } },
11509
+ totalRow: { "border": { "top": { "color": { "theme": 1 }, "style": "double" } } },
11510
+ firstColumn: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 5 }, "fillType": "solid" } },
11511
+ lastColumn: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 5 }, "fillType": "solid" } },
11512
+ firstRowStripe: { "fill": { "color": { "theme": 0, "tint": -0.15 }, "fillType": "solid" } },
11513
+ firstColumnStripe: { "fill": { "color": { "theme": 0, "tint": -0.15 }, "fillType": "solid" } }
11514
+ },
11515
+ TableStyleMedium18: {
11516
+ wholeTable: { "font": { "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 1 }, "style": "medium" }, "bottom": { "color": { "theme": 1 }, "style": "medium" } } },
11517
+ headerRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 6 }, "fillType": "solid" }, "border": { "bottom": { "color": { "theme": 1 }, "style": "medium" } } },
11518
+ totalRow: { "border": { "top": { "color": { "theme": 1 }, "style": "double" } } },
11519
+ firstColumn: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 6 }, "fillType": "solid" } },
11520
+ lastColumn: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 6 }, "fillType": "solid" } },
11521
+ firstRowStripe: { "fill": { "color": { "theme": 0, "tint": -0.15 }, "fillType": "solid" } },
11522
+ firstColumnStripe: { "fill": { "color": { "theme": 0, "tint": -0.15 }, "fillType": "solid" } }
11523
+ },
11524
+ TableStyleMedium19: {
11525
+ wholeTable: { "font": { "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 1 }, "style": "medium" }, "bottom": { "color": { "theme": 1 }, "style": "medium" } } },
11526
+ headerRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 7 }, "fillType": "solid" }, "border": { "bottom": { "color": { "theme": 1 }, "style": "medium" } } },
11527
+ totalRow: { "border": { "top": { "color": { "theme": 1 }, "style": "double" } } },
11528
+ firstColumn: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 7 }, "fillType": "solid" } },
11529
+ lastColumn: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 7 }, "fillType": "solid" } },
11530
+ firstRowStripe: { "fill": { "color": { "theme": 0, "tint": -0.15 }, "fillType": "solid" } },
11531
+ firstColumnStripe: { "fill": { "color": { "theme": 0, "tint": -0.15 }, "fillType": "solid" } }
11532
+ },
11533
+ TableStyleMedium20: {
11534
+ wholeTable: { "font": { "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 1 }, "style": "medium" }, "bottom": { "color": { "theme": 1 }, "style": "medium" } } },
11535
+ headerRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 8 }, "fillType": "solid" }, "border": { "bottom": { "color": { "theme": 1 }, "style": "medium" } } },
11536
+ totalRow: { "border": { "top": { "color": { "theme": 1 }, "style": "double" } } },
11537
+ firstColumn: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 8 }, "fillType": "solid" } },
11538
+ lastColumn: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 8 }, "fillType": "solid" } },
11539
+ firstRowStripe: { "fill": { "color": { "theme": 0, "tint": -0.15 }, "fillType": "solid" } },
11540
+ firstColumnStripe: { "fill": { "color": { "theme": 0, "tint": -0.15 }, "fillType": "solid" } }
11541
+ },
11542
+ TableStyleMedium21: {
11543
+ wholeTable: { "font": { "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 1 }, "style": "medium" }, "bottom": { "color": { "theme": 1 }, "style": "medium" } } },
11544
+ headerRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 9 }, "fillType": "solid" }, "border": { "bottom": { "color": { "theme": 1 }, "style": "medium" } } },
11545
+ totalRow: { "border": { "top": { "color": { "theme": 1 }, "style": "double" } } },
11546
+ firstColumn: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 9 }, "fillType": "solid" } },
11547
+ lastColumn: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 9 }, "fillType": "solid" } },
11548
+ firstRowStripe: { "fill": { "color": { "theme": 0, "tint": -0.15 }, "fillType": "solid" } },
11549
+ firstColumnStripe: { "fill": { "color": { "theme": 0, "tint": -0.15 }, "fillType": "solid" } }
11550
+ },
11551
+ TableStyleMedium22: {
11552
+ wholeTable: { "font": { "color": { "theme": 1 } }, "fill": { "color": { "theme": 0, "tint": -0.15 }, "fillType": "solid" }, "border": { "top": { "color": { "theme": 1 }, "style": "thin" }, "right": { "color": { "theme": 1 }, "style": "thin" }, "bottom": { "color": { "theme": 1 }, "style": "thin" }, "left": { "color": { "theme": 1 }, "style": "thin" }, "horizontal": { "color": { "theme": 1 }, "style": "thin" }, "vertical": { "color": { "theme": 1 }, "style": "thin" } } },
11553
+ headerRow: { "font": { "bold": true, "color": { "theme": 1 } } },
11554
+ totalRow: { "font": { "bold": true, "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 1 }, "style": "medium" } } },
11555
+ firstColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11556
+ lastColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11557
+ firstRowStripe: { "fill": { "color": { "theme": 0, "tint": -0.35 }, "fillType": "solid" } },
11558
+ firstColumnStripe: { "fill": { "color": { "theme": 0, "tint": -0.35 }, "fillType": "solid" } }
11559
+ },
11560
+ TableStyleMedium23: {
11561
+ wholeTable: { "font": { "color": { "theme": 1 } }, "fill": { "color": { "theme": 4, "tint": 0.8 }, "fillType": "solid" }, "border": { "top": { "color": { "theme": 4, "tint": 0.4 }, "style": "thin" }, "right": { "color": { "theme": 4, "tint": 0.4 }, "style": "thin" }, "bottom": { "color": { "theme": 4, "tint": 0.4 }, "style": "thin" }, "left": { "color": { "theme": 4, "tint": 0.4 }, "style": "thin" }, "horizontal": { "color": { "theme": 4, "tint": 0.4 }, "style": "thin" }, "vertical": { "color": { "theme": 4, "tint": 0.4 }, "style": "thin" } } },
11562
+ headerRow: { "font": { "bold": true, "color": { "theme": 1 } } },
11563
+ totalRow: { "font": { "bold": true, "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 4 }, "style": "medium" } } },
11564
+ firstColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11565
+ lastColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11566
+ firstRowStripe: { "fill": { "color": { "theme": 4, "tint": 0.6 }, "fillType": "solid" } },
11567
+ firstColumnStripe: { "fill": { "color": { "theme": 4, "tint": 0.6 }, "fillType": "solid" } }
11568
+ },
11569
+ TableStyleMedium24: {
11570
+ wholeTable: { "font": { "color": { "theme": 1 } }, "fill": { "color": { "theme": 5, "tint": 0.8 }, "fillType": "solid" }, "border": { "top": { "color": { "theme": 5, "tint": 0.4 }, "style": "thin" }, "right": { "color": { "theme": 5, "tint": 0.4 }, "style": "thin" }, "bottom": { "color": { "theme": 5, "tint": 0.4 }, "style": "thin" }, "left": { "color": { "theme": 5, "tint": 0.4 }, "style": "thin" }, "horizontal": { "color": { "theme": 5, "tint": 0.4 }, "style": "thin" }, "vertical": { "color": { "theme": 5, "tint": 0.4 }, "style": "thin" } } },
11571
+ headerRow: { "font": { "bold": true, "color": { "theme": 1 } } },
11572
+ totalRow: { "font": { "bold": true, "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 5 }, "style": "medium" } } },
11573
+ firstColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11574
+ lastColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11575
+ firstRowStripe: { "fill": { "color": { "theme": 5, "tint": 0.6 }, "fillType": "solid" } },
11576
+ firstColumnStripe: { "fill": { "color": { "theme": 5, "tint": 0.6 }, "fillType": "solid" } }
11577
+ },
11578
+ TableStyleMedium25: {
11579
+ wholeTable: { "font": { "color": { "theme": 1 } }, "fill": { "color": { "theme": 6, "tint": 0.8 }, "fillType": "solid" }, "border": { "top": { "color": { "theme": 6, "tint": 0.4 }, "style": "thin" }, "right": { "color": { "theme": 6, "tint": 0.4 }, "style": "thin" }, "bottom": { "color": { "theme": 6, "tint": 0.4 }, "style": "thin" }, "left": { "color": { "theme": 6, "tint": 0.4 }, "style": "thin" }, "horizontal": { "color": { "theme": 6, "tint": 0.4 }, "style": "thin" }, "vertical": { "color": { "theme": 6, "tint": 0.4 }, "style": "thin" } } },
11580
+ headerRow: { "font": { "bold": true, "color": { "theme": 1 } } },
11581
+ totalRow: { "font": { "bold": true, "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 6 }, "style": "medium" } } },
11582
+ firstColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11583
+ lastColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11584
+ firstRowStripe: { "fill": { "color": { "theme": 6, "tint": 0.6 }, "fillType": "solid" } },
11585
+ firstColumnStripe: { "fill": { "color": { "theme": 6, "tint": 0.6 }, "fillType": "solid" } }
11586
+ },
11587
+ TableStyleMedium26: {
11588
+ wholeTable: { "font": { "color": { "theme": 1 } }, "fill": { "color": { "theme": 7, "tint": 0.8 }, "fillType": "solid" }, "border": { "top": { "color": { "theme": 7, "tint": 0.4 }, "style": "thin" }, "right": { "color": { "theme": 7, "tint": 0.4 }, "style": "thin" }, "bottom": { "color": { "theme": 7, "tint": 0.4 }, "style": "thin" }, "left": { "color": { "theme": 7, "tint": 0.4 }, "style": "thin" }, "horizontal": { "color": { "theme": 7, "tint": 0.4 }, "style": "thin" }, "vertical": { "color": { "theme": 7, "tint": 0.4 }, "style": "thin" } } },
11589
+ headerRow: { "font": { "bold": true, "color": { "theme": 1 } } },
11590
+ totalRow: { "font": { "bold": true, "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 7 }, "style": "medium" } } },
11591
+ firstColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11592
+ lastColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11593
+ firstRowStripe: { "fill": { "color": { "theme": 7, "tint": 0.6 }, "fillType": "solid" } },
11594
+ firstColumnStripe: { "fill": { "color": { "theme": 7, "tint": 0.6 }, "fillType": "solid" } }
11595
+ },
11596
+ TableStyleMedium27: {
11597
+ wholeTable: { "font": { "color": { "theme": 1 } }, "fill": { "color": { "theme": 8, "tint": 0.8 }, "fillType": "solid" }, "border": { "top": { "color": { "theme": 8, "tint": 0.4 }, "style": "thin" }, "right": { "color": { "theme": 8, "tint": 0.4 }, "style": "thin" }, "bottom": { "color": { "theme": 8, "tint": 0.4 }, "style": "thin" }, "left": { "color": { "theme": 8, "tint": 0.4 }, "style": "thin" }, "horizontal": { "color": { "theme": 8, "tint": 0.4 }, "style": "thin" }, "vertical": { "color": { "theme": 8, "tint": 0.4 }, "style": "thin" } } },
11598
+ headerRow: { "font": { "bold": true, "color": { "theme": 1 } } },
11599
+ totalRow: { "font": { "bold": true, "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 8 }, "style": "medium" } } },
11600
+ firstColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11601
+ lastColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11602
+ firstRowStripe: { "fill": { "color": { "theme": 8, "tint": 0.6 }, "fillType": "solid" } },
11603
+ firstColumnStripe: { "fill": { "color": { "theme": 8, "tint": 0.6 }, "fillType": "solid" } }
11604
+ },
11605
+ TableStyleMedium28: {
11606
+ wholeTable: { "font": { "color": { "theme": 1 } }, "fill": { "color": { "theme": 9, "tint": 0.8 }, "fillType": "solid" }, "border": { "top": { "color": { "theme": 9, "tint": 0.4 }, "style": "thin" }, "right": { "color": { "theme": 9, "tint": 0.4 }, "style": "thin" }, "bottom": { "color": { "theme": 9, "tint": 0.4 }, "style": "thin" }, "left": { "color": { "theme": 9, "tint": 0.4 }, "style": "thin" }, "horizontal": { "color": { "theme": 9, "tint": 0.4 }, "style": "thin" }, "vertical": { "color": { "theme": 9, "tint": 0.4 }, "style": "thin" } } },
11607
+ headerRow: { "font": { "bold": true, "color": { "theme": 1 } } },
11608
+ totalRow: { "font": { "bold": true, "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 9 }, "style": "medium" } } },
11609
+ firstColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11610
+ lastColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11611
+ firstRowStripe: { "fill": { "color": { "theme": 9, "tint": 0.6 }, "fillType": "solid" } },
11612
+ firstColumnStripe: { "fill": { "color": { "theme": 9, "tint": 0.6 }, "fillType": "solid" } }
11613
+ },
11614
+ TableStyleDark1: {
11615
+ wholeTable: { "font": { "color": { "theme": 0 } }, "fill": { "color": { "theme": 1, "tint": 0.45 }, "fillType": "solid" } },
11616
+ headerRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 1 }, "fillType": "solid" }, "border": { "bottom": { "color": { "theme": 0 }, "style": "medium" } } },
11617
+ totalRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 1, "tint": 0.15 }, "fillType": "solid" }, "border": { "top": { "color": { "theme": 0 }, "style": "medium" } } },
11618
+ firstColumn: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 1, "tint": 0.25 }, "fillType": "solid" }, "border": { "right": { "color": { "theme": 0 }, "style": "medium" } } },
11619
+ lastColumn: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 1, "tint": 0.25 }, "fillType": "solid" }, "border": { "left": { "color": { "theme": 0 }, "style": "medium" } } },
11620
+ firstRowStripe: { "fill": { "color": { "theme": 1, "tint": 0.25 }, "fillType": "solid" } },
11621
+ firstColumnStripe: { "fill": { "color": { "theme": 1, "tint": 0.25 }, "fillType": "solid" } }
11622
+ },
11623
+ TableStyleDark2: {
11624
+ wholeTable: { "font": { "color": { "theme": 0 } }, "fill": { "color": { "theme": 4 }, "fillType": "solid" } },
11625
+ headerRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 1 }, "fillType": "solid" }, "border": { "bottom": { "color": { "theme": 0 }, "style": "medium" } } },
11626
+ totalRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 4, "tint": -0.5 }, "fillType": "solid" }, "border": { "top": { "color": { "theme": 0 }, "style": "medium" } } },
11627
+ firstColumn: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 4, "tint": -0.25 }, "fillType": "solid" }, "border": { "right": { "color": { "theme": 0 }, "style": "medium" } } },
11628
+ lastColumn: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 4, "tint": -0.25 }, "fillType": "solid" }, "border": { "left": { "color": { "theme": 0 }, "style": "medium" } } },
11629
+ firstRowStripe: { "fill": { "color": { "theme": 4, "tint": -0.25 }, "fillType": "solid" } },
11630
+ firstColumnStripe: { "fill": { "color": { "theme": 4, "tint": -0.25 }, "fillType": "solid" } }
11631
+ },
11632
+ TableStyleDark3: {
11633
+ wholeTable: { "font": { "color": { "theme": 0 } }, "fill": { "color": { "theme": 5 }, "fillType": "solid" } },
11634
+ headerRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 1 }, "fillType": "solid" }, "border": { "bottom": { "color": { "theme": 0 }, "style": "medium" } } },
11635
+ totalRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 5, "tint": -0.5 }, "fillType": "solid" }, "border": { "top": { "color": { "theme": 0 }, "style": "medium" } } },
11636
+ firstColumn: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 5, "tint": -0.25 }, "fillType": "solid" }, "border": { "right": { "color": { "theme": 0 }, "style": "medium" } } },
11637
+ lastColumn: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 5, "tint": -0.25 }, "fillType": "solid" }, "border": { "left": { "color": { "theme": 0 }, "style": "medium" } } },
11638
+ firstRowStripe: { "fill": { "color": { "theme": 5, "tint": -0.25 }, "fillType": "solid" } },
11639
+ firstColumnStripe: { "fill": { "color": { "theme": 5, "tint": -0.25 }, "fillType": "solid" } }
11640
+ },
11641
+ TableStyleDark4: {
11642
+ wholeTable: { "font": { "color": { "theme": 0 } }, "fill": { "color": { "theme": 6 }, "fillType": "solid" } },
11643
+ headerRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 1 }, "fillType": "solid" }, "border": { "bottom": { "color": { "theme": 0 }, "style": "medium" } } },
11644
+ totalRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 6, "tint": -0.5 }, "fillType": "solid" }, "border": { "top": { "color": { "theme": 0 }, "style": "medium" } } },
11645
+ firstColumn: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 6, "tint": -0.25 }, "fillType": "solid" }, "border": { "right": { "color": { "theme": 0 }, "style": "medium" } } },
11646
+ lastColumn: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 6, "tint": -0.25 }, "fillType": "solid" }, "border": { "left": { "color": { "theme": 0 }, "style": "medium" } } },
11647
+ firstRowStripe: { "fill": { "color": { "theme": 6, "tint": -0.25 }, "fillType": "solid" } },
11648
+ firstColumnStripe: { "fill": { "color": { "theme": 6, "tint": -0.25 }, "fillType": "solid" } }
11649
+ },
11650
+ TableStyleDark5: {
11651
+ wholeTable: { "font": { "color": { "theme": 0 } }, "fill": { "color": { "theme": 7 }, "fillType": "solid" } },
11652
+ headerRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 1 }, "fillType": "solid" }, "border": { "bottom": { "color": { "theme": 0 }, "style": "medium" } } },
11653
+ totalRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 7, "tint": -0.5 }, "fillType": "solid" }, "border": { "top": { "color": { "theme": 0 }, "style": "medium" } } },
11654
+ firstColumn: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 7, "tint": -0.25 }, "fillType": "solid" }, "border": { "right": { "color": { "theme": 0 }, "style": "medium" } } },
11655
+ lastColumn: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 7, "tint": -0.25 }, "fillType": "solid" }, "border": { "left": { "color": { "theme": 0 }, "style": "medium" } } },
11656
+ firstRowStripe: { "fill": { "color": { "theme": 7, "tint": -0.25 }, "fillType": "solid" } },
11657
+ firstColumnStripe: { "fill": { "color": { "theme": 7, "tint": -0.25 }, "fillType": "solid" } }
11658
+ },
11659
+ TableStyleDark6: {
11660
+ wholeTable: { "font": { "color": { "theme": 0 } }, "fill": { "color": { "theme": 8 }, "fillType": "solid" } },
11661
+ headerRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 1 }, "fillType": "solid" }, "border": { "bottom": { "color": { "theme": 0 }, "style": "medium" } } },
11662
+ totalRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 8, "tint": -0.5 }, "fillType": "solid" }, "border": { "top": { "color": { "theme": 0 }, "style": "medium" } } },
11663
+ firstColumn: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 8, "tint": -0.25 }, "fillType": "solid" }, "border": { "right": { "color": { "theme": 0 }, "style": "medium" } } },
11664
+ lastColumn: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 8, "tint": -0.25 }, "fillType": "solid" }, "border": { "left": { "color": { "theme": 0 }, "style": "medium" } } },
11665
+ firstRowStripe: { "fill": { "color": { "theme": 8, "tint": -0.25 }, "fillType": "solid" } },
11666
+ firstColumnStripe: { "fill": { "color": { "theme": 8, "tint": -0.25 }, "fillType": "solid" } }
11667
+ },
11668
+ TableStyleDark7: {
11669
+ wholeTable: { "font": { "color": { "theme": 0 } }, "fill": { "color": { "theme": 9 }, "fillType": "solid" } },
11670
+ headerRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 1 }, "fillType": "solid" }, "border": { "bottom": { "color": { "theme": 0 }, "style": "medium" } } },
11671
+ totalRow: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 9, "tint": -0.5 }, "fillType": "solid" }, "border": { "top": { "color": { "theme": 0 }, "style": "medium" } } },
11672
+ firstColumn: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 9, "tint": -0.25 }, "fillType": "solid" }, "border": { "right": { "color": { "theme": 0 }, "style": "medium" } } },
11673
+ lastColumn: { "font": { "bold": true, "color": { "theme": 0 } }, "fill": { "color": { "theme": 9, "tint": -0.25 }, "fillType": "solid" }, "border": { "left": { "color": { "theme": 0 }, "style": "medium" } } },
11674
+ firstRowStripe: { "fill": { "color": { "theme": 9, "tint": -0.25 }, "fillType": "solid" } },
11675
+ firstColumnStripe: { "fill": { "color": { "theme": 9, "tint": -0.25 }, "fillType": "solid" } }
11676
+ },
11677
+ TableStyleDark8: {
11678
+ wholeTable: { "fill": { "color": { "theme": 0, "tint": -0.15 }, "fillType": "solid" } },
11679
+ headerRow: { "font": { "color": { "theme": 0 } }, "fill": { "color": { "theme": 1 }, "fillType": "solid" } },
11680
+ totalRow: { "font": { "bold": true, "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 1 }, "style": "double" } } },
11681
+ firstColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11682
+ lastColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11683
+ firstRowStripe: { "fill": { "color": { "theme": 0, "tint": -0.35 }, "fillType": "solid" } },
11684
+ firstColumnStripe: { "fill": { "color": { "theme": 0, "tint": -0.35 }, "fillType": "solid" } }
11685
+ },
11686
+ TableStyleDark9: {
11687
+ wholeTable: { "fill": { "color": { "theme": 4, "tint": 0.8 }, "fillType": "solid" } },
11688
+ headerRow: { "font": { "color": { "theme": 0 } }, "fill": { "color": { "theme": 5 }, "fillType": "solid" } },
11689
+ totalRow: { "font": { "bold": true, "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 1 }, "style": "double" } } },
11690
+ firstColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11691
+ lastColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11692
+ firstRowStripe: { "fill": { "color": { "theme": 4, "tint": 0.6 }, "fillType": "solid" } },
11693
+ firstColumnStripe: { "fill": { "color": { "theme": 4, "tint": 0.6 }, "fillType": "solid" } }
11694
+ },
11695
+ TableStyleDark10: {
11696
+ wholeTable: { "fill": { "color": { "theme": 6, "tint": 0.8 }, "fillType": "solid" } },
11697
+ headerRow: { "font": { "color": { "theme": 0 } }, "fill": { "color": { "theme": 7 }, "fillType": "solid" } },
11698
+ totalRow: { "font": { "bold": true, "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 1 }, "style": "double" } } },
11699
+ firstColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11700
+ lastColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11701
+ firstRowStripe: { "fill": { "color": { "theme": 6, "tint": 0.6 }, "fillType": "solid" } },
11702
+ firstColumnStripe: { "fill": { "color": { "theme": 6, "tint": 0.6 }, "fillType": "solid" } }
11703
+ },
11704
+ TableStyleDark11: {
11705
+ wholeTable: { "fill": { "color": { "theme": 8, "tint": 0.8 }, "fillType": "solid" } },
11706
+ headerRow: { "font": { "color": { "theme": 0 } }, "fill": { "color": { "theme": 9 }, "fillType": "solid" } },
11707
+ totalRow: { "font": { "bold": true, "color": { "theme": 1 } }, "border": { "top": { "color": { "theme": 1 }, "style": "double" } } },
11708
+ firstColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11709
+ lastColumn: { "font": { "bold": true, "color": { "theme": 1 } } },
11710
+ firstRowStripe: { "fill": { "color": { "theme": 8, "tint": 0.6 }, "fillType": "solid" } },
11711
+ firstColumnStripe: { "fill": { "color": { "theme": 8, "tint": 0.6 }, "fillType": "solid" } }
11712
+ }
11713
+ };
11714
+ function resolveBuiltinTableStyle(name) {
11715
+ if (!name || !Object.prototype.hasOwnProperty.call(BUILTIN_TABLE_STYLES, name)) {
11716
+ return null;
11717
+ }
11718
+ return BUILTIN_TABLE_STYLES[name] ?? null;
11719
+ }
11720
+
11092
11721
  // src/cell-text-clip.ts
11093
11722
  function resolveCellTextClipOverscan(overscan, usesWrappedText) {
11094
11723
  return {
@@ -20721,7 +21350,7 @@ function canCellTextOverflow(data) {
20721
21350
  return false;
20722
21351
  }
20723
21352
  const textAlign = data.style.textAlign;
20724
- if (textAlign && textAlign !== "left" && textAlign !== "start" && textAlign !== "center") {
21353
+ if (textAlign && textAlign !== "left" && textAlign !== "start" && textAlign !== "center" && textAlign !== "right" && textAlign !== "end") {
20725
21354
  return false;
20726
21355
  }
20727
21356
  return true;
@@ -21197,7 +21826,87 @@ function mergeResolvedCellStyle(base, overlay, options) {
21197
21826
  }
21198
21827
  return nextStyle;
21199
21828
  }
21200
- function normalizeTableStyleEdges(style, table, row, col) {
21829
+ function resolveBorderEdgePriority(edge) {
21830
+ const style = typeof edge?.style === "string" ? edge.style : "none";
21831
+ const stylePriority = {
21832
+ dashed: 2,
21833
+ dashDot: 3,
21834
+ dashDotDot: 3,
21835
+ dotted: 1,
21836
+ double: 8,
21837
+ hair: 0,
21838
+ medium: 6,
21839
+ mediumDashDot: 5,
21840
+ mediumDashDotDot: 5,
21841
+ mediumDashed: 5,
21842
+ none: -1,
21843
+ slantDashDot: 4,
21844
+ thick: 7,
21845
+ thin: 4
21846
+ };
21847
+ return stylePriority[style] ?? -1;
21848
+ }
21849
+ function resolvePreferredBorderEdge(current, candidate) {
21850
+ if (!candidate || typeof candidate.style !== "string" || candidate.style === "none") {
21851
+ return current ?? null;
21852
+ }
21853
+ if (!current) {
21854
+ return candidate;
21855
+ }
21856
+ const currentPriority = resolveBorderEdgePriority(current);
21857
+ const candidatePriority = resolveBorderEdgePriority(candidate);
21858
+ if (candidatePriority > currentPriority) {
21859
+ return candidate;
21860
+ }
21861
+ return current;
21862
+ }
21863
+ function resolveMergedRegionBorderOverlay(row, col, merge, resolveBaseCellStyle) {
21864
+ const rowSpan = Math.max(1, merge?.rowSpan ?? 1);
21865
+ const colSpan = Math.max(1, merge?.colSpan ?? 1);
21866
+ if (rowSpan === 1 && colSpan === 1) {
21867
+ return null;
21868
+ }
21869
+ const endRow = row + rowSpan - 1;
21870
+ const endCol = col + colSpan - 1;
21871
+ let top = null;
21872
+ let right = null;
21873
+ let bottom = null;
21874
+ let left = null;
21875
+ for (let targetCol = col; targetCol <= endCol; targetCol += 1) {
21876
+ const topStyle = resolveBaseCellStyle(row, targetCol);
21877
+ const topBorder = topStyle?.border;
21878
+ top = resolvePreferredBorderEdge(top, topBorder?.top ?? null);
21879
+ const bottomStyle = resolveBaseCellStyle(endRow, targetCol);
21880
+ const bottomBorder = bottomStyle?.border;
21881
+ bottom = resolvePreferredBorderEdge(bottom, bottomBorder?.bottom ?? null);
21882
+ }
21883
+ for (let targetRow = row; targetRow <= endRow; targetRow += 1) {
21884
+ const leftStyle = resolveBaseCellStyle(targetRow, col);
21885
+ const leftBorder = leftStyle?.border;
21886
+ left = resolvePreferredBorderEdge(left, leftBorder?.left ?? null);
21887
+ const rightStyle = resolveBaseCellStyle(targetRow, endCol);
21888
+ const rightBorder = rightStyle?.border;
21889
+ right = resolvePreferredBorderEdge(right, rightBorder?.right ?? null);
21890
+ }
21891
+ const border = {};
21892
+ if (top) {
21893
+ border.top = top;
21894
+ }
21895
+ if (right) {
21896
+ border.right = right;
21897
+ }
21898
+ if (bottom) {
21899
+ border.bottom = bottom;
21900
+ }
21901
+ if (left) {
21902
+ border.left = left;
21903
+ }
21904
+ if (Object.keys(border).length === 0) {
21905
+ return null;
21906
+ }
21907
+ return { border };
21908
+ }
21909
+ function normalizeTableStyleEdges(style, region, row, col) {
21201
21910
  if (!style) {
21202
21911
  return null;
21203
21912
  }
@@ -21205,23 +21914,32 @@ function normalizeTableStyleEdges(style, table, row, col) {
21205
21914
  if (!border) {
21206
21915
  return style;
21207
21916
  }
21208
- const nextBorder = { ...border };
21209
- if (nextBorder.horizontal) {
21210
- if (row < table.end.row) {
21211
- nextBorder.bottom = nextBorder.bottom ?? nextBorder.horizontal;
21212
- }
21213
- delete nextBorder.horizontal;
21917
+ const nextBorder = {};
21918
+ if (border.top && row === region.startRow) {
21919
+ nextBorder.top = border.top;
21214
21920
  }
21215
- if (nextBorder.vertical) {
21216
- if (col < table.end.col) {
21217
- nextBorder.right = nextBorder.right ?? nextBorder.vertical;
21218
- }
21219
- delete nextBorder.vertical;
21921
+ if (border.bottom && row === region.endRow) {
21922
+ nextBorder.bottom = border.bottom;
21220
21923
  }
21221
- return {
21222
- ...style,
21223
- border: nextBorder
21224
- };
21924
+ if (border.left && col === region.startCol) {
21925
+ nextBorder.left = border.left;
21926
+ }
21927
+ if (border.right && col === region.endCol) {
21928
+ nextBorder.right = border.right;
21929
+ }
21930
+ if (border.horizontal && row < region.endRow) {
21931
+ nextBorder.bottom = nextBorder.bottom ?? border.horizontal;
21932
+ }
21933
+ if (border.vertical && col < region.endCol) {
21934
+ nextBorder.right = nextBorder.right ?? border.vertical;
21935
+ }
21936
+ const nextStyle = { ...style };
21937
+ if (Object.keys(nextBorder).length === 0) {
21938
+ delete nextStyle.border;
21939
+ } else {
21940
+ nextStyle.border = nextBorder;
21941
+ }
21942
+ return nextStyle;
21225
21943
  }
21226
21944
  function resolveTableCellStyle(table, row, col, activeSheet) {
21227
21945
  if (!table || !activeSheet) {
@@ -21231,37 +21949,72 @@ function resolveTableCellStyle(table, row, col, activeSheet) {
21231
21949
  if (!styleName) {
21232
21950
  return null;
21233
21951
  }
21234
- const tableStyle = activeSheet.tableStyleByName[styleName];
21952
+ const tableStyle = activeSheet.tableStyleByName[styleName] ?? resolveBuiltinTableStyle(styleName);
21235
21953
  if (!tableStyle) {
21236
21954
  return null;
21237
21955
  }
21956
+ const headerRowCount = Math.max(table.headerRowCount, 1);
21957
+ const totalsRowCount = table.totalsRowShown ? Math.max(table.totalsRowCount, 1) : 0;
21958
+ const headerEndRow = table.start.row + headerRowCount - 1;
21959
+ const totalsStartRow = table.end.row - totalsRowCount + 1;
21960
+ const bodyStartRow = headerEndRow + 1;
21961
+ const bodyEndRow = totalsStartRow - 1;
21962
+ const isHeaderRow = row >= table.start.row && row <= headerEndRow;
21963
+ const isTotalsRow = totalsRowCount > 0 && row >= totalsStartRow && row <= table.end.row;
21964
+ const isBodyRow = row >= bodyStartRow && row <= bodyEndRow;
21965
+ const isFirstColumn = col === table.start.col;
21966
+ const isLastColumn = col === table.end.col;
21967
+ const tableRegion = {
21968
+ endCol: table.end.col,
21969
+ endRow: table.end.row,
21970
+ startCol: table.start.col,
21971
+ startRow: table.start.row
21972
+ };
21973
+ const headerRegion = { ...tableRegion, endRow: headerEndRow };
21974
+ const totalsRegion = { ...tableRegion, startRow: totalsStartRow };
21238
21975
  let resolved = null;
21239
- const applyElement = (elementType, enabled = true) => {
21976
+ const applyElement = (elementType, region, enabled = true) => {
21240
21977
  if (!enabled) {
21241
21978
  return;
21242
21979
  }
21243
- const nextStyle = normalizeTableStyleEdges(tableStyle[elementType] ?? null, table, row, col);
21980
+ const nextStyle = normalizeTableStyleEdges(tableStyle[elementType] ?? null, region, row, col);
21244
21981
  if (!nextStyle) {
21245
21982
  return;
21246
21983
  }
21247
21984
  resolved = mergeResolvedCellStyle(resolved, nextStyle);
21248
21985
  };
21249
- applyElement("wholeTable");
21250
- applyElement("firstColumn", Boolean(table.styleInfo?.showFirstColumn) && col === table.start.col);
21251
- applyElement("lastColumn", Boolean(table.styleInfo?.showLastColumn) && col === table.end.col);
21252
- const headerRowCount = Math.max(table.headerRowCount, 1);
21253
- const isHeaderRow = row >= table.start.row && row < table.start.row + headerRowCount;
21254
- applyElement("headerRow", isHeaderRow);
21986
+ applyElement("wholeTable", tableRegion);
21987
+ if (isBodyRow && table.styleInfo?.showColumnStripes) {
21988
+ const isFirstStripe = (col - table.start.col) % 2 === 0;
21989
+ applyElement(isFirstStripe ? "firstColumnStripe" : "secondColumnStripe", {
21990
+ endCol: col,
21991
+ endRow: bodyEndRow,
21992
+ startCol: col,
21993
+ startRow: bodyStartRow
21994
+ });
21995
+ }
21996
+ if (isBodyRow && table.styleInfo?.showRowStripes) {
21997
+ const isFirstStripe = (row - bodyStartRow) % 2 === 0;
21998
+ applyElement(isFirstStripe ? "firstRowStripe" : "secondRowStripe", {
21999
+ ...tableRegion,
22000
+ endRow: row,
22001
+ startRow: row
22002
+ });
22003
+ }
22004
+ applyElement("lastColumn", { ...tableRegion, startCol: table.end.col }, Boolean(table.styleInfo?.showLastColumn) && isLastColumn);
22005
+ applyElement("firstColumn", { ...tableRegion, endCol: table.start.col }, Boolean(table.styleInfo?.showFirstColumn) && isFirstColumn);
22006
+ applyElement("headerRow", headerRegion, isHeaderRow);
21255
22007
  if (isHeaderRow && table.headerRowCellStyle) {
21256
22008
  const namedHeaderStyle = activeSheet.namedCellStyleByName[table.headerRowCellStyle];
21257
22009
  if (namedHeaderStyle) {
21258
22010
  resolved = mergeResolvedCellStyle(resolved, namedHeaderStyle);
21259
22011
  }
21260
22012
  }
21261
- if (table.totalsRowShown) {
21262
- const totalsRowCount = Math.max(table.totalsRowCount, 1);
21263
- applyElement("totalRow", row > table.end.row - totalsRowCount);
21264
- }
22013
+ applyElement("totalRow", totalsRegion, isTotalsRow);
22014
+ applyElement("firstHeaderCell", { ...headerRegion, endCol: table.start.col }, isHeaderRow && isFirstColumn);
22015
+ applyElement("lastHeaderCell", { ...headerRegion, startCol: table.end.col }, isHeaderRow && isLastColumn);
22016
+ applyElement("firstTotalCell", { ...totalsRegion, endCol: table.start.col }, isTotalsRow && isFirstColumn);
22017
+ applyElement("lastTotalCell", { ...totalsRegion, startCol: table.end.col }, isTotalsRow && isLastColumn);
21265
22018
  return resolved;
21266
22019
  }
21267
22020
  function getTableHeaderColumn(table, row, col) {
@@ -21968,7 +22721,8 @@ function resolveConditionalRuleThreshold(threshold, numericValues) {
21968
22721
  return null;
21969
22722
  }
21970
22723
  const fallbackValue = typeof threshold.value === "number" ? threshold.value : null;
21971
- if (threshold.type === "num" || threshold.type === "formula") {
22724
+ const thresholdType = threshold.type.trim().toLowerCase();
22725
+ if (thresholdType === "num" || thresholdType === "formula") {
21972
22726
  return fallbackValue;
21973
22727
  }
21974
22728
  if (numericValues.length === 0) {
@@ -21976,17 +22730,216 @@ function resolveConditionalRuleThreshold(threshold, numericValues) {
21976
22730
  }
21977
22731
  const minValue = Math.min(...numericValues);
21978
22732
  const maxValue = Math.max(...numericValues);
21979
- if (threshold.type === "min") {
22733
+ if (thresholdType === "min") {
21980
22734
  return minValue;
21981
22735
  }
21982
- if (threshold.type === "max") {
22736
+ if (thresholdType === "max") {
21983
22737
  return maxValue;
21984
22738
  }
21985
- if ((threshold.type === "percent" || threshold.type === "percentile") && fallbackValue !== null) {
22739
+ if (thresholdType === "automin" || thresholdType === "automaticmin") {
22740
+ return Math.min(0, minValue);
22741
+ }
22742
+ if (thresholdType === "automax" || thresholdType === "automaticmax") {
22743
+ return Math.max(0, maxValue);
22744
+ }
22745
+ if ((thresholdType === "percent" || thresholdType === "percentile") && fallbackValue !== null) {
21986
22746
  return minValue + (maxValue - minValue) * (fallbackValue / 100);
21987
22747
  }
21988
22748
  return fallbackValue;
21989
22749
  }
22750
+ function parseConditionalFormulaLiteral(formula) {
22751
+ const trimmed = formula.trim();
22752
+ if (trimmed.length === 0) {
22753
+ return null;
22754
+ }
22755
+ const withoutEquals = trimmed.startsWith("=") ? trimmed.slice(1).trim() : trimmed;
22756
+ if (withoutEquals.startsWith('"') && withoutEquals.endsWith('"') && withoutEquals.length >= 2) {
22757
+ return withoutEquals.slice(1, -1).replace(/\"\"/g, '"');
22758
+ }
22759
+ const numeric = Number(withoutEquals.replace(/,/g, ""));
22760
+ if (Number.isFinite(numeric)) {
22761
+ return numeric;
22762
+ }
22763
+ return withoutEquals;
22764
+ }
22765
+ function resolveConditionalCellIsMatch(operator, left, right, numericValue, textValue) {
22766
+ const normalizedOperator = operator.trim();
22767
+ const normalizedText = textValue.trim();
22768
+ const parsedNumericText = Number(normalizedText.replace(/,/g, ""));
22769
+ const effectiveNumericValue = numericValue ?? (Number.isFinite(parsedNumericText) ? parsedNumericText : null);
22770
+ const cellIsTextComparable = effectiveNumericValue === null && normalizedText.length > 0;
22771
+ const compareComparable = (literal, predicate) => {
22772
+ if (typeof literal !== "number") {
22773
+ return false;
22774
+ }
22775
+ if (effectiveNumericValue !== null) {
22776
+ return predicate(effectiveNumericValue, literal);
22777
+ }
22778
+ if (cellIsTextComparable) {
22779
+ return predicate(1, 0);
22780
+ }
22781
+ return false;
22782
+ };
22783
+ switch (normalizedOperator) {
22784
+ case "greaterThan":
22785
+ return compareComparable(left, (cell, value) => cell > value);
22786
+ case "greaterThanOrEqual":
22787
+ return compareComparable(left, (cell, value) => cell >= value);
22788
+ case "lessThan":
22789
+ return compareComparable(left, (cell, value) => cell < value);
22790
+ case "lessThanOrEqual":
22791
+ return compareComparable(left, (cell, value) => cell <= value);
22792
+ case "between":
22793
+ if (typeof left !== "number" || typeof right !== "number") {
22794
+ return false;
22795
+ }
22796
+ if (effectiveNumericValue === null) {
22797
+ return false;
22798
+ }
22799
+ return effectiveNumericValue >= left && effectiveNumericValue <= right;
22800
+ case "notBetween":
22801
+ if (typeof left !== "number" || typeof right !== "number") {
22802
+ return false;
22803
+ }
22804
+ if (effectiveNumericValue === null) {
22805
+ return cellIsTextComparable;
22806
+ }
22807
+ return effectiveNumericValue < left || effectiveNumericValue > right;
22808
+ case "notEqual":
22809
+ if (typeof left === "number") {
22810
+ if (effectiveNumericValue !== null) {
22811
+ return effectiveNumericValue !== left;
22812
+ }
22813
+ return cellIsTextComparable;
22814
+ }
22815
+ return left !== null && normalizedText.toLowerCase() !== String(left).toLowerCase();
22816
+ case "equal":
22817
+ default:
22818
+ if (typeof left === "number") {
22819
+ if (effectiveNumericValue !== null) {
22820
+ return effectiveNumericValue === left;
22821
+ }
22822
+ return false;
22823
+ }
22824
+ return left !== null && normalizedText.toLowerCase() === String(left).toLowerCase();
22825
+ }
22826
+ }
22827
+ function resolveConditionalFormulaComparable(formula, worksheet, sheet, batchedCells) {
22828
+ const literal = parseConditionalFormulaLiteral(formula);
22829
+ if (typeof literal === "number") {
22830
+ return literal;
22831
+ }
22832
+ const normalized = formula.trim().replace(/^=/, "").trim();
22833
+ if (normalized.length === 0) {
22834
+ return literal;
22835
+ }
22836
+ const splitReference = splitSheetFormulaReference(normalized);
22837
+ const targetSheetName = splitReference?.sheetName ?? null;
22838
+ if (targetSheetName && sheet?.name && targetSheetName !== sheet.name) {
22839
+ return literal;
22840
+ }
22841
+ const cellRef = splitReference?.range ?? normalized;
22842
+ const cell = parseA1CellReference3(cellRef.replace(/\$/g, ""));
22843
+ if (!cell) {
22844
+ return literal;
22845
+ }
22846
+ if (worksheet) {
22847
+ const numeric = getCellNumericValue(worksheet, cell.row, cell.col);
22848
+ if (numeric !== null) {
22849
+ return numeric;
22850
+ }
22851
+ return getCellDisplayValue(worksheet, cell.row, cell.col, sheet);
22852
+ }
22853
+ if (batchedCells) {
22854
+ const batched = batchedCells.get(`${cell.row}:${cell.col}`);
22855
+ if (batched) {
22856
+ const numeric = getBatchedCellNumericValue(batched);
22857
+ if (numeric !== null) {
22858
+ return numeric;
22859
+ }
22860
+ return batched.value;
22861
+ }
22862
+ }
22863
+ return literal;
22864
+ }
22865
+ function normalizeConditionalTextOperand(value) {
22866
+ if (value === null || value === void 0) {
22867
+ return "";
22868
+ }
22869
+ return String(value).trim().toLowerCase();
22870
+ }
22871
+ function resolveConditionalStyledRuleMatch(rule, numericValue, textValue, worksheet, sheet, batchedCells) {
22872
+ const normalizedRuleType = rule.ruleType.trim().toLowerCase();
22873
+ const left = resolveConditionalFormulaComparable(rule.formulas?.[0] ?? "", worksheet, sheet, batchedCells);
22874
+ const right = resolveConditionalFormulaComparable(rule.formulas?.[1] ?? "", worksheet, sheet, batchedCells);
22875
+ if (normalizedRuleType === "cellis") {
22876
+ return resolveConditionalCellIsMatch(rule.operator ?? "equal", left, right, numericValue, textValue);
22877
+ }
22878
+ const normalizedCellText = textValue.trim().toLowerCase();
22879
+ const normalizedOperand = normalizeConditionalTextOperand(rule.text) || normalizeConditionalTextOperand(left);
22880
+ switch (normalizedRuleType) {
22881
+ case "beginwith":
22882
+ case "beginswith":
22883
+ return normalizedOperand.length > 0 && normalizedCellText.startsWith(normalizedOperand);
22884
+ case "endwith":
22885
+ case "endswith":
22886
+ return normalizedOperand.length > 0 && normalizedCellText.endsWith(normalizedOperand);
22887
+ case "containstext":
22888
+ return normalizedOperand.length > 0 && normalizedCellText.includes(normalizedOperand);
22889
+ case "notcontainstext":
22890
+ return normalizedOperand.length > 0 && !normalizedCellText.includes(normalizedOperand);
22891
+ default:
22892
+ return false;
22893
+ }
22894
+ }
22895
+ var styledConditionalRulesByRuleList = /* @__PURE__ */ new WeakMap();
22896
+ function getStyledConditionalRules(rules) {
22897
+ let styledRules = styledConditionalRulesByRuleList.get(rules);
22898
+ if (!styledRules) {
22899
+ styledRules = rules.filter((rule) => rule.kind === "styled");
22900
+ styledConditionalRulesByRuleList.set(rules, styledRules);
22901
+ }
22902
+ return styledRules;
22903
+ }
22904
+ function resolveConditionalCellStyleForCell(row, col, sheet, readNumericValue, readTextValue, worksheet, batchedCells) {
22905
+ const rules = sheet?.conditionalFormatRules;
22906
+ if (!sheet || !rules || rules.length === 0) {
22907
+ return null;
22908
+ }
22909
+ const styledRules = getStyledConditionalRules(rules);
22910
+ if (styledRules.length === 0) {
22911
+ return null;
22912
+ }
22913
+ const matchedStyles = [];
22914
+ let numericValue;
22915
+ let textValue;
22916
+ for (const rule of styledRules) {
22917
+ if (!rule.ranges.some((range) => isCellInRange({ row, col }, range))) {
22918
+ continue;
22919
+ }
22920
+ if (numericValue === void 0) {
22921
+ numericValue = readNumericValue();
22922
+ }
22923
+ if (textValue === void 0) {
22924
+ textValue = readTextValue();
22925
+ }
22926
+ if (!resolveConditionalStyledRuleMatch(rule, numericValue, textValue, worksheet, sheet, batchedCells)) {
22927
+ continue;
22928
+ }
22929
+ matchedStyles.push(rule.style);
22930
+ if (rule.stopIfTrue) {
22931
+ break;
22932
+ }
22933
+ }
22934
+ if (matchedStyles.length === 0) {
22935
+ return null;
22936
+ }
22937
+ let resolved = null;
22938
+ for (let index = matchedStyles.length - 1; index >= 0; index -= 1) {
22939
+ resolved = mergeResolvedCellStyle(resolved, matchedStyles[index]);
22940
+ }
22941
+ return resolved;
22942
+ }
21990
22943
  function buildConditionalIcon(iconSet, iconId) {
21991
22944
  switch (iconSet) {
21992
22945
  case "NoIcons":
@@ -22994,6 +23947,7 @@ function GridRow({
22994
23947
  "div",
22995
23948
  {
22996
23949
  style: {
23950
+ left: cellData.spillOffsetX ?? 0,
22997
23951
  maxWidth: cellData.spillWidth,
22998
23952
  overflow: "visible",
22999
23953
  pointerEvents: "none",
@@ -23230,6 +24184,8 @@ function XlsxGrid({
23230
24184
  const firstVisibleRowRef = React4.useRef(void 0);
23231
24185
  const lastVisibleRowRef = React4.useRef(void 0);
23232
24186
  const cellRenderCacheRef = React4.useRef(/* @__PURE__ */ new Map());
24187
+ const cellBaseRawStyleCacheRef = React4.useRef(/* @__PURE__ */ new Map());
24188
+ const mergedBorderOverlayCacheRef = React4.useRef(/* @__PURE__ */ new Map());
23233
24189
  const conditionalFormatMetricsCacheRef = React4.useRef(/* @__PURE__ */ new Map());
23234
24190
  const resizeStateRef = React4.useRef(null);
23235
24191
  const resizeFrameRef = React4.useRef(null);
@@ -25255,6 +26211,8 @@ function XlsxGrid({
25255
26211
  const cellRenderCacheInvalidationRef = React4.useRef(null);
25256
26212
  if (cellRenderCacheInvalidationRef.current !== cellRenderCacheInvalidationKey) {
25257
26213
  cellRenderCacheRef.current.clear();
26214
+ cellBaseRawStyleCacheRef.current.clear();
26215
+ mergedBorderOverlayCacheRef.current.clear();
25258
26216
  cellRenderCacheInvalidationRef.current = cellRenderCacheInvalidationKey;
25259
26217
  }
25260
26218
  const getCellData = React4.useCallback((row, col) => {
@@ -25293,13 +26251,64 @@ function XlsxGrid({
25293
26251
  return mergedSecondaryData;
25294
26252
  }
25295
26253
  const merge = worksheet ? worksheet.getMergeSpan(row, col) : batchCoversRow ? batchedCell?.mergeSpan : null;
25296
- const inheritedStyle = resolveInheritedCellStyle2(activeSheet, row, col);
25297
- const worksheetStyle = batchCoversRow ? batchedCell?.style ?? null : worksheet?.getCellStyleAt(row, col) ?? null;
25298
- const rawStyle = mergeResolvedCellStyle(inheritedStyle, worksheetStyle, { replaceXfSubtrees: true });
26254
+ const resolveBaseResolvedStyle = (targetRow, targetCol) => {
26255
+ const targetCacheKey = `${targetRow}:${targetCol}`;
26256
+ const cachedBaseStyle = cellBaseRawStyleCacheRef.current.get(targetCacheKey);
26257
+ if (cachedBaseStyle !== void 0) {
26258
+ return cachedBaseStyle;
26259
+ }
26260
+ const targetBatchCoversRow = viewportRowBatch ? targetRow >= viewportRowBatch.startRow && targetRow <= viewportRowBatch.endRow : false;
26261
+ const targetBatchedCell = targetBatchCoversRow ? viewportRowBatch?.cells.get(targetCacheKey) : void 0;
26262
+ const targetInheritedStyle = resolveInheritedCellStyle2(activeSheet, targetRow, targetCol);
26263
+ const targetWorksheetStyle = targetBatchCoversRow ? targetBatchedCell?.style ?? null : worksheet?.getCellStyleAt(targetRow, targetCol) ?? null;
26264
+ const targetRawStyle = mergeResolvedCellStyle(targetInheritedStyle, targetWorksheetStyle, {
26265
+ replaceXfSubtrees: true
26266
+ });
26267
+ const targetTable = getTableAtCell(effectiveTables, targetRow, targetCol);
26268
+ const targetTableStyle = resolveTableCellStyle(targetTable, targetRow, targetCol, activeSheet);
26269
+ const resolvedStyle = mergeResolvedCellStyle(targetRawStyle, targetTableStyle);
26270
+ cellBaseRawStyleCacheRef.current.set(targetCacheKey, resolvedStyle);
26271
+ return resolvedStyle;
26272
+ };
25299
26273
  const table = getTableAtCell(effectiveTables, row, col);
25300
- const tableStyle = resolveTableCellStyle(table, row, col, activeSheet);
25301
- const mergedStyle = mergeResolvedCellStyle(rawStyle, tableStyle);
25302
- const alignment = mergedStyle?.alignment;
26274
+ const mergeRowSpan = Math.max(1, merge?.rowSpan ?? 1);
26275
+ const mergeColSpan = Math.max(1, merge?.colSpan ?? 1);
26276
+ let mergedBorderOverlay = null;
26277
+ if (mergeRowSpan > 1 || mergeColSpan > 1) {
26278
+ const mergedBorderOverlayCacheKey = `${row}:${col}:${mergeRowSpan}:${mergeColSpan}`;
26279
+ const cachedOverlay = mergedBorderOverlayCacheRef.current.get(mergedBorderOverlayCacheKey);
26280
+ if (cachedOverlay !== void 0) {
26281
+ mergedBorderOverlay = cachedOverlay;
26282
+ } else {
26283
+ mergedBorderOverlay = resolveMergedRegionBorderOverlay(
26284
+ row,
26285
+ col,
26286
+ merge,
26287
+ (targetRow, targetCol) => resolveBaseResolvedStyle(targetRow, targetCol)
26288
+ );
26289
+ mergedBorderOverlayCacheRef.current.set(mergedBorderOverlayCacheKey, mergedBorderOverlay);
26290
+ }
26291
+ }
26292
+ const baseResolvedStyle = resolveBaseResolvedStyle(row, col);
26293
+ const resolvedMergedStyle = mergeResolvedCellStyle(baseResolvedStyle, mergedBorderOverlay);
26294
+ let displayValue = null;
26295
+ const readDisplayValue = () => {
26296
+ if (displayValue === null) {
26297
+ displayValue = batchCoversRow || !worksheet ? batchedCell?.value ?? "" : getCellDisplayValue(worksheet, row, col, activeSheet);
26298
+ }
26299
+ return displayValue;
26300
+ };
26301
+ const conditionalCellStyle = resolveConditionalCellStyleForCell(
26302
+ row,
26303
+ col,
26304
+ activeSheet,
26305
+ () => worksheet ? getCellNumericValue(worksheet, row, col) : getBatchedCellNumericValue(batchedCell),
26306
+ readDisplayValue,
26307
+ worksheet,
26308
+ viewportRowBatch?.cells
26309
+ );
26310
+ const finalResolvedStyle = mergeResolvedCellStyle(resolvedMergedStyle, conditionalCellStyle);
26311
+ const alignment = finalResolvedStyle?.alignment;
25303
26312
  const textRotationDeg = resolveSpreadsheetTextRotation(alignment?.textRotation);
25304
26313
  const headerRowCount = table ? Math.max(table.headerRowCount, 1) : 0;
25305
26314
  const rawHyperlink = batchCoversRow ? batchedCell?.hyperlink : worksheet?.getHyperlinkAt(row, col);
@@ -25319,7 +26328,7 @@ function XlsxGrid({
25319
26328
  sparkline.range.start.col
25320
26329
  )
25321
26330
  ) : null;
25322
- const checkboxState = mergedStyle?.cellControl && worksheet ? getCellBooleanValue(worksheet, row, col) : null;
26331
+ const checkboxState = finalResolvedStyle?.cellControl && worksheet ? getCellBooleanValue(worksheet, row, col) : null;
25323
26332
  const chartHighlight = resolveCellChartHighlight({ row, col }, activeSheetChartHighlights);
25324
26333
  const nextData = {
25325
26334
  canvas: void 0,
@@ -25353,12 +26362,12 @@ function XlsxGrid({
25353
26362
  isTableHeader: Boolean(table && row >= table.start.row && row < table.start.row + headerRowCount),
25354
26363
  rowSpan: merge?.rowSpan,
25355
26364
  sparkline: sparkline && sparklineValues ? { config: sparkline, values: sparklineValues } : null,
25356
- style: scaleCssProperties(buildCellStyle(mergedStyle, palette, activeSheet?.themePalette, {
26365
+ style: scaleCssProperties(buildCellStyle(finalResolvedStyle, palette, activeSheet?.themePalette, {
25357
26366
  showGridLines: activeSheet?.showGridLines
25358
26367
  }), zoomFactor),
25359
26368
  textRotationDeg,
25360
26369
  validation: resolveCellDataValidation(row, col, activeSheet),
25361
- value: sparkline ? "" : checkboxState !== null ? "" : batchCoversRow || !worksheet ? batchedCell?.value ?? "" : getCellDisplayValue(worksheet, row, col, activeSheet)
26370
+ value: sparkline ? "" : checkboxState !== null ? "" : readDisplayValue()
25362
26371
  };
25363
26372
  if (getCellStyle) {
25364
26373
  const styleOverrides = getCellStyle({
@@ -25384,6 +26393,7 @@ function XlsxGrid({
25384
26393
  }
25385
26394
  }
25386
26395
  nextData.canvas = buildCanvasCellStyleCache(nextData.style);
26396
+ cellRenderCacheRef.current.set(cacheKey, nextData);
25387
26397
  if (canCellTextOverflow(nextData)) {
25388
26398
  const startColIndex = colIndexByActual.get(col);
25389
26399
  if (startColIndex !== void 0) {
@@ -25396,9 +26406,13 @@ function XlsxGrid({
25396
26406
  displayEffectiveColWidths[startColIndex] ?? displayDefaultColWidth,
25397
26407
  sumPrefixRange(colPrefixSums, startColIndex, endColIndex)
25398
26408
  );
26409
+ const align = nextData.style.textAlign;
26410
+ const spillSide = align === "right" || align === "end" ? "left" : "right";
25399
26411
  let availableWidth = baseWidth;
25400
26412
  if (requiredWidth > availableWidth) {
25401
- for (let nextColIndex = endColIndex + 1; nextColIndex < visibleCols.length; nextColIndex += 1) {
26413
+ const nextColStep = spillSide === "left" ? -1 : 1;
26414
+ let nextColIndex = spillSide === "left" ? startColIndex - 1 : endColIndex + 1;
26415
+ while (nextColIndex >= 0 && nextColIndex < visibleCols.length) {
25402
26416
  const nextActualCol = visibleCols[nextColIndex];
25403
26417
  if (nextActualCol === void 0) {
25404
26418
  break;
@@ -25411,9 +26425,12 @@ function XlsxGrid({
25411
26425
  if (requiredWidth <= availableWidth) {
25412
26426
  break;
25413
26427
  }
26428
+ nextColIndex += nextColStep;
25414
26429
  }
25415
26430
  if (availableWidth > baseWidth) {
25416
26431
  nextData.spillWidth = Math.max(0, availableWidth - horizontalPadding);
26432
+ nextData.spillSide = spillSide;
26433
+ nextData.spillOffsetX = spillSide === "left" ? Math.min(0, baseWidth - availableWidth) : 0;
25417
26434
  }
25418
26435
  }
25419
26436
  }
@@ -25458,7 +26475,6 @@ function XlsxGrid({
25458
26475
  }
25459
26476
  }
25460
26477
  }
25461
- cellRenderCacheRef.current.set(cacheKey, nextData);
25462
26478
  return nextData;
25463
26479
  }, [
25464
26480
  activeSheet,
@@ -27628,11 +28644,13 @@ function XlsxGrid({
27628
28644
  top: (useFrozenVerticalPosition ? stickyTopByRow.get(drawCell.row) ?? baseTop - drawingViewport.top : baseTop - drawingViewport.top) - paneBoundsForCell.top,
27629
28645
  width: displayRect?.width ?? (displayEffectiveColWidths[drawColIndex] ?? colItem.size)
27630
28646
  };
28647
+ const spillOffsetX = Math.min(0, cellData.spillOffsetX ?? 0);
28648
+ const drawableLeft = localRect.left + spillOffsetX;
27631
28649
  const drawableWidth = Math.max(localRect.width, cellData.spillWidth ?? 0);
27632
- if (localRect.left + drawableWidth < 0 || localRect.top + localRect.height < 0 || localRect.left > paneBoundsForCell.width || localRect.top > paneBoundsForCell.height) {
28650
+ if (drawableLeft + drawableWidth < 0 || localRect.top + localRect.height < 0 || drawableLeft > paneBoundsForCell.width || localRect.top > paneBoundsForCell.height) {
27633
28651
  continue;
27634
28652
  }
27635
- if (!intersectsCanvasDirtyRects(localRect.left, localRect.top, drawableWidth, localRect.height, paneDirtyRects)) {
28653
+ if (!intersectsCanvasDirtyRects(drawableLeft, localRect.top, drawableWidth, localRect.height, paneDirtyRects)) {
27636
28654
  canvasProfileCulledCells += 1;
27637
28655
  continue;
27638
28656
  }
@@ -27682,11 +28700,27 @@ function XlsxGrid({
27682
28700
  const bottomBorder = canvasCellStyle.bottomBorder;
27683
28701
  const leftBorder = canvasCellStyle.leftBorder;
27684
28702
  const rightNeighborCol = visibleCols[drawColIndex + Math.max(1, cellData.colSpan ?? 1)];
27685
- const rightNeighborData = rightNeighborCol === void 0 ? null : getCellData(drawCell.row, rightNeighborCol);
27686
- const rightNeighborLeftBorder = rightNeighborData?.isMergedSecondary ? null : rightNeighborData?.canvas?.leftBorder ?? parseCanvasBorderDeclaration(rightNeighborData?.style.borderLeft);
28703
+ const rightNeighborCell = rightNeighborCol === void 0 ? null : { row: drawCell.row, col: rightNeighborCol };
28704
+ const rightNeighborData = rightNeighborCell ? getCellData(rightNeighborCell.row, rightNeighborCell.col) : null;
28705
+ let rightNeighborLeftBorder = rightNeighborData?.isMergedSecondary ? null : rightNeighborData?.canvas?.leftBorder ?? parseCanvasBorderDeclaration(rightNeighborData?.style.borderLeft);
28706
+ if (rightNeighborLeftBorder == null && rightNeighborCell && rightNeighborData?.isMergedSecondary) {
28707
+ const rightNeighborAnchorCell = resolveMergeAnchorCell(rightNeighborCell);
28708
+ if (rightNeighborAnchorCell.col === rightNeighborCell.col) {
28709
+ const rightNeighborAnchorData = getCellData(rightNeighborAnchorCell.row, rightNeighborAnchorCell.col);
28710
+ rightNeighborLeftBorder = rightNeighborAnchorData.isMergedSecondary ? null : rightNeighborAnchorData.canvas?.leftBorder ?? parseCanvasBorderDeclaration(rightNeighborAnchorData.style.borderLeft);
28711
+ }
28712
+ }
27687
28713
  const bottomNeighborRow = visibleRows[drawRowIndex + Math.max(1, cellData.rowSpan ?? 1)];
27688
- const bottomNeighborData = bottomNeighborRow === void 0 ? null : getCellData(bottomNeighborRow, drawCell.col);
27689
- const bottomNeighborTopBorder = bottomNeighborData?.isMergedSecondary ? null : bottomNeighborData?.canvas?.topBorder ?? parseCanvasBorderDeclaration(bottomNeighborData?.style.borderTop);
28714
+ const bottomNeighborCell = bottomNeighborRow === void 0 ? null : { row: bottomNeighborRow, col: drawCell.col };
28715
+ const bottomNeighborData = bottomNeighborCell ? getCellData(bottomNeighborCell.row, bottomNeighborCell.col) : null;
28716
+ let bottomNeighborTopBorder = bottomNeighborData?.isMergedSecondary ? null : bottomNeighborData?.canvas?.topBorder ?? parseCanvasBorderDeclaration(bottomNeighborData?.style.borderTop);
28717
+ if (bottomNeighborTopBorder == null && bottomNeighborCell && bottomNeighborData?.isMergedSecondary) {
28718
+ const bottomNeighborAnchorCell = resolveMergeAnchorCell(bottomNeighborCell);
28719
+ if (bottomNeighborAnchorCell.row === bottomNeighborCell.row) {
28720
+ const bottomNeighborAnchorData = getCellData(bottomNeighborAnchorCell.row, bottomNeighborAnchorCell.col);
28721
+ bottomNeighborTopBorder = bottomNeighborAnchorData.isMergedSecondary ? null : bottomNeighborAnchorData.canvas?.topBorder ?? parseCanvasBorderDeclaration(bottomNeighborAnchorData.style.borderTop);
28722
+ }
28723
+ }
27690
28724
  const resolvedRightBorder = resolveCanvasBoundaryBorder(rightBorder, rightNeighborLeftBorder);
27691
28725
  const resolvedBottomBorder = resolveCanvasBoundaryBorder(bottomBorder, bottomNeighborTopBorder);
27692
28726
  if (showGridLines && (!resolvedRightBorder || !resolvedBottomBorder)) {
@@ -27935,10 +28969,11 @@ function XlsxGrid({
27935
28969
  } else if (spillMaxWidth != null) {
27936
28970
  const text = shouldEllipsizeText ? truncateCanvasText(paneContext, rawText, maxTextWidth) : rawText;
27937
28971
  const textY = resolveCanvasTextMiddleY(cellStyle.verticalAlign, contentTop, contentHeight, singleLineHeight);
28972
+ const spillClipLeft = cellData.spillSide === "left" ? contentLeft + contentWidth - spillMaxWidth - textClipOverscan : contentLeft - textClipOverscan;
27938
28973
  deferredSpillTextsByPane[pane].push({
27939
28974
  align,
27940
28975
  clipHeight: contentHeight + textClipOverscan * 2,
27941
- clipLeft: contentLeft - textClipOverscan,
28976
+ clipLeft: spillClipLeft,
27942
28977
  clipTop: contentTop - textClipOverscan,
27943
28978
  clipWidth: spillMaxWidth + textClipOverscan * 2,
27944
28979
  color: textColor,
@@ -31626,7 +32661,17 @@ function useXlsxViewerThumbnails(options = {}) {
31626
32661
  const inheritedStyle = resolveInheritedCellStyle2(sheet, row, col);
31627
32662
  const worksheetStyle = worksheet ? worksheet.getCellStyleAt(row, col) ?? null : batchedCell?.style ?? null;
31628
32663
  const mergedStyle = mergeResolvedCellStyle(inheritedStyle, worksheetStyle, { replaceXfSubtrees: true });
31629
- const alignment = mergedStyle?.alignment;
32664
+ const conditionalCellStyle = resolveConditionalCellStyleForCell(
32665
+ row,
32666
+ col,
32667
+ sheet,
32668
+ () => worksheet ? getCellNumericValue(worksheet, row, col) : getBatchedCellNumericValue(batchedCell),
32669
+ () => worksheet ? getCellDisplayValue(worksheet, row, col, sheet) : batchedCell?.value ?? "",
32670
+ worksheet,
32671
+ workerRowBatch?.cells
32672
+ );
32673
+ const finalResolvedStyle = mergeResolvedCellStyle(mergedStyle, conditionalCellStyle);
32674
+ const alignment = finalResolvedStyle?.alignment;
31630
32675
  const sparkline = sparklineByCell.get(cacheKey) ?? null;
31631
32676
  const getNumericValue = (targetRow, targetCol) => worksheet ? getCellNumericValue(worksheet, targetRow, targetCol) : getBatchedCellNumericValue(workerRowBatch?.cells.get(`${targetRow}:${targetCol}`));
31632
32677
  const sparklineValues = sparkline ? sparkline.range.start.row === sparkline.range.end.row ? Array.from(
@@ -31642,7 +32687,7 @@ function useXlsxViewerThumbnails(options = {}) {
31642
32687
  sparkline.range.start.col
31643
32688
  )
31644
32689
  ) : null;
31645
- const checkboxState = mergedStyle?.cellControl ? worksheet ? getCellBooleanValue(worksheet, row, col) : getBatchedCellBooleanValue(batchedCell) : null;
32690
+ const checkboxState = finalResolvedStyle?.cellControl ? worksheet ? getCellBooleanValue(worksheet, row, col) : getBatchedCellBooleanValue(batchedCell) : null;
31646
32691
  const nextData = {
31647
32692
  canvas: void 0,
31648
32693
  checkboxState,
@@ -31653,7 +32698,7 @@ function useXlsxViewerThumbnails(options = {}) {
31653
32698
  isMergedSecondary: false,
31654
32699
  rowSpan: merge?.rowSpan,
31655
32700
  sparkline: sparkline && sparklineValues ? { config: sparkline, values: sparklineValues } : null,
31656
- style: buildCellStyle(mergedStyle, palette, sheet.themePalette, {
32701
+ style: buildCellStyle(finalResolvedStyle, palette, sheet.themePalette, {
31657
32702
  showGridLines
31658
32703
  }),
31659
32704
  textRotationDeg: resolveSpreadsheetTextRotation(alignment?.textRotation),