mr-excel
Version:
A versatile JavaScript library for effortlessly generating .xlsx files from input objects. Seamlessly create Excel spreadsheets with data, formatting, formulas, and more.
109 lines (108 loc) • 3.81 kB
text/typescript
export function contentTypeGenerator(
sheetContentType: string,
commentId: number[],
arrTypes: string[],
sheetDrawers: string[],
checkboxForm: string[],
needCalcChain: boolean,
tableRef: string[]
) {
let typeCheck: {
[key: string]: boolean;
} = {};
return (
'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n' +
'<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">' +
'<Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/>' +
'<Default Extension="vml" ContentType="application/vnd.openxmlformats-officedocument.vmlDrawing" />' +
'<Default Extension="xml" ContentType="application/xml" />' +
"<Override" +
' ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"' +
' PartName="/xl/workbook.xml" />' +
'<Override ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"' +
' PartName="/xl/styles.xml" />' +
'<Override ContentType="application/vnd.openxmlformats-officedocument.theme+xml"' +
' PartName="/xl/theme/theme1.xml" />' +
arrTypes.reduce((res, curr) => {
curr = curr.toLowerCase();
if (typeCheck[curr]) {
return res;
}
if (curr == "svg") {
typeCheck["png"] = true;
typeCheck["svg"] = true;
return (
res +
'<Default Extension="png" ContentType="image/png"/>' +
'<Default Extension="svg" ContentType="image/svg+xml"/>'
);
} else if (curr == "jpeg" || curr == "jpg") {
typeCheck["jpeg"] = true;
typeCheck["jpg"] = true;
return (
res + '<Default Extension="' + curr + '" ContentType="image/jpeg"/>'
);
} else {
typeCheck[curr] = true;
return (
res +
'<Default Extension="' +
curr +
'" ContentType="image/' +
curr +
'"/>'
);
}
}, "") +
commentId.reduce((res, curr) => {
return (
res +
'<Override PartName="/xl/comments' +
curr +
'.xml"' +
' ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml" />'
);
}, "") +
sheetContentType +
(tableRef.length > 0
? tableRef.reduce((res, cur) => {
return (
res +
'<Override PartName="/xl/tables/' +
cur +
'" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml"/>'
);
}, "")
: "") +
"<Override" +
' ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml"' +
' PartName="/xl/sharedStrings.xml" />' +
(needCalcChain
? '<Override PartName="/xl/calcChain.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml"/>'
: "") +
'<Override PartName="/docProps/core.xml" ' +
' ContentType="application/vnd.openxmlformats-package.core-properties+xml" />' +
sheetDrawers.reduce((res, cu) => {
return (
res +
'<Override PartName="/xl/drawings/' +
cu +
'"' +
' ContentType="application/vnd.openxmlformats-officedocument.drawing+xml" />'
);
}, "") +
(checkboxForm.length > 0
? checkboxForm.reduce((res, curr, index) => {
return (
res +
'<Override PartName="/xl/ctrlProps/ctrlProp' +
(index + 1) +
'.xml" ContentType="application/vnd.ms-excel.controlproperties+xml"/>'
);
}, "")
: "") +
'<Override PartName="/docProps/app.xml" ' +
' ContentType="application/vnd.openxmlformats-officedocument.extended-properties+xml" />' +
"</Types>"
);
}