Preserve QExcell sheet tab colors in XLSX

This commit is contained in:
Курнат Андрей
2026-06-01 12:56:24 +03:00
parent 5ebc9639dc
commit 3d4e1d51ef
4 changed files with 74 additions and 7 deletions
+47
View File
@@ -6,6 +6,7 @@ import {
buildAutoFilterXml,
buildHyperlinksXml,
buildMergeCellsXml,
buildSheetPrXml,
buildSheetViewsXml,
createCellStyleRegistry,
buildWorksheetRelationshipsXml,
@@ -23,6 +24,7 @@ import {
worksheetXmlToFrozenPane,
worksheetXmlToHyperlinks,
worksheetXmlToMergedCells,
worksheetXmlToTabColor,
xlsxStylesXmlToCellFormatTable,
xlsxThemeXmlToColors,
xlsxCellToText
@@ -681,6 +683,51 @@ describe("excellOffice OOXML helpers", () => {
expect(imported.sheets[0].autoFilter).toBe("A1:D20");
});
it("читает и записывает цвет вкладки листа XLSX через sheetPr tabColor", async () => {
expect(
worksheetXmlToTabColor({
worksheet: {
sheetPr: { tabColor: { rgb: "FF0F766E" } }
}
})
).toBe("0F766E");
expect(
worksheetXmlToTabColor(
{
worksheet: {
sheetPr: { tabColor: { theme: "4" } }
}
},
["000000", "FFFFFF", "1F497D", "EEECE1", "123456"]
)
).toBe("123456");
expect(buildSheetPrXml("#0f766e")).toBe('<sheetPr><tabColor rgb="FF0F766E"/></sheetPr>');
expect(buildSheetPrXml("bad")).toBe("");
const blob = await exportXlsxBlob({
id: "book-1",
title: "Tab color.xlsx",
updatedAt: "2026-06-01T00:00:00.000Z",
activeSheet: "sheet-1",
sheets: [
{
id: "sheet-1",
name: "Color",
tabColor: "#0f766e",
frozenPane: { rows: 1 },
cells: { A1: "Header" }
}
]
});
const zip = await JSZip.loadAsync(await blob.arrayBuffer());
const sheetXml = (await zip.file("xl/worksheets/sheet1.xml")?.async("string")) ?? "";
const imported = await importXlsxFile(new File([blob], "Tab color.xlsx", { type: blob.type }));
expect(sheetXml).toContain('<sheetPr><tabColor rgb="FF0F766E"/></sheetPr>');
expect(sheetXml.indexOf("<sheetPr>")).toBeLessThan(sheetXml.indexOf("<sheetViews>"));
expect(imported.sheets[0].tabColor).toBe("0F766E");
});
it("создает OOXML chart part для диаграммы XLSX", () => {
const xml = buildChartXml(
{