Skip to content

Commit 1ce5405

Browse files
committed
Added Excel support
1 parent 532ac07 commit 1ce5405

2 files changed

Lines changed: 44 additions & 13 deletions

File tree

dr-controler.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ async function stateChange(state) {
1818
document.getElementById('please-login').style.display = 'none';
1919
document.getElementById('data-view').style.display = 'block';
2020
setQuestionnaries();
21-
2221
} else {
2322
document.getElementById('please-login').style.display = 'block';
2423
document.getElementById('data-view').style.display = 'none';

exporToXLS.js

Lines changed: 44 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,56 @@
11
// add XML export to file
22
import "https://unpkg.com/write-excel-file@1.x/bundle/write-excel-file.min.js";
33

4+
const regexISO = /\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/;
5+
46
export async function exportXLSFile(headers, lines, fileTitle) {
57
try {
68
console.log({ headers, lines });
79

8-
const schema = Object.entries(headers).map((h) => {
9-
const key = h[0];
10-
return {
11-
column: h[1],
12-
value: function (e) {
13-
return e[key];
14-
},
15-
};
16-
});
10+
const headersXLS = Object.values(headers).map((h) => ({
11+
value: h,
12+
fontWeight: 'bold',
13+
}));
14+
const columns = headersXLS.map((e) => ({ width: e.value.length + 2 }));
15+
16+
const dataXLS = [];
17+
dataXLS.push(headersXLS);
18+
for (const line of lines) {
19+
const row = [];
20+
dataXLS.push(row);
21+
let i = 0;
22+
for (const [key, label] of Object.entries(headers)) {
23+
const cell = { value: line[key] };
24+
let myLength = 10;
25+
26+
// -- number
27+
const n = Number(cell.value);
28+
if (!Number.isNaN(n)) {
29+
cell.value = n;
30+
cell.type = Number;
31+
} else if (typeof cell.value === 'string') { // date
32+
myLength = cell.value.length;
33+
const fulldate = cell.value.endsWith('Z');
34+
const t = fulldate ? cell.value : cell.value + 'T00:00:00.000Z';
1735

36+
if (regexISO.test(t)) {
37+
cell.value = new Date(t);
38+
cell.type = Date;
39+
cell.format = fulldate ? 'yyyy-mm-dd hh:mm:ss' : 'yyyy-mm-dd'
40+
myLength = fulldate ? 18 : 11;
41+
}
1842

19-
const exportedFilename = fileTitle + ".xlsx" || "export.xlsx";
20-
await writeXlsxFile(lines, {
21-
schema,
43+
}
44+
row.push(cell);
45+
myLength = Math.min(myLength, 33) + 2;
46+
if (columns[i].width < myLength) columns[i].width = myLength;
47+
i++;
48+
}
49+
}
50+
console.log('## columns', {columns});
51+
const exportedFilename = fileTitle + '.xlsx' || 'export.xlsx';
52+
await writeXlsxFile(dataXLS, {
53+
columns,
2254
fileName: exportedFilename,
2355
});
2456
} catch (e) {

0 commit comments

Comments
 (0)