Skip to content

Instantly share code, notes, and snippets.

@hongjr03
Created December 5, 2024 12:18
Show Gist options
  • Select an option

  • Save hongjr03/6147001fdc93e335ad1b9b422ee1a9da to your computer and use it in GitHub Desktop.

Select an option

Save hongjr03/6147001fdc93e335ad1b9b422ee1a9da to your computer and use it in GitHub Desktop.
function convertToTypst(worksheet) {
const range = XLSX.utils.decode_range(worksheet["!ref"]);
const columns = range.e.c - range.s.c + 1;
const merges = worksheet["!merges"] || [];
let typstCode = `#table(columns: ${columns},\n`;
for (let row = range.s.r; row <= range.e.r; row++) {
typstCode += " ";
for (let col = range.s.c; col <= range.e.c; col++) {
const cellAddress = XLSX.utils.encode_cell({ r: row, c: col });
const mergeInfo = findMergeInfo(merges, row, col);
if (mergeInfo) {
if (mergeInfo.s.r === row && mergeInfo.s.c === col) {
const cell = worksheet[cellAddress];
const value = cell ? cell.v : "";
const rowspan = mergeInfo.e.r - mergeInfo.s.r + 1;
const colspan = mergeInfo.e.c - mergeInfo.s.c + 1;
typstCode += "table.cell(";
if (rowspan > 1) {
typstCode += `rowspan: ${rowspan}, `;
}
if (colspan > 1) {
typstCode += `colspan: ${colspan}, `;
}
typstCode = typstCode.replace(/,\s*$/, "");
typstCode += `)[${value}], `;
}
} else {
const cell = worksheet[cellAddress];
const value = cell ? cell.v : "";
typstCode += `[${value}], `;
}
}
typstCode += "\n";
}
typstCode += ")";
return typstCode;
}
function findMergeInfo(merges, row, col) {
return merges.find(
(merge) =>
row >= merge.s.r &&
row <= merge.e.r &&
col >= merge.s.c &&
col <= merge.e.c
);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment