ooxml-core 1.9.0 → 1.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/PptxHandler-DNZHAHUY.cjs +12 -0
- package/dist/PptxHandler-E44KDHMQ.mjs +3 -0
- package/dist/{PptxHandler-EX4WBIQQ.mjs → PptxHandler-NROFYT2N.mjs} +2 -2
- package/dist/automation/index.cjs +3236 -2258
- package/dist/automation/index.mjs +3236 -2258
- package/dist/{chunk-SWF7KVL5.cjs → chunk-2UVH6RHI.cjs} +1608 -1163
- package/dist/{chunk-M76PHYRR.mjs → chunk-7DSZI7S6.mjs} +1 -1
- package/dist/{chunk-AT66SA5M.cjs → chunk-7QZGRB3T.cjs} +28 -10
- package/dist/chunk-ANZ4Q6I3.cjs +21 -0
- package/dist/{chunk-CPKNMQLX.cjs → chunk-AWIDASUW.cjs} +25 -2
- package/dist/{chunk-SVQZXP3F.mjs → chunk-CBNKBVX5.mjs} +25 -2
- package/dist/{chunk-FIELY5PI.mjs → chunk-EC2W2MDY.mjs} +30 -2
- package/dist/chunk-EGTRL3QJ.mjs +19 -0
- package/dist/chunk-GXHKNSZX.mjs +9 -0
- package/dist/{chunk-OXHMZS7B.mjs → chunk-HCXUI5UC.mjs} +943 -273
- package/dist/chunk-HDQXPSHY.cjs +17 -0
- package/dist/chunk-KTYBFGEY.mjs +14 -0
- package/dist/chunk-QOO36KG4.cjs +42 -0
- package/dist/chunk-R2KZXD6U.mjs +39 -0
- package/dist/{chunk-IGOA57LE.mjs → chunk-U2DF3EGK.mjs} +1 -1
- package/dist/{chunk-OB277ZGE.mjs → chunk-UAY26XOI.mjs} +27 -9
- package/dist/{chunk-WSO4T2LJ.mjs → chunk-W5ARCUJB.mjs} +26 -3
- package/dist/chunk-XZPZHXV4.cjs +12 -0
- package/dist/{chunk-LCS3J3QI.mjs → chunk-YB5SRNFS.mjs} +717 -272
- package/dist/docx/layout/adapt-table.d.ts +2 -2
- package/dist/docx/layout/adapt-table.d.ts.map +1 -1
- package/dist/docx/layout/flow-table.d.ts.map +1 -1
- package/dist/docx/layout/index.cjs +554 -83
- package/dist/docx/layout/index.mjs +554 -84
- package/dist/docx/layout/nested-fragment-edges.d.ts +9 -0
- package/dist/docx/layout/nested-fragment-edges.d.ts.map +1 -0
- package/dist/docx/layout/nested-frame-profile.d.ts +9 -0
- package/dist/docx/layout/nested-frame-profile.d.ts.map +1 -0
- package/dist/docx/layout/page-cursor.d.ts +2 -0
- package/dist/docx/layout/page-cursor.d.ts.map +1 -1
- package/dist/docx/layout/result.d.ts +20 -0
- package/dist/docx/layout/result.d.ts.map +1 -1
- package/dist/docx/layout/table-border-layout.d.ts +16 -0
- package/dist/docx/layout/table-border-layout.d.ts.map +1 -0
- package/dist/docx/layout/table-cell-layout.d.ts +3 -2
- package/dist/docx/layout/table-cell-layout.d.ts.map +1 -1
- package/dist/docx/layout/table-content.d.ts +4 -0
- package/dist/docx/layout/table-content.d.ts.map +1 -0
- package/dist/docx/layout/table-footnotes.d.ts +5 -0
- package/dist/docx/layout/table-footnotes.d.ts.map +1 -1
- package/dist/docx/layout/table-frames.d.ts +4 -0
- package/dist/docx/layout/table-frames.d.ts.map +1 -0
- package/dist/docx/layout/table-layout.d.ts +8 -3
- package/dist/docx/layout/table-layout.d.ts.map +1 -1
- package/dist/docx/layout/table-note-completion.d.ts +5 -0
- package/dist/docx/layout/table-note-completion.d.ts.map +1 -0
- package/dist/docx/layout/table-note-stories.d.ts +6 -0
- package/dist/docx/layout/table-note-stories.d.ts.map +1 -0
- package/dist/pptx/automation/index.cjs +801 -296
- package/dist/pptx/automation/index.d.ts +5 -4
- package/dist/pptx/automation/index.d.ts.map +1 -1
- package/dist/pptx/automation/index.mjs +5 -5
- package/dist/pptx/chunks/{text-operations-BLodkuXE.d.ts → elements-DD3UGOMd.d.ts} +27 -3248
- package/dist/pptx/chunks/elements-DD3UGOMd.d.ts.map +1 -0
- package/dist/pptx/chunks/{index-B4cnSPNz.d.ts → index-BZrFyNtU.d.ts} +113 -5
- package/dist/pptx/chunks/index-BZrFyNtU.d.ts.map +1 -0
- package/dist/pptx/chunks/{index-BZh-IMkN.d.ts → index-DdX02BSm.d.ts} +19 -3
- package/dist/pptx/chunks/index-DdX02BSm.d.ts.map +1 -0
- package/dist/pptx/chunks/smart-art-ENMMEbmW.d.ts +1512 -0
- package/dist/pptx/chunks/smart-art-ENMMEbmW.d.ts.map +1 -0
- package/dist/pptx/chunks/text-D49FKllA.d.ts +1473 -0
- package/dist/pptx/chunks/text-D49FKllA.d.ts.map +1 -0
- package/dist/pptx/chunks/text-operations-CyMTMfID.d.ts +3261 -0
- package/dist/pptx/chunks/text-operations-CyMTMfID.d.ts.map +1 -0
- package/dist/pptx/cli/index.cjs +801 -296
- package/dist/pptx/cli/index.d.ts +1 -1
- package/dist/pptx/cli/index.mjs +4 -4
- package/dist/pptx/converter/index.cjs +1 -0
- package/dist/pptx/converter/index.d.ts +1 -1
- package/dist/pptx/converter/index.mjs +2 -2
- package/dist/pptx/editor/render/collaboration-live-patch-target.cjs +2 -2
- package/dist/pptx/editor/render/collaboration-live-patch-target.mjs +1 -1
- package/dist/pptx/editor/render/find-replace.cjs +19 -18
- package/dist/pptx/editor/render/find-replace.d.ts +2 -2
- package/dist/pptx/editor/render/find-replace.mjs +3 -2
- package/dist/pptx/editor/render/font-family-update.cjs +14 -0
- package/dist/pptx/editor/render/font-family-update.d.ts +17 -0
- package/dist/pptx/editor/render/font-family-update.d.ts.map +1 -0
- package/dist/pptx/editor/render/font-family-update.mjs +1 -0
- package/dist/pptx/editor/render/paragraph-geometry-overrides.cjs +14 -0
- package/dist/pptx/editor/render/paragraph-geometry-overrides.d.ts +17 -0
- package/dist/pptx/editor/render/paragraph-geometry-overrides.d.ts.map +1 -0
- package/dist/pptx/editor/render/paragraph-geometry-overrides.mjs +12 -0
- package/dist/pptx/editor/render/remap-text.cjs +2 -2
- package/dist/pptx/editor/render/remap-text.d.ts.map +1 -1
- package/dist/pptx/editor/render/remap-text.mjs +1 -1
- package/dist/pptx/editor/render/slide-operations.cjs +9 -8
- package/dist/pptx/editor/render/slide-operations.mjs +3 -2
- package/dist/pptx/editor/render/table-data-grid-ops.cjs +1 -1
- package/dist/pptx/editor/render/table-data-grid-ops.mjs +1 -1
- package/dist/pptx/editor/render/text-content-style.cjs +18 -0
- package/dist/pptx/editor/render/text-content-style.d.ts +9 -0
- package/dist/pptx/editor/render/text-content-style.d.ts.map +1 -0
- package/dist/pptx/editor/render/text-content-style.mjs +5 -0
- package/dist/pptx/editor/render/text-runs-style-patch.cjs +17 -0
- package/dist/pptx/editor/render/text-runs-style-patch.d.ts +7 -0
- package/dist/pptx/editor/render/text-runs-style-patch.d.ts.map +1 -0
- package/dist/pptx/editor/render/text-runs-style-patch.mjs +15 -0
- package/dist/pptx/editor/render/text-style-scope.cjs +173 -0
- package/dist/pptx/editor/render/text-style-scope.d.ts +76 -0
- package/dist/pptx/editor/render/text-style-scope.d.ts.map +1 -0
- package/dist/pptx/editor/render/text-style-scope.mjs +164 -0
- package/dist/pptx/editor/render/theme-editor-model.cjs +1 -1
- package/dist/pptx/editor/render/theme-editor-model.mjs +1 -1
- package/dist/pptx/editor/render/update-text-segment-style.cjs +11 -0
- package/dist/pptx/editor/render/update-text-segment-style.d.ts +14 -0
- package/dist/pptx/editor/render/update-text-segment-style.d.ts.map +1 -0
- package/dist/pptx/editor/render/update-text-segment-style.mjs +2 -0
- package/dist/pptx/index.cjs +1091 -296
- package/dist/pptx/index.d.ts +7 -5
- package/dist/pptx/index.mjs +5 -5
- package/dist/pptx/smartart-layouts/index.d.ts +1 -1
- package/dist/teams/index.cjs +590 -122
- package/dist/teams/index.mjs +590 -122
- package/dist/visio/date-cache.d.ts +3 -0
- package/dist/visio/date-cache.d.ts.map +1 -0
- package/dist/visio/edit-commands.d.ts +3 -3
- package/dist/visio/edit-commands.d.ts.map +1 -1
- package/dist/visio/edit-formatting-scope.d.ts.map +1 -1
- package/dist/visio/edit-recalculate-index.d.ts.map +1 -1
- package/dist/visio/edit-text-field-commands.d.ts +15 -0
- package/dist/visio/edit-text-field-commands.d.ts.map +1 -1
- package/dist/visio/edit-text-field.d.ts +2 -2
- package/dist/visio/edit-text-field.d.ts.map +1 -1
- package/dist/visio/edit.d.ts +1 -1
- package/dist/visio/edit.d.ts.map +1 -1
- package/dist/visio/index.cjs +501 -220
- package/dist/visio/index.d.ts +1 -1
- package/dist/visio/index.d.ts.map +1 -1
- package/dist/visio/index.mjs +501 -220
- package/dist/visio/model.d.ts +6 -0
- package/dist/visio/model.d.ts.map +1 -1
- package/dist/visio/shape-metadata.d.ts.map +1 -1
- package/dist/visio/shapes.d.ts.map +1 -1
- package/dist/visio/style.d.ts +1 -1
- package/dist/visio/style.d.ts.map +1 -1
- package/dist/visio/text-field-display.d.ts +3 -0
- package/dist/visio/text-field-display.d.ts.map +1 -1
- package/dist/visio/text-field-editability.d.ts +6 -0
- package/dist/visio/text-field-editability.d.ts.map +1 -0
- package/dist/visio/text-field-fraction.d.ts +3 -0
- package/dist/visio/text-field-fraction.d.ts.map +1 -0
- package/dist/visio/text-field-independent.d.ts +4 -0
- package/dist/visio/text-field-independent.d.ts.map +1 -0
- package/dist/visio/text-field-numeric.d.ts +1 -1
- package/dist/visio/text-field-numeric.d.ts.map +1 -1
- package/dist/visio/text-field-source.d.ts +6 -0
- package/dist/visio/text-field-source.d.ts.map +1 -0
- package/dist/visio/text-field-system-date.d.ts +4 -0
- package/dist/visio/text-field-system-date.d.ts.map +1 -0
- package/dist/visio/text-fields.d.ts +1 -0
- package/dist/visio/text-fields.d.ts.map +1 -1
- package/dist/visio/ui/edit-commands.d.ts.map +1 -1
- package/dist/visio/ui/index.cjs +514 -221
- package/dist/visio/ui/index.mjs +514 -221
- package/dist/visio/ui/snapshot-scene.d.ts.map +1 -1
- package/dist/visio/ui/text-field-catalog.d.ts.map +1 -1
- package/dist/xlsx/edit/pivots.d.ts.map +1 -1
- package/dist/xlsx/index.cjs +1362 -659
- package/dist/xlsx/index.mjs +1361 -660
- package/dist/xlsx/load/index.cjs +1091 -430
- package/dist/xlsx/load/index.mjs +1091 -430
- package/dist/xlsx/model-pivots.d.ts +31 -2
- package/dist/xlsx/model-pivots.d.ts.map +1 -1
- package/dist/xlsx/pivot/admission.d.ts.map +1 -1
- package/dist/xlsx/pivot/aggregate.d.ts +3 -1
- package/dist/xlsx/pivot/aggregate.d.ts.map +1 -1
- package/dist/xlsx/pivot/data.d.ts +2 -2
- package/dist/xlsx/pivot/data.d.ts.map +1 -1
- package/dist/xlsx/pivot/hierarchy-first.d.ts +21 -0
- package/dist/xlsx/pivot/hierarchy-first.d.ts.map +1 -0
- package/dist/xlsx/pivot/hierarchy.d.ts +2 -4
- package/dist/xlsx/pivot/hierarchy.d.ts.map +1 -1
- package/dist/xlsx/pivot/index.d.ts +2 -0
- package/dist/xlsx/pivot/index.d.ts.map +1 -1
- package/dist/xlsx/pivot/measures.d.ts +13 -0
- package/dist/xlsx/pivot/measures.d.ts.map +1 -0
- package/dist/xlsx/pivot/page-filter-admission.d.ts +5 -0
- package/dist/xlsx/pivot/page-filter-admission.d.ts.map +1 -0
- package/dist/xlsx/pivot/page-filter.d.ts +11 -0
- package/dist/xlsx/pivot/page-filter.d.ts.map +1 -0
- package/dist/xlsx/pivot/read.d.ts.map +1 -1
- package/dist/xlsx/pivot/table-xml.d.ts.map +1 -1
- package/dist/xlsx/pivot/values-axis.d.ts +12 -0
- package/dist/xlsx/pivot/values-axis.d.ts.map +1 -0
- package/dist/xlsx/ui/commands/i18n/navigation.d.ts.map +1 -1
- package/dist/xlsx/ui/commands/i18n/pivots.d.ts.map +1 -1
- package/dist/xlsx/ui/index.cjs +640 -137
- package/dist/xlsx/ui/index.mjs +640 -137
- package/package.json +2 -2
- package/dist/PptxHandler-AT7FVG5Q.mjs +0 -2
- package/dist/PptxHandler-VFSCECPL.cjs +0 -11
- package/dist/pptx/chunks/index-B4cnSPNz.d.ts.map +0 -1
- package/dist/pptx/chunks/index-BZh-IMkN.d.ts.map +0 -1
- package/dist/pptx/chunks/smart-art-Q2kZQtHh.d.ts +0 -2970
- package/dist/pptx/chunks/smart-art-Q2kZQtHh.d.ts.map +0 -1
- package/dist/pptx/chunks/text-operations-BLodkuXE.d.ts.map +0 -1
package/dist/xlsx/ui/index.mjs
CHANGED
|
@@ -13778,6 +13778,60 @@ function newSparklines(workbook, sheet, source, locations) {
|
|
|
13778
13778
|
return out;
|
|
13779
13779
|
}
|
|
13780
13780
|
|
|
13781
|
+
// xlsx/pivot/page-filter.ts
|
|
13782
|
+
function validatePivotPageFilter(pivot) {
|
|
13783
|
+
const filter2 = pivot.pageFilter;
|
|
13784
|
+
const extras = Array.isArray(pivot.additionalValues) ? pivot.additionalValues : [];
|
|
13785
|
+
if (filter2 === void 0) return;
|
|
13786
|
+
if (!filter2 || typeof filter2 !== "object" || Array.isArray(filter2) || Object.keys(filter2).some((key) => key !== "field" && key !== "item") || typeof filter2.field !== "string" || !pivot.fields.includes(filter2.field) || [
|
|
13787
|
+
pivot.rowField,
|
|
13788
|
+
pivot.secondRowField,
|
|
13789
|
+
pivot.columnField,
|
|
13790
|
+
pivot.valueField,
|
|
13791
|
+
...extras.map((v) => v?.field)
|
|
13792
|
+
].includes(filter2.field) || pivot.valuesAxis === "rows")
|
|
13793
|
+
throw new Error("Report filters require Values on columns and a separate source field.");
|
|
13794
|
+
if (filter2.item !== void 0 && !(filter2.item === null || typeof filter2.item === "string" || typeof filter2.item === "boolean" || typeof filter2.item === "number" && Number.isFinite(filter2.item) || isCellError(filter2.item) && isErrorCode(filter2.item.error) && Object.keys(filter2.item).length === 1))
|
|
13795
|
+
throw new Error("Choose a cached literal report filter item.");
|
|
13796
|
+
}
|
|
13797
|
+
function pivotPageProjection(pivot) {
|
|
13798
|
+
const filter2 = pivot.pageFilter;
|
|
13799
|
+
if (!filter2) return pivot;
|
|
13800
|
+
const labels = /* @__PURE__ */ new Map();
|
|
13801
|
+
for (const item of pivotItems(pivot, filter2.field)) {
|
|
13802
|
+
const label3 = String(pivotItemLabel(item)).toLowerCase(), key2 = pivotValueKey(item);
|
|
13803
|
+
if (label3 === "(all)" || labels.has(label3) && labels.get(label3) !== key2)
|
|
13804
|
+
throw new Error("Ambiguous report filter item captions are preserved.");
|
|
13805
|
+
labels.set(label3, key2);
|
|
13806
|
+
}
|
|
13807
|
+
if (filter2.item === void 0) return pivot;
|
|
13808
|
+
const index2 = pivot.fields.indexOf(filter2.field), key = pivotValueKey(filter2.item);
|
|
13809
|
+
const records = pivot.records.filter((record) => pivotValueKey(record[index2] ?? null) === key);
|
|
13810
|
+
if (!records.length) throw new Error("The report filter item is missing from the source.");
|
|
13811
|
+
if (JSON.stringify(records[0][index2] ?? null) !== JSON.stringify(filter2.item))
|
|
13812
|
+
throw new Error("Choose an exact cached literal report filter item.");
|
|
13813
|
+
return { ...pivot, records };
|
|
13814
|
+
}
|
|
13815
|
+
function prependPivotPage(grid6, pivot) {
|
|
13816
|
+
if (!pivot.pageFilter) return grid6;
|
|
13817
|
+
const width = grid6.values[0].length;
|
|
13818
|
+
return {
|
|
13819
|
+
...grid6,
|
|
13820
|
+
values: [
|
|
13821
|
+
[
|
|
13822
|
+
pivot.pageFilter.field,
|
|
13823
|
+
pivot.pageFilter.item === void 0 ? "(All)" : pivotItemLabel(pivot.pageFilter.item),
|
|
13824
|
+
...Array(width - 2).fill(null)
|
|
13825
|
+
],
|
|
13826
|
+
Array(width).fill(null),
|
|
13827
|
+
...grid6.values
|
|
13828
|
+
],
|
|
13829
|
+
firstDataRow: grid6.firstDataRow + 2,
|
|
13830
|
+
...grid6.firstHeaderRow !== void 0 ? { firstHeaderRow: grid6.firstHeaderRow + 2 } : {},
|
|
13831
|
+
...grid6.indents ? { indents: [0, 0, ...grid6.indents] } : {}
|
|
13832
|
+
};
|
|
13833
|
+
}
|
|
13834
|
+
|
|
13781
13835
|
// xlsx/pivot/data.ts
|
|
13782
13836
|
var PIVOT_AGGREGATES = ["sum", "count", "average", "min", "max"];
|
|
13783
13837
|
function pivotSourceData(workbook, sheet, source) {
|
|
@@ -13829,12 +13883,32 @@ function pivotItemLabel(value2) {
|
|
|
13829
13883
|
return isCellError(value2) ? value2.error : value2;
|
|
13830
13884
|
}
|
|
13831
13885
|
function validatePivotFields(pivot) {
|
|
13886
|
+
validatePivotPageFilter(pivot);
|
|
13832
13887
|
const used = [
|
|
13833
13888
|
pivot.rowField,
|
|
13834
13889
|
...pivot.secondRowField ? [pivot.secondRowField] : [],
|
|
13835
13890
|
...pivot.columnField ? [pivot.columnField] : [],
|
|
13836
13891
|
pivot.valueField
|
|
13837
13892
|
];
|
|
13893
|
+
const extras = pivot.additionalValues ?? [];
|
|
13894
|
+
if (pivot.valuesAxis !== void 0 && !["columns", "rows"].includes(pivot.valuesAxis))
|
|
13895
|
+
throw new Error("Choose a valid Values axis.");
|
|
13896
|
+
if (pivot.valuesPosition !== void 0 && !["last", "between", "first"].includes(pivot.valuesPosition))
|
|
13897
|
+
throw new Error("Choose a valid Values position.");
|
|
13898
|
+
if ((pivot.valuesPosition === "between" || pivot.valuesPosition === "first") && (pivot.valuesAxis !== "rows" || !pivot.secondRowField))
|
|
13899
|
+
throw new Error("Values before or between fields require two row fields and Values on rows.");
|
|
13900
|
+
if (pivot.valuesAxis === "rows" && (!Array.isArray(extras) || !extras.length))
|
|
13901
|
+
throw new Error("Values on rows require multiple measures.");
|
|
13902
|
+
if (extras.length > 0 && pivot.sourceXml && parseXml(pivot.sourceXml).documentElement.getAttribute("dataCaption") !== "Values")
|
|
13903
|
+
throw new Error("This PivotTable uses unsupported Values header captions.");
|
|
13904
|
+
if (!Array.isArray(extras) || extras.length > 15 || extras.some(
|
|
13905
|
+
(measure2) => !measure2 || !pivot.fields.includes(measure2.field) || !PIVOT_AGGREGATES.includes(measure2.aggregate) || typeof measure2.caption !== "string" || !measure2.caption.trim() || measure2.caption.length > 255 || pivot.fields.some((field) => field.toLowerCase() === measure2.caption.toLowerCase())
|
|
13906
|
+
) || new Set(
|
|
13907
|
+
[pivot.valueCaption, ...extras.map((measure2) => measure2.caption)].map(
|
|
13908
|
+
(caption) => caption?.toLowerCase()
|
|
13909
|
+
)
|
|
13910
|
+
).size !== extras.length + 1)
|
|
13911
|
+
throw new Error("Choose PivotTable value fields with valid aggregates and unique captions.");
|
|
13838
13912
|
if (pivot.layout !== void 0 && !["tabular", "compact", "outline"].includes(pivot.layout) || pivot.subtotalPosition !== void 0 && !["top", "bottom"].includes(pivot.subtotalPosition) || !PIVOT_AGGREGATES.includes(pivot.aggregate) || used.some((field) => !pivot.fields.includes(field)) || new Set([pivot.rowField, pivot.secondRowField, pivot.columnField].filter(Boolean)).size !== [pivot.rowField, pivot.secondRowField, pivot.columnField].filter(Boolean).length || pivot.subtotals !== void 0 && typeof pivot.subtotals !== "boolean" || pivot.repeatLabels !== void 0 && typeof pivot.repeatLabels !== "boolean")
|
|
13839
13913
|
throw new Error("Choose valid PivotTable fields; row and column fields must differ.");
|
|
13840
13914
|
}
|
|
@@ -13842,21 +13916,191 @@ function pivotCaption(aggregate3, field) {
|
|
|
13842
13916
|
return `${aggregate3[0].toUpperCase()}${aggregate3.slice(1)} of ${field}`;
|
|
13843
13917
|
}
|
|
13844
13918
|
|
|
13919
|
+
// xlsx/pivot/measures.ts
|
|
13920
|
+
var pivotMeasures = (pivot) => [
|
|
13921
|
+
{ field: pivot.valueField, aggregate: pivot.aggregate, caption: pivot.valueCaption },
|
|
13922
|
+
...pivot.additionalValues ?? []
|
|
13923
|
+
];
|
|
13924
|
+
function normalizedPivotMeasures(values2) {
|
|
13925
|
+
if (!Array.isArray(values2) || values2.length > 15)
|
|
13926
|
+
throw new Error("Choose between one and sixteen PivotTable value fields.");
|
|
13927
|
+
return values2.map((value2) => {
|
|
13928
|
+
if (!value2 || typeof value2.field !== "string")
|
|
13929
|
+
throw new Error("Choose valid PivotTable value fields.");
|
|
13930
|
+
const aggregate3 = value2.aggregate ?? "sum";
|
|
13931
|
+
if (!PIVOT_AGGREGATES.includes(aggregate3))
|
|
13932
|
+
throw new Error("Choose a valid PivotTable aggregate.");
|
|
13933
|
+
return {
|
|
13934
|
+
field: value2.field,
|
|
13935
|
+
aggregate: aggregate3,
|
|
13936
|
+
caption: value2.caption ?? `${aggregate3[0].toUpperCase()}${aggregate3.slice(1)} of ${value2.field}`
|
|
13937
|
+
};
|
|
13938
|
+
});
|
|
13939
|
+
}
|
|
13940
|
+
function aggregate2(records, field, type) {
|
|
13941
|
+
if (!records.length) return null;
|
|
13942
|
+
const values2 = records.map((record) => record[field] ?? null);
|
|
13943
|
+
if (type === "count") return values2.filter((value2) => value2 !== null && value2 !== "").length;
|
|
13944
|
+
const error = values2.find(isCellError);
|
|
13945
|
+
if (error) return error;
|
|
13946
|
+
const numbers3 = values2.filter((value2) => typeof value2 === "number");
|
|
13947
|
+
if (!numbers3.length) return type === "average" ? { error: "#DIV/0!" } : 0;
|
|
13948
|
+
if (type === "min") return numbers3.reduce((a, b) => Math.min(a, b));
|
|
13949
|
+
if (type === "max") return numbers3.reduce((a, b) => Math.max(a, b));
|
|
13950
|
+
const sum2 = numbers3.reduce((total2, value2) => total2 + value2, 0);
|
|
13951
|
+
return type === "average" ? sum2 / numbers3.length : sum2;
|
|
13952
|
+
}
|
|
13953
|
+
var pivotMeasureNumber = (pivot, records, measure2) => aggregate2(records, pivot.fields.indexOf(measure2.field), measure2.aggregate);
|
|
13954
|
+
var pivotNumbers = (pivot, records) => pivotMeasures(pivot).map((measure2) => pivotMeasureNumber(pivot, records, measure2));
|
|
13955
|
+
function pivotHeaderDimensions(pivot, columnItems, rowLabels) {
|
|
13956
|
+
const measures = 1 + (pivot.additionalValues?.length ?? 0);
|
|
13957
|
+
if (pivot.valuesAxis === "rows")
|
|
13958
|
+
return {
|
|
13959
|
+
rows: (pivot.columnField ? 2 : 1) + (pivot.pageFilter ? 2 : 0),
|
|
13960
|
+
width: rowLabels + (pivot.columnField ? columnItems + 1 : 1)
|
|
13961
|
+
};
|
|
13962
|
+
return {
|
|
13963
|
+
rows: (pivot.columnField ? measures > 1 ? 3 : 2 : 1) + (pivot.pageFilter ? 2 : 0),
|
|
13964
|
+
width: rowLabels + (pivot.columnField ? measures === 1 ? Math.max(1, columnItems) + 1 : (columnItems + 1) * measures : measures)
|
|
13965
|
+
};
|
|
13966
|
+
}
|
|
13967
|
+
function pivotHeaders(pivot, columns, labels, label3) {
|
|
13968
|
+
const measures = pivotMeasures(pivot);
|
|
13969
|
+
if (pivot.valuesAxis === "rows") {
|
|
13970
|
+
const rowLabels = pivot.layout === "compact" ? ["Row Labels"] : pivot.valuesPosition === "first" ? ["Values", ...labels] : pivot.valuesPosition === "between" ? [labels[0], "Values", labels[1]] : [...labels, "Values"];
|
|
13971
|
+
return pivot.columnField ? [
|
|
13972
|
+
[
|
|
13973
|
+
...rowLabels.map(() => null),
|
|
13974
|
+
pivot.layout === "compact" ? "Column Labels" : pivot.columnField,
|
|
13975
|
+
...columns.map(() => null)
|
|
13976
|
+
],
|
|
13977
|
+
[...rowLabels, ...columns.map(label3), "Grand Total"]
|
|
13978
|
+
] : [[...rowLabels, null]];
|
|
13979
|
+
}
|
|
13980
|
+
if (!pivot.columnField) return [[...labels, ...measures.map((measure2) => measure2.caption)]];
|
|
13981
|
+
if (measures.length === 1)
|
|
13982
|
+
return [
|
|
13983
|
+
[
|
|
13984
|
+
pivot.valueCaption,
|
|
13985
|
+
...labels.slice(1).map(() => null),
|
|
13986
|
+
pivot.layout === "compact" ? "Column Labels" : pivot.columnField,
|
|
13987
|
+
...columns.slice(1).map(() => null),
|
|
13988
|
+
null
|
|
13989
|
+
],
|
|
13990
|
+
[...labels, ...columns.map(label3), "Grand Total"]
|
|
13991
|
+
];
|
|
13992
|
+
const { width } = pivotHeaderDimensions(pivot, columns.length, labels.length);
|
|
13993
|
+
const first2 = Array(width).fill(null);
|
|
13994
|
+
first2[labels.length] = pivot.layout === "compact" ? "Column Labels" : pivot.columnField;
|
|
13995
|
+
if (pivot.layout !== "compact") first2[labels.length + 1] = "Values";
|
|
13996
|
+
return [
|
|
13997
|
+
first2,
|
|
13998
|
+
[
|
|
13999
|
+
...labels.map(() => null),
|
|
14000
|
+
...columns.flatMap((column) => [label3(column), ...measures.slice(1).map(() => null)]),
|
|
14001
|
+
...measures.map((measure2) => `Total ${measure2.caption}`)
|
|
14002
|
+
],
|
|
14003
|
+
[
|
|
14004
|
+
...labels,
|
|
14005
|
+
...columns.flatMap(() => measures.map((measure2) => measure2.caption)),
|
|
14006
|
+
...measures.map(() => null)
|
|
14007
|
+
]
|
|
14008
|
+
];
|
|
14009
|
+
}
|
|
14010
|
+
|
|
14011
|
+
// xlsx/pivot/hierarchy-first.ts
|
|
14012
|
+
function appendFirstPivotValues(pivot, context) {
|
|
14013
|
+
const {
|
|
14014
|
+
rowItems,
|
|
14015
|
+
secondRowItems,
|
|
14016
|
+
columnItems,
|
|
14017
|
+
children: children2,
|
|
14018
|
+
innerIndices,
|
|
14019
|
+
groups,
|
|
14020
|
+
details,
|
|
14021
|
+
buckets,
|
|
14022
|
+
width,
|
|
14023
|
+
rowLabels,
|
|
14024
|
+
top,
|
|
14025
|
+
bottom,
|
|
14026
|
+
append
|
|
14027
|
+
} = context;
|
|
14028
|
+
const compact3 = pivot.layout === "compact";
|
|
14029
|
+
const tabular = !pivot.layout || pivot.layout === "tabular";
|
|
14030
|
+
const blank = () => Array(width - rowLabels).fill(null);
|
|
14031
|
+
pivotMeasures(pivot).forEach((measure2, m) => {
|
|
14032
|
+
const numbers3 = (keys, records) => [
|
|
14033
|
+
...columnItems.map(
|
|
14034
|
+
(column) => pivotMeasureNumber(
|
|
14035
|
+
pivot,
|
|
14036
|
+
buckets.get(JSON.stringify([...keys, pivotValueKey(column)])) ?? [],
|
|
14037
|
+
measure2
|
|
14038
|
+
)
|
|
14039
|
+
),
|
|
14040
|
+
pivotMeasureNumber(pivot, records, measure2)
|
|
14041
|
+
];
|
|
14042
|
+
if (!tabular)
|
|
14043
|
+
append([measure2.caption, ...Array(rowLabels - 1).fill(null)], blank(), {
|
|
14044
|
+
indices: [m],
|
|
14045
|
+
measure: m
|
|
14046
|
+
});
|
|
14047
|
+
let first2 = true;
|
|
14048
|
+
rowItems.forEach((outer, outerIndex) => {
|
|
14049
|
+
const key = pivotValueKey(outer);
|
|
14050
|
+
const group = groups.get(key) ?? [];
|
|
14051
|
+
if (!tabular)
|
|
14052
|
+
append(
|
|
14053
|
+
compact3 ? [pivotItemLabel(outer)] : [null, pivotItemLabel(outer), null],
|
|
14054
|
+
top ? numbers3([key], group) : blank(),
|
|
14055
|
+
{ indices: [m, outerIndex], measure: m },
|
|
14056
|
+
compact3 ? 1 : 0
|
|
14057
|
+
);
|
|
14058
|
+
const innerKeys = [...children2.get(key)].sort(
|
|
14059
|
+
(a, b) => innerIndices.get(a) - innerIndices.get(b)
|
|
14060
|
+
);
|
|
14061
|
+
innerKeys.forEach((innerKey, child) => {
|
|
14062
|
+
const innerIndex = innerIndices.get(innerKey);
|
|
14063
|
+
append(
|
|
14064
|
+
compact3 ? [pivotItemLabel(secondRowItems[innerIndex])] : [
|
|
14065
|
+
tabular && first2 ? measure2.caption : null,
|
|
14066
|
+
pivot.repeatLabels || tabular && child === 0 ? pivotItemLabel(outer) : null,
|
|
14067
|
+
pivotItemLabel(secondRowItems[innerIndex])
|
|
14068
|
+
],
|
|
14069
|
+
numbers3([key, innerKey], details.get(JSON.stringify([key, innerKey]))),
|
|
14070
|
+
{ indices: [m, outerIndex, innerIndex], measure: m },
|
|
14071
|
+
compact3 ? 2 : 0
|
|
14072
|
+
);
|
|
14073
|
+
first2 = false;
|
|
14074
|
+
});
|
|
14075
|
+
if (bottom)
|
|
14076
|
+
append(
|
|
14077
|
+
compact3 ? [`${String(pivotItemLabel(outer))} Total`] : [null, `${String(pivotItemLabel(outer))} Total`, null],
|
|
14078
|
+
numbers3([key], group),
|
|
14079
|
+
{ indices: [m, outerIndex], measure: m, type: "default" },
|
|
14080
|
+
compact3 ? 1 : 0
|
|
14081
|
+
);
|
|
14082
|
+
});
|
|
14083
|
+
});
|
|
14084
|
+
}
|
|
14085
|
+
|
|
13845
14086
|
// xlsx/pivot/hierarchy.ts
|
|
13846
14087
|
var label2 = pivotItemLabel;
|
|
13847
|
-
function hierarchicalPivotGrid(pivot
|
|
14088
|
+
function hierarchicalPivotGrid(pivot) {
|
|
13848
14089
|
const rowItems = pivotItems(pivot, pivot.rowField);
|
|
13849
14090
|
const secondRowItems = pivotItems(pivot, pivot.secondRowField);
|
|
13850
14091
|
const columnItems = pivot.columnField ? pivotItems(pivot, pivot.columnField) : [];
|
|
13851
14092
|
const outerField = pivot.fields.indexOf(pivot.rowField);
|
|
13852
14093
|
const innerField = pivot.fields.indexOf(pivot.secondRowField);
|
|
13853
14094
|
const columnField = pivot.columnField ? pivot.fields.indexOf(pivot.columnField) : -1;
|
|
13854
|
-
const valueField = pivot.fields.indexOf(pivot.valueField);
|
|
13855
14095
|
const layout2 = pivot.layout ?? "tabular";
|
|
13856
14096
|
const compact3 = layout2 === "compact";
|
|
13857
|
-
const
|
|
14097
|
+
const rowsAxis = pivot.valuesAxis === "rows";
|
|
14098
|
+
const firstValues = rowsAxis && pivot.valuesPosition === "first";
|
|
14099
|
+
const between = rowsAxis && pivot.valuesPosition === "between";
|
|
14100
|
+
const measures = pivotMeasures(pivot);
|
|
14101
|
+
const top = (!rowsAxis || firstValues) && layout2 !== "tabular" && pivot.subtotals !== false && (pivot.subtotalPosition ?? "top") === "top";
|
|
13858
14102
|
const bottom = pivot.subtotals !== false && !top;
|
|
13859
|
-
const rowLabelColumns = compact3 ? 1 : 2;
|
|
14103
|
+
const rowLabelColumns = compact3 ? 1 : rowsAxis ? 3 : 2;
|
|
13860
14104
|
const groups = /* @__PURE__ */ new Map();
|
|
13861
14105
|
const details = /* @__PURE__ */ new Map();
|
|
13862
14106
|
const children2 = /* @__PURE__ */ new Map();
|
|
@@ -13880,20 +14124,12 @@ function hierarchicalPivotGrid(pivot, aggregate3) {
|
|
|
13880
14124
|
collect(buckets, JSON.stringify([...key, column]), record);
|
|
13881
14125
|
}
|
|
13882
14126
|
}
|
|
13883
|
-
const
|
|
13884
|
-
|
|
13885
|
-
|
|
14127
|
+
const dimensions = pivotHeaderDimensions(pivot, columnItems.length, rowLabelColumns);
|
|
14128
|
+
const rows2 = (details.size + rowItems.length * Number(bottom) + 1) * (rowsAxis ? measures.length : 1) + rowItems.length * Number(layout2 !== "tabular") * (firstValues ? measures.length : 1) + (firstValues ? measures.length : between ? rowItems.length * measures.length : details.size) * Number(rowsAxis && layout2 !== "tabular") + dimensions.rows;
|
|
14129
|
+
if (rows2 * dimensions.width > 1e6) throw new Error("The PivotTable result is too large.");
|
|
13886
14130
|
const labels = compact3 ? ["Row Labels"] : [pivot.rowField, pivot.secondRowField];
|
|
13887
|
-
const values2 = pivot
|
|
13888
|
-
|
|
13889
|
-
pivot.valueCaption,
|
|
13890
|
-
...compact3 ? [] : [null],
|
|
13891
|
-
compact3 ? "Column Labels" : pivot.columnField,
|
|
13892
|
-
...columnItems.slice(1).map(() => null),
|
|
13893
|
-
null
|
|
13894
|
-
],
|
|
13895
|
-
[...labels, ...columnItems.map(label2), "Grand Total"]
|
|
13896
|
-
] : [[...labels, pivot.valueCaption]];
|
|
14131
|
+
const values2 = pivotHeaders(pivot, columnItems, labels, label2);
|
|
14132
|
+
const firstDataRow = values2.length;
|
|
13897
14133
|
const indents = values2.map(() => 0);
|
|
13898
14134
|
const rowEntries = [];
|
|
13899
14135
|
const append = (labels2, numbers4, entry, indent = 0) => {
|
|
@@ -13901,91 +14137,187 @@ function hierarchicalPivotGrid(pivot, aggregate3) {
|
|
|
13901
14137
|
rowEntries.push(entry);
|
|
13902
14138
|
indents.push(indent);
|
|
13903
14139
|
};
|
|
13904
|
-
const
|
|
14140
|
+
const bands = (keys, records) => [
|
|
13905
14141
|
...columnItems.map(
|
|
13906
|
-
(column) =>
|
|
13907
|
-
buckets.get(JSON.stringify([...keys, pivotValueKey(column)])) ?? [],
|
|
13908
|
-
valueField,
|
|
13909
|
-
pivot.aggregate
|
|
13910
|
-
)
|
|
14142
|
+
(column) => pivotNumbers(pivot, buckets.get(JSON.stringify([...keys, pivotValueKey(column)])) ?? [])
|
|
13911
14143
|
),
|
|
13912
|
-
|
|
14144
|
+
pivotNumbers(pivot, records)
|
|
13913
14145
|
];
|
|
13914
|
-
|
|
13915
|
-
|
|
13916
|
-
|
|
13917
|
-
|
|
13918
|
-
|
|
13919
|
-
|
|
13920
|
-
|
|
13921
|
-
|
|
13922
|
-
|
|
13923
|
-
|
|
13924
|
-
|
|
13925
|
-
|
|
13926
|
-
|
|
13927
|
-
const records = details.get(JSON.stringify(keys));
|
|
13928
|
-
if (!records) return;
|
|
13929
|
-
append(
|
|
13930
|
-
compact3 ? [label2(inner2)] : [
|
|
13931
|
-
pivot.repeatLabels || layout2 === "tabular" && first2 ? label2(outer) : null,
|
|
13932
|
-
label2(inner2)
|
|
14146
|
+
const numbers3 = (keys, records) => bands(keys, records).flat();
|
|
14147
|
+
const appendMeasures = (labels2, keys, records, indices, type) => {
|
|
14148
|
+
const values3 = bands(keys, records);
|
|
14149
|
+
measures.forEach(
|
|
14150
|
+
(measure2, m) => append(
|
|
14151
|
+
type ? [
|
|
14152
|
+
`${type === "grand" ? "Total" : String(labels2[0])} ${measure2.caption}`,
|
|
14153
|
+
...Array(rowLabelColumns - 1).fill(null)
|
|
14154
|
+
] : compact3 ? [measure2.caption] : [
|
|
14155
|
+
...labels2.map(
|
|
14156
|
+
(label3) => layout2 === "tabular" && m === 0 || pivot.repeatLabels ? label3 : null
|
|
14157
|
+
),
|
|
14158
|
+
measure2.caption
|
|
13933
14159
|
],
|
|
13934
|
-
|
|
13935
|
-
{ indices: [
|
|
13936
|
-
compact3 ?
|
|
13937
|
-
)
|
|
13938
|
-
|
|
14160
|
+
values3.map((band) => band[m] ?? null),
|
|
14161
|
+
{ indices: type ? indices : [...indices, m], measure: m, ...type ? { type } : {} },
|
|
14162
|
+
compact3 && !type ? 2 : 0
|
|
14163
|
+
)
|
|
14164
|
+
);
|
|
14165
|
+
};
|
|
14166
|
+
if (firstValues)
|
|
14167
|
+
appendFirstPivotValues(pivot, {
|
|
14168
|
+
rowItems,
|
|
14169
|
+
secondRowItems,
|
|
14170
|
+
columnItems,
|
|
14171
|
+
children: children2,
|
|
14172
|
+
innerIndices,
|
|
14173
|
+
groups,
|
|
14174
|
+
details,
|
|
14175
|
+
buckets,
|
|
14176
|
+
width: dimensions.width,
|
|
14177
|
+
rowLabels: rowLabelColumns,
|
|
14178
|
+
top,
|
|
14179
|
+
bottom,
|
|
14180
|
+
append
|
|
13939
14181
|
});
|
|
13940
|
-
|
|
13941
|
-
|
|
13942
|
-
|
|
13943
|
-
|
|
13944
|
-
|
|
13945
|
-
|
|
14182
|
+
else
|
|
14183
|
+
rowItems.forEach((outer, outerIndex) => {
|
|
14184
|
+
const key = pivotValueKey(outer);
|
|
14185
|
+
if (layout2 !== "tabular")
|
|
14186
|
+
append(
|
|
14187
|
+
[label2(outer), ...Array(rowLabelColumns - 1).fill(null)],
|
|
14188
|
+
top ? numbers3([key], groups.get(key) ?? []) : Array(dimensions.width - rowLabelColumns).fill(null),
|
|
14189
|
+
{ indices: [outerIndex] }
|
|
14190
|
+
);
|
|
14191
|
+
let first2 = true;
|
|
14192
|
+
const innerKeys = [...children2.get(key)].sort(
|
|
14193
|
+
(a, b) => innerIndices.get(a) - innerIndices.get(b)
|
|
13946
14194
|
);
|
|
13947
|
-
|
|
13948
|
-
|
|
13949
|
-
|
|
13950
|
-
|
|
13951
|
-
|
|
13952
|
-
|
|
14195
|
+
if (between)
|
|
14196
|
+
measures.forEach((measure2, m) => {
|
|
14197
|
+
if (layout2 !== "tabular")
|
|
14198
|
+
append(
|
|
14199
|
+
compact3 ? [measure2.caption] : [pivot.repeatLabels ? label2(outer) : null, measure2.caption, null],
|
|
14200
|
+
Array(dimensions.width - rowLabelColumns).fill(null),
|
|
14201
|
+
{ indices: [outerIndex, m], measure: m },
|
|
14202
|
+
compact3 ? 1 : 0
|
|
14203
|
+
);
|
|
14204
|
+
innerKeys.forEach((innerKey, child) => {
|
|
14205
|
+
const innerIndex = innerIndices.get(innerKey);
|
|
14206
|
+
const keys = [key, innerKey];
|
|
14207
|
+
const records = details.get(JSON.stringify(keys));
|
|
14208
|
+
append(
|
|
14209
|
+
compact3 ? [label2(secondRowItems[innerIndex])] : [
|
|
14210
|
+
pivot.repeatLabels || layout2 === "tabular" && m === 0 && child === 0 ? label2(outer) : null,
|
|
14211
|
+
layout2 === "tabular" && child === 0 ? measure2.caption : null,
|
|
14212
|
+
label2(secondRowItems[innerIndex])
|
|
14213
|
+
],
|
|
14214
|
+
[
|
|
14215
|
+
...columnItems.map(
|
|
14216
|
+
(column) => pivotMeasureNumber(
|
|
14217
|
+
pivot,
|
|
14218
|
+
buckets.get(JSON.stringify([...keys, pivotValueKey(column)])) ?? [],
|
|
14219
|
+
measure2
|
|
14220
|
+
)
|
|
14221
|
+
),
|
|
14222
|
+
pivotMeasureNumber(pivot, records, measure2)
|
|
14223
|
+
],
|
|
14224
|
+
{ indices: [outerIndex, m, innerIndex], measure: m },
|
|
14225
|
+
compact3 ? 2 : 0
|
|
14226
|
+
);
|
|
14227
|
+
});
|
|
14228
|
+
});
|
|
14229
|
+
else
|
|
14230
|
+
innerKeys.forEach((innerKey) => {
|
|
14231
|
+
const innerIndex = innerIndices.get(innerKey);
|
|
14232
|
+
const inner2 = secondRowItems[innerIndex];
|
|
14233
|
+
const keys = [key, innerKey];
|
|
14234
|
+
const records = details.get(JSON.stringify(keys));
|
|
14235
|
+
if (!records) return;
|
|
14236
|
+
if (rowsAxis) {
|
|
14237
|
+
if (layout2 !== "tabular")
|
|
14238
|
+
append(
|
|
14239
|
+
compact3 ? [label2(inner2)] : [pivot.repeatLabels ? label2(outer) : null, label2(inner2), null],
|
|
14240
|
+
Array(dimensions.width - rowLabelColumns).fill(null),
|
|
14241
|
+
{ indices: [outerIndex, innerIndex] },
|
|
14242
|
+
compact3 ? 1 : 0
|
|
14243
|
+
);
|
|
14244
|
+
appendMeasures(
|
|
14245
|
+
[pivot.repeatLabels || first2 ? label2(outer) : null, label2(inner2)],
|
|
14246
|
+
keys,
|
|
14247
|
+
records,
|
|
14248
|
+
[outerIndex, innerIndex]
|
|
14249
|
+
);
|
|
14250
|
+
first2 = false;
|
|
14251
|
+
return;
|
|
14252
|
+
}
|
|
14253
|
+
append(
|
|
14254
|
+
compact3 ? [label2(inner2)] : [
|
|
14255
|
+
pivot.repeatLabels || layout2 === "tabular" && first2 ? label2(outer) : null,
|
|
14256
|
+
label2(inner2)
|
|
14257
|
+
],
|
|
14258
|
+
numbers3(keys, records),
|
|
14259
|
+
{ indices: [outerIndex, innerIndex] },
|
|
14260
|
+
compact3 ? 1 : 0
|
|
14261
|
+
);
|
|
14262
|
+
first2 = false;
|
|
14263
|
+
});
|
|
14264
|
+
if (bottom) {
|
|
14265
|
+
if (rowsAxis) {
|
|
14266
|
+
appendMeasures([label2(outer)], [key], groups.get(key) ?? [], [outerIndex], "default");
|
|
14267
|
+
return;
|
|
14268
|
+
}
|
|
14269
|
+
const caption = String(label2(outer));
|
|
14270
|
+
append(
|
|
14271
|
+
[`${caption} Total`, ...compact3 ? [] : [null]],
|
|
14272
|
+
numbers3([key], groups.get(key) ?? []),
|
|
14273
|
+
{ indices: [outerIndex], type: "default" }
|
|
14274
|
+
);
|
|
14275
|
+
}
|
|
14276
|
+
});
|
|
14277
|
+
if (rowsAxis) appendMeasures([], [], pivot.records, [0], "grand");
|
|
14278
|
+
else
|
|
14279
|
+
append(["Grand Total", ...compact3 ? [] : [null]], numbers3([], pivot.records), {
|
|
14280
|
+
indices: [0],
|
|
14281
|
+
type: "grand"
|
|
14282
|
+
});
|
|
13953
14283
|
return {
|
|
13954
14284
|
values: values2,
|
|
13955
14285
|
rowItems,
|
|
13956
14286
|
secondRowItems,
|
|
13957
14287
|
columnItems,
|
|
13958
14288
|
rowEntries,
|
|
13959
|
-
firstDataRow
|
|
14289
|
+
firstDataRow,
|
|
13960
14290
|
rowLabelColumns,
|
|
13961
|
-
indents
|
|
14291
|
+
indents,
|
|
14292
|
+
...rowsAxis ? { firstHeaderRow: 1 } : {}
|
|
13962
14293
|
};
|
|
13963
14294
|
}
|
|
13964
14295
|
|
|
13965
14296
|
// xlsx/pivot/aggregate.ts
|
|
13966
|
-
function aggregate2(records, field, type) {
|
|
13967
|
-
if (!records.length) return null;
|
|
13968
|
-
const values2 = records.map((record) => record[field] ?? null);
|
|
13969
|
-
if (type === "count") return values2.filter((value2) => value2 !== null && value2 !== "").length;
|
|
13970
|
-
const error = values2.find(isCellError);
|
|
13971
|
-
if (error) return error;
|
|
13972
|
-
const numbers3 = values2.filter((value2) => typeof value2 === "number");
|
|
13973
|
-
if (!numbers3.length) return type === "average" ? { error: "#DIV/0!" } : 0;
|
|
13974
|
-
if (type === "min") return numbers3.reduce((a, b) => Math.min(a, b));
|
|
13975
|
-
if (type === "max") return numbers3.reduce((a, b) => Math.max(a, b));
|
|
13976
|
-
const sum2 = numbers3.reduce((total2, value2) => total2 + value2, 0);
|
|
13977
|
-
return type === "average" ? sum2 / numbers3.length : sum2;
|
|
13978
|
-
}
|
|
13979
14297
|
function pivotGrid(pivot) {
|
|
13980
14298
|
validatePivotFields(pivot);
|
|
13981
|
-
|
|
14299
|
+
return prependPivotPage(pivotDataGrid(pivotPageProjection(pivot)), pivot);
|
|
14300
|
+
}
|
|
14301
|
+
function pivotDataGrid(pivot) {
|
|
14302
|
+
if (pivot.secondRowField) return hierarchicalPivotGrid(pivot);
|
|
13982
14303
|
const rowItems = pivotItems(pivot, pivot.rowField);
|
|
13983
14304
|
const columnItems = pivot.columnField ? pivotItems(pivot, pivot.columnField) : [];
|
|
13984
|
-
|
|
14305
|
+
const rowsAxis = pivot.valuesAxis === "rows";
|
|
14306
|
+
const compact3 = pivot.layout === "compact";
|
|
14307
|
+
const headings = rowsAxis && pivot.layout !== void 0 && pivot.layout !== "tabular";
|
|
14308
|
+
const dimensions = pivotHeaderDimensions(pivot, columnItems.length, rowsAxis && !compact3 ? 2 : 1);
|
|
14309
|
+
const dataRows = (rowItems.length + 1) * (rowsAxis ? 1 + (pivot.additionalValues?.length ?? 0) : 1) + (headings ? rowItems.length : 0);
|
|
14310
|
+
if ((dataRows + dimensions.rows) * dimensions.width > 1e6)
|
|
13985
14311
|
throw new Error("The PivotTable result is too large.");
|
|
14312
|
+
const label3 = pivotItemLabel;
|
|
14313
|
+
const values2 = pivotHeaders(
|
|
14314
|
+
pivot,
|
|
14315
|
+
columnItems,
|
|
14316
|
+
[pivot.layout === "compact" ? "Row Labels" : pivot.rowField],
|
|
14317
|
+
label3
|
|
14318
|
+
);
|
|
13986
14319
|
const rowField = pivot.fields.indexOf(pivot.rowField);
|
|
13987
14320
|
const colField = pivot.columnField ? pivot.fields.indexOf(pivot.columnField) : -1;
|
|
13988
|
-
const valueField = pivot.fields.indexOf(pivot.valueField);
|
|
13989
14321
|
const groups = /* @__PURE__ */ new Map();
|
|
13990
14322
|
const cells = /* @__PURE__ */ new Map();
|
|
13991
14323
|
const columns = /* @__PURE__ */ new Map();
|
|
@@ -14003,43 +14335,103 @@ function pivotGrid(pivot) {
|
|
|
14003
14335
|
collect(cells, JSON.stringify([key, col]), record);
|
|
14004
14336
|
}
|
|
14005
14337
|
}
|
|
14006
|
-
const
|
|
14007
|
-
|
|
14008
|
-
|
|
14009
|
-
|
|
14010
|
-
|
|
14011
|
-
|
|
14012
|
-
|
|
14013
|
-
|
|
14014
|
-
|
|
14015
|
-
|
|
14016
|
-
|
|
14017
|
-
|
|
14018
|
-
|
|
14019
|
-
|
|
14338
|
+
const firstDataRow = values2.length;
|
|
14339
|
+
if (rowsAxis) {
|
|
14340
|
+
const measures = pivotMeasures(pivot);
|
|
14341
|
+
const rowEntries = [];
|
|
14342
|
+
const indents = values2.map(() => 0);
|
|
14343
|
+
const append = (caption, bands, index2, grand = false) => {
|
|
14344
|
+
measures.forEach((measure2, m) => {
|
|
14345
|
+
values2.push([
|
|
14346
|
+
...compact3 ? [grand ? `Total ${measure2.caption}` : measure2.caption] : [
|
|
14347
|
+
grand ? `Total ${measure2.caption}` : pivot.repeatLabels || !headings && m === 0 ? caption : null,
|
|
14348
|
+
grand ? null : measure2.caption
|
|
14349
|
+
],
|
|
14350
|
+
...bands.map((band) => band[m] ?? null)
|
|
14351
|
+
]);
|
|
14352
|
+
indents.push(compact3 && !grand ? 1 : 0);
|
|
14353
|
+
rowEntries.push({
|
|
14354
|
+
indices: grand ? [0] : [index2, m],
|
|
14355
|
+
measure: m,
|
|
14356
|
+
...grand ? { type: "grand" } : {}
|
|
14357
|
+
});
|
|
14358
|
+
});
|
|
14359
|
+
};
|
|
14360
|
+
rowItems.forEach((item, index2) => {
|
|
14361
|
+
const key = pivotValueKey(item);
|
|
14362
|
+
if (headings) {
|
|
14363
|
+
values2.push([label3(item), ...Array(dimensions.width - 1).fill(null)]);
|
|
14364
|
+
rowEntries.push({ indices: [index2] });
|
|
14365
|
+
indents.push(0);
|
|
14366
|
+
}
|
|
14367
|
+
append(
|
|
14368
|
+
label3(item),
|
|
14369
|
+
[
|
|
14370
|
+
...columnItems.map(
|
|
14371
|
+
(col) => pivotNumbers(pivot, cells.get(JSON.stringify([key, pivotValueKey(col)])) ?? [])
|
|
14372
|
+
),
|
|
14373
|
+
pivotNumbers(pivot, groups.get(key) ?? [])
|
|
14374
|
+
],
|
|
14375
|
+
index2
|
|
14376
|
+
);
|
|
14377
|
+
});
|
|
14378
|
+
append(
|
|
14379
|
+
"Grand Total",
|
|
14380
|
+
[
|
|
14381
|
+
...columnItems.map((col) => pivotNumbers(pivot, columns.get(pivotValueKey(col)) ?? [])),
|
|
14382
|
+
pivotNumbers(pivot, pivot.records)
|
|
14383
|
+
],
|
|
14384
|
+
0,
|
|
14385
|
+
true
|
|
14386
|
+
);
|
|
14387
|
+
return {
|
|
14388
|
+
values: values2,
|
|
14389
|
+
rowItems,
|
|
14390
|
+
columnItems,
|
|
14391
|
+
firstDataRow,
|
|
14392
|
+
rowLabelColumns: compact3 ? 1 : 2,
|
|
14393
|
+
indents,
|
|
14394
|
+
firstHeaderRow: 1,
|
|
14395
|
+
rowEntries
|
|
14396
|
+
};
|
|
14397
|
+
}
|
|
14020
14398
|
for (const row2 of rowItems) {
|
|
14021
14399
|
const records = groups.get(pivotValueKey(row2)) ?? [];
|
|
14022
14400
|
values2.push([
|
|
14023
14401
|
label3(row2),
|
|
14024
|
-
...columnItems.
|
|
14025
|
-
(col) =>
|
|
14026
|
-
|
|
14027
|
-
|
|
14028
|
-
pivot.aggregate
|
|
14402
|
+
...columnItems.flatMap(
|
|
14403
|
+
(col) => pivotNumbers(
|
|
14404
|
+
pivot,
|
|
14405
|
+
cells.get(JSON.stringify([pivotValueKey(row2), pivotValueKey(col)])) ?? []
|
|
14029
14406
|
)
|
|
14030
14407
|
),
|
|
14031
|
-
|
|
14408
|
+
...pivotNumbers(pivot, records)
|
|
14032
14409
|
]);
|
|
14033
14410
|
}
|
|
14034
14411
|
values2.push([
|
|
14035
14412
|
"Grand Total",
|
|
14036
|
-
...columnItems.
|
|
14037
|
-
|
|
14038
|
-
),
|
|
14039
|
-
aggregate2(pivot.records, valueField, pivot.aggregate)
|
|
14413
|
+
...columnItems.flatMap((col) => pivotNumbers(pivot, columns.get(pivotValueKey(col)) ?? [])),
|
|
14414
|
+
...pivotNumbers(pivot, pivot.records)
|
|
14040
14415
|
]);
|
|
14041
|
-
return { values: values2, rowItems, columnItems, firstDataRow
|
|
14416
|
+
return { values: values2, rowItems, columnItems, firstDataRow };
|
|
14417
|
+
}
|
|
14418
|
+
|
|
14419
|
+
// xlsx/write/xml-out.ts
|
|
14420
|
+
var CONTROL2 = "\0-\b\v\f-" + String.fromCharCode(65534, 65535);
|
|
14421
|
+
var INVALID_XML = new RegExp(`[${CONTROL2}]`, "g");
|
|
14422
|
+
var escapeText = (text2) => text2.replace(INVALID_XML, "").replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
|
|
14423
|
+
var escapeAttr = (text2) => text2.replace(INVALID_XML, "").replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/\r/g, " ").replace(/\n/g, " ").replace(/\t/g, "	");
|
|
14424
|
+
function attrs(values2) {
|
|
14425
|
+
let out = "";
|
|
14426
|
+
for (const [name, value2] of Object.entries(values2)) {
|
|
14427
|
+
if (value2 === void 0) continue;
|
|
14428
|
+
const text2 = typeof value2 === "boolean" ? value2 ? "1" : "0" : typeof value2 === "number" ? num2(value2) : value2;
|
|
14429
|
+
out += ` ${name}="${escapeAttr(text2)}"`;
|
|
14430
|
+
}
|
|
14431
|
+
return out;
|
|
14042
14432
|
}
|
|
14433
|
+
var el = (name, values2 = {}, content = "") => content ? `<${name}${attrs(values2)}>${content}</${name}>` : `<${name}${attrs(values2)}/>`;
|
|
14434
|
+
var num2 = (value2) => Object.is(value2, -0) ? "0" : String(value2);
|
|
14043
14435
|
|
|
14044
14436
|
// xlsx/read/style-parts.ts
|
|
14045
14437
|
function parseColor(element2, palette) {
|
|
@@ -14074,23 +14466,6 @@ function parseSqref(sqref) {
|
|
|
14074
14466
|
return sqref.split(/\s+/).filter(Boolean).map((part) => parseRange(part)).filter((range2) => range2 !== void 0);
|
|
14075
14467
|
}
|
|
14076
14468
|
|
|
14077
|
-
// xlsx/write/xml-out.ts
|
|
14078
|
-
var CONTROL2 = "\0-\b\v\f-" + String.fromCharCode(65534, 65535);
|
|
14079
|
-
var INVALID_XML = new RegExp(`[${CONTROL2}]`, "g");
|
|
14080
|
-
var escapeText = (text2) => text2.replace(INVALID_XML, "").replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
|
|
14081
|
-
var escapeAttr = (text2) => text2.replace(INVALID_XML, "").replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/\r/g, " ").replace(/\n/g, " ").replace(/\t/g, "	");
|
|
14082
|
-
function attrs(values2) {
|
|
14083
|
-
let out = "";
|
|
14084
|
-
for (const [name, value2] of Object.entries(values2)) {
|
|
14085
|
-
if (value2 === void 0) continue;
|
|
14086
|
-
const text2 = typeof value2 === "boolean" ? value2 ? "1" : "0" : typeof value2 === "number" ? num2(value2) : value2;
|
|
14087
|
-
out += ` ${name}="${escapeAttr(text2)}"`;
|
|
14088
|
-
}
|
|
14089
|
-
return out;
|
|
14090
|
-
}
|
|
14091
|
-
var el = (name, values2 = {}, content = "") => content ? `<${name}${attrs(values2)}>${content}</${name}>` : `<${name}${attrs(values2)}/>`;
|
|
14092
|
-
var num2 = (value2) => Object.is(value2, -0) ? "0" : String(value2);
|
|
14093
|
-
|
|
14094
14469
|
// xlsx/conditional-extensions.ts
|
|
14095
14470
|
var XM = "http://schemas.microsoft.com/office/excel/2006/main";
|
|
14096
14471
|
function dataBarLengths(rule, node) {
|
|
@@ -18863,12 +19238,16 @@ function write(ctx, s, pivot, old) {
|
|
|
18863
19238
|
],
|
|
18864
19239
|
() => {
|
|
18865
19240
|
const compact3 = pivot.layout === "compact";
|
|
18866
|
-
const indents =
|
|
18867
|
-
|
|
18868
|
-
|
|
18869
|
-
|
|
18870
|
-
|
|
18871
|
-
|
|
19241
|
+
const indents = new Map(
|
|
19242
|
+
[.../* @__PURE__ */ new Set([0, ...grid6.indents ?? []])].map(
|
|
19243
|
+
(indent) => [
|
|
19244
|
+
indent,
|
|
19245
|
+
stylePatcher(ctx.workbook, {
|
|
19246
|
+
alignment: { indent, ...compact3 || indent > 0 ? { horizontal: "left" } : {} }
|
|
19247
|
+
})
|
|
19248
|
+
]
|
|
19249
|
+
)
|
|
19250
|
+
);
|
|
18872
19251
|
const styles = /* @__PURE__ */ new Map();
|
|
18873
19252
|
forEachCellInRange(sheet, location, (cell, row2, col) => {
|
|
18874
19253
|
if (cell.styleId !== void 0) styles.set(`${row2}:${col}`, cell.styleId);
|
|
@@ -18891,7 +19270,7 @@ function write(ctx, s, pivot, old) {
|
|
|
18891
19270
|
const indent = col === 0 ? grid6.indents?.[row2] ?? 0 : 0;
|
|
18892
19271
|
const alignment = styleAt(ctx.workbook, styleId).alignment;
|
|
18893
19272
|
if ((alignment?.indent ?? 0) !== indent || compact3 && alignment?.horizontal !== "left")
|
|
18894
|
-
styleId = indents
|
|
19273
|
+
styleId = indents.get(indent)(styleId);
|
|
18895
19274
|
}
|
|
18896
19275
|
putCell(sheet, r, c, { value: value2, ...styleId !== void 0 ? { styleId } : {} });
|
|
18897
19276
|
})
|
|
@@ -18918,6 +19297,10 @@ function createPivotTable(ctx, s, destination, options) {
|
|
|
18918
19297
|
valueField: options.valueField,
|
|
18919
19298
|
aggregate: aggregate3,
|
|
18920
19299
|
valueCaption: pivotCaption(aggregate3, options.valueField),
|
|
19300
|
+
...options.pageFilter !== void 0 ? { pageFilter: structuredClone(options.pageFilter) } : {},
|
|
19301
|
+
...options.valuesAxis !== void 0 ? { valuesAxis: options.valuesAxis } : {},
|
|
19302
|
+
...options.valuesPosition !== void 0 ? { valuesPosition: options.valuesPosition } : {},
|
|
19303
|
+
...options.additionalValues ? { additionalValues: normalizedPivotMeasures(options.additionalValues) } : {},
|
|
18921
19304
|
location: { start: { ...destination }, end: { ...destination } },
|
|
18922
19305
|
...options.columnField ? { columnField: options.columnField } : {}
|
|
18923
19306
|
};
|
|
@@ -18949,6 +19332,19 @@ function refreshPivotTable(ctx, s, name, patch2 = {}) {
|
|
|
18949
19332
|
if (patch2.repeatLabels !== void 0) next.repeatLabels = patch2.repeatLabels;
|
|
18950
19333
|
if (patch2.layout !== void 0) next.layout = patch2.layout;
|
|
18951
19334
|
if (patch2.subtotalPosition !== void 0) next.subtotalPosition = patch2.subtotalPosition;
|
|
19335
|
+
if (patch2.valuesAxis !== void 0) next.valuesAxis = patch2.valuesAxis;
|
|
19336
|
+
if (patch2.pageFilter !== void 0) {
|
|
19337
|
+
if (patch2.pageFilter === null) delete next.pageFilter;
|
|
19338
|
+
else next.pageFilter = structuredClone(patch2.pageFilter);
|
|
19339
|
+
}
|
|
19340
|
+
if (patch2.valuesPosition !== void 0) next.valuesPosition = patch2.valuesPosition;
|
|
19341
|
+
else if (patch2.valuesAxis === "columns" || patch2.secondRowField === "")
|
|
19342
|
+
delete next.valuesPosition;
|
|
19343
|
+
if (patch2.additionalValues !== void 0) {
|
|
19344
|
+
const measures = normalizedPivotMeasures(patch2.additionalValues);
|
|
19345
|
+
if (measures.length) next.additionalValues = measures;
|
|
19346
|
+
else delete next.additionalValues;
|
|
19347
|
+
}
|
|
18952
19348
|
validatePivotFields(next);
|
|
18953
19349
|
write(ctx, s, next, old);
|
|
18954
19350
|
}
|
|
@@ -25491,17 +25887,23 @@ var NAVIGATION_STRINGS = {
|
|
|
25491
25887
|
"Minigr\xE1ficos (crear, dar formato y borrar)",
|
|
25492
25888
|
"\u8FF7\u4F60\u56FE\uFF08\u521B\u5EFA\u3001\u683C\u5F0F\u8BBE\u7F6E\u548C\u6E05\u9664\uFF09"
|
|
25493
25889
|
],
|
|
25494
|
-
"Worksheet-range PivotTables (
|
|
25495
|
-
"Tableaux crois\xE9s dynamiques de plages (
|
|
25496
|
-
"PivotTables aus Arbeitsblattbereichen (
|
|
25497
|
-
"Tablas din\xE1micas de rangos (
|
|
25498
|
-
"\u5DE5\u4F5C\u8868\u533A\u57DF\u6570\u636E\u900F\u89C6\u8868\uFF08\
|
|
25890
|
+
"Worksheet-range PivotTables (up to two row fields and sixteen values, one optional column field and one cached report filter)": [
|
|
25891
|
+
"Tableaux crois\xE9s dynamiques de plages (jusqu\u2019\xE0 deux champs de ligne et seize valeurs, un champ de colonne facultatif et un filtre de rapport mis en cache)",
|
|
25892
|
+
"PivotTables aus Arbeitsblattbereichen (bis zu zwei Zeilenfelder und sechzehn Werte, ein optionales Spaltenfeld und ein zwischengespeicherter Berichtsfilter)",
|
|
25893
|
+
"Tablas din\xE1micas de rangos (hasta dos campos de fila y diecis\xE9is valores, un campo de columna opcional y un filtro de informe en cach\xE9)",
|
|
25894
|
+
"\u5DE5\u4F5C\u8868\u533A\u57DF\u6570\u636E\u900F\u89C6\u8868\uFF08\u6700\u591A\u4E24\u4E2A\u884C\u5B57\u6BB5\u548C\u5341\u516D\u4E2A\u503C\u5B57\u6BB5\u3001\u4E00\u4E2A\u53EF\u9009\u5217\u5B57\u6BB5\u548C\u4E00\u4E2A\u7F13\u5B58\u62A5\u8868\u7B5B\u9009\u5668\uFF09"
|
|
25499
25895
|
],
|
|
25500
|
-
"
|
|
25501
|
-
"Dispositions
|
|
25502
|
-
"
|
|
25503
|
-
"Dise\xF1os
|
|
25504
|
-
"\
|
|
25896
|
+
"Unmodeled PivotTable layouts, grouping, slicers and external data sources (preserved)": [
|
|
25897
|
+
"Dispositions non prises en charge, regroupements, segments et sources externes de tableaux crois\xE9s dynamiques (conserv\xE9s)",
|
|
25898
|
+
"Nicht modellierte PivotTable-Layouts, Gruppierung, Datenschnitte und externe Datenquellen (erhalten)",
|
|
25899
|
+
"Dise\xF1os de tablas din\xE1micas no modelados, agrupaci\xF3n, segmentaciones y fuentes externas (conservados)",
|
|
25900
|
+
"\u672A\u5EFA\u6A21\u7684\u6570\u636E\u900F\u89C6\u8868\u5E03\u5C40\u3001\u5206\u7EC4\u3001\u5207\u7247\u5668\u548C\u5916\u90E8\u6570\u636E\u6E90\uFF08\u4FDD\u7559\uFF09"
|
|
25901
|
+
],
|
|
25902
|
+
"Values-on-rows report filters, multiple/dynamic filters and repeated column captions (preserved)": [
|
|
25903
|
+
"Filtres de rapport avec valeurs en lignes, filtres multiples ou dynamiques et libell\xE9s de colonnes r\xE9p\xE9t\xE9s (conserv\xE9s)",
|
|
25904
|
+
"Berichtsfilter mit Werten in Zeilen, mehrere/dynamische Filter und wiederholte Spaltenbeschriftungen (erhalten)",
|
|
25905
|
+
"Filtros de informe con valores en filas, filtros m\xFAltiples o din\xE1micos y t\xEDtulos de columna repetidos (conservados)",
|
|
25906
|
+
"\u503C\u4F4D\u4E8E\u884C\u4E0A\u7684\u62A5\u8868\u7B5B\u9009\u5668\u3001\u591A\u91CD\u6216\u52A8\u6001\u7B5B\u9009\u5668\u548C\u91CD\u590D\u5217\u6807\u9898\uFF08\u4FDD\u7559\uFF09"
|
|
25505
25907
|
],
|
|
25506
25908
|
OK: ["OK", "OK", "Aceptar", "\u786E\u5B9A"],
|
|
25507
25909
|
Cancel: ["Annuler", "Abbrechen", "Cancelar", "\u53D6\u6D88"],
|
|
@@ -28444,6 +28846,107 @@ var SPARKLINE_STRINGS = {
|
|
|
28444
28846
|
|
|
28445
28847
|
// xlsx/ui/commands/i18n/pivots.ts
|
|
28446
28848
|
var PIVOT_STRINGS = {
|
|
28849
|
+
"Report Filter Field:": [
|
|
28850
|
+
"Champ de filtre du rapport :",
|
|
28851
|
+
"Berichtsfilterfeld:",
|
|
28852
|
+
"Campo de filtro del informe:",
|
|
28853
|
+
"\u62A5\u8868\u7B5B\u9009\u5B57\u6BB5\uFF1A"
|
|
28854
|
+
],
|
|
28855
|
+
"Report Filter Item:": [
|
|
28856
|
+
"\xC9l\xE9ment du filtre du rapport :",
|
|
28857
|
+
"Berichtsfilterelement:",
|
|
28858
|
+
"Elemento de filtro del informe:",
|
|
28859
|
+
"\u62A5\u8868\u7B5B\u9009\u9879\uFF1A"
|
|
28860
|
+
],
|
|
28861
|
+
"(All)": ["(Tous)", "(Alle)", "(Todos)", "\uFF08\u5168\u90E8\uFF09"],
|
|
28862
|
+
"(blank)": ["(vide)", "(leer)", "(en blanco)", "\uFF08\u7A7A\u767D\uFF09"],
|
|
28863
|
+
"Before row fields": [
|
|
28864
|
+
"Avant les champs de ligne",
|
|
28865
|
+
"Vor den Zeilenfeldern",
|
|
28866
|
+
"Antes de los campos de fila",
|
|
28867
|
+
"\u884C\u5B57\u6BB5\u4E4B\u524D"
|
|
28868
|
+
],
|
|
28869
|
+
"Values are listed before the row fields.": [
|
|
28870
|
+
"Les valeurs sont affich\xE9es avant les champs de ligne.",
|
|
28871
|
+
"Werte werden vor den Zeilenfeldern aufgef\xFChrt.",
|
|
28872
|
+
"Los valores aparecen antes de los campos de fila.",
|
|
28873
|
+
"\u503C\u5217\u5728\u884C\u5B57\u6BB5\u4E4B\u524D\u3002"
|
|
28874
|
+
],
|
|
28875
|
+
"Values Placement:": [
|
|
28876
|
+
"Position des valeurs :",
|
|
28877
|
+
"Anordnung der Werte:",
|
|
28878
|
+
"Posici\xF3n de los valores:",
|
|
28879
|
+
"\u503C\u4F4D\u7F6E\uFF1A"
|
|
28880
|
+
],
|
|
28881
|
+
"After row fields": [
|
|
28882
|
+
"Apr\xE8s les champs de ligne",
|
|
28883
|
+
"Nach den Zeilenfeldern",
|
|
28884
|
+
"Despu\xE9s de los campos de fila",
|
|
28885
|
+
"\u884C\u5B57\u6BB5\u4E4B\u540E"
|
|
28886
|
+
],
|
|
28887
|
+
"Between row fields": [
|
|
28888
|
+
"Entre les champs de ligne",
|
|
28889
|
+
"Zwischen den Zeilenfeldern",
|
|
28890
|
+
"Entre los campos de fila",
|
|
28891
|
+
"\u884C\u5B57\u6BB5\u4E4B\u95F4"
|
|
28892
|
+
],
|
|
28893
|
+
"Values are listed between the row fields.": [
|
|
28894
|
+
"Les valeurs sont affich\xE9es entre les champs de ligne.",
|
|
28895
|
+
"Werte werden zwischen den Zeilenfeldern aufgef\xFChrt.",
|
|
28896
|
+
"Los valores aparecen entre los campos de fila.",
|
|
28897
|
+
"\u503C\u5217\u5728\u884C\u5B57\u6BB5\u4E4B\u95F4\u3002"
|
|
28898
|
+
],
|
|
28899
|
+
"Values Axis:": ["Axe des valeurs :", "Werteachse:", "Eje de valores:", "\u503C\u8F74\uFF1A"],
|
|
28900
|
+
"Values on Columns": [
|
|
28901
|
+
"Valeurs en colonnes",
|
|
28902
|
+
"Werte in Spalten",
|
|
28903
|
+
"Valores en columnas",
|
|
28904
|
+
"\u503C\u663E\u793A\u5728\u5217\u4E0A"
|
|
28905
|
+
],
|
|
28906
|
+
"Values on Rows": ["Valeurs en lignes", "Werte in Zeilen", "Valores en filas", "\u503C\u663E\u793A\u5728\u884C\u4E0A"],
|
|
28907
|
+
"Values are listed after the row fields.": [
|
|
28908
|
+
"Les valeurs sont affich\xE9es apr\xE8s les champs de ligne.",
|
|
28909
|
+
"Werte werden nach den Zeilenfeldern aufgef\xFChrt.",
|
|
28910
|
+
"Los valores aparecen despu\xE9s de los campos de fila.",
|
|
28911
|
+
"\u503C\u5217\u5728\u884C\u5B57\u6BB5\u4E4B\u540E\u3002"
|
|
28912
|
+
],
|
|
28913
|
+
"Values on rows display subtotals below groups.": [
|
|
28914
|
+
"Les valeurs en lignes affichent les sous-totaux sous les groupes.",
|
|
28915
|
+
"Werte in Zeilen zeigen Teilergebnisse unter den Gruppen an.",
|
|
28916
|
+
"Los valores en filas muestran los subtotales debajo de los grupos.",
|
|
28917
|
+
"\u884C\u4E0A\u7684\u503C\u5C06\u5206\u7C7B\u6C47\u603B\u663E\u793A\u5728\u7EC4\u4E0B\u65B9\u3002"
|
|
28918
|
+
],
|
|
28919
|
+
"Multiple value fields use Values on columns.": [
|
|
28920
|
+
"Plusieurs champs de valeur utilisent les valeurs en colonnes.",
|
|
28921
|
+
"Mehrere Wertfelder verwenden Werte in Spalten.",
|
|
28922
|
+
"Varios campos de valor usan Valores en columnas.",
|
|
28923
|
+
"\u591A\u4E2A\u503C\u5B57\u6BB5\u7684\u503C\u4F4D\u4E8E\u5217\u8F74\u4E0A\u3002"
|
|
28924
|
+
],
|
|
28925
|
+
"Add Value Field": [
|
|
28926
|
+
"Ajouter un champ de valeur",
|
|
28927
|
+
"Wertfeld hinzuf\xFCgen",
|
|
28928
|
+
"A\xF1adir campo de valor",
|
|
28929
|
+
"\u6DFB\u52A0\u503C\u5B57\u6BB5"
|
|
28930
|
+
],
|
|
28931
|
+
"Remove Value Field": [
|
|
28932
|
+
"Supprimer le champ de valeur",
|
|
28933
|
+
"Wertfeld entfernen",
|
|
28934
|
+
"Quitar campo de valor",
|
|
28935
|
+
"\u5220\u9664\u503C\u5B57\u6BB5"
|
|
28936
|
+
],
|
|
28937
|
+
"Additional Value Field": [
|
|
28938
|
+
"Champ de valeur suppl\xE9mentaire",
|
|
28939
|
+
"Zus\xE4tzliches Wertfeld",
|
|
28940
|
+
"Campo de valor adicional",
|
|
28941
|
+
"\u9644\u52A0\u503C\u5B57\u6BB5"
|
|
28942
|
+
],
|
|
28943
|
+
"Value Caption:": ["Libell\xE9 de valeur :", "Wertbeschriftung:", "T\xEDtulo del valor:", "\u503C\u6807\u9898\uFF1A"],
|
|
28944
|
+
"Multiple value fields use tabular layout with Values on columns.": [
|
|
28945
|
+
"Plusieurs champs de valeur utilisent la forme tabulaire avec les valeurs en colonnes.",
|
|
28946
|
+
"Mehrere Wertfelder verwenden das Tabellenformat mit Werten in Spalten.",
|
|
28947
|
+
"Varios campos de valor usan el formato tabular con Valores en columnas.",
|
|
28948
|
+
"\u591A\u4E2A\u503C\u5B57\u6BB5\u4F7F\u7528\u8868\u683C\u5E03\u5C40\uFF0C\u503C\u4F4D\u4E8E\u5217\u8F74\u4E0A\u3002"
|
|
28949
|
+
],
|
|
28447
28950
|
"Compact Form": ["Forme compacte", "Kompaktformat", "Formato compacto", "\u538B\u7F29\u5F62\u5F0F"],
|
|
28448
28951
|
"Outline Form": ["Forme de plan", "Gliederungsformat", "Formato de esquema", "\u5927\u7EB2\u5F62\u5F0F"],
|
|
28449
28952
|
"Tabular Form": ["Forme tabulaire", "Tabellenformat", "Formato tabular", "\u8868\u683C\u5F62\u5F0F"],
|