fix: export filtered tender list as real XLSX

This commit is contained in:
2026-09-06 09:19:41 +03:00
parent 9c7055a543
commit f593d5e372
4 changed files with 75 additions and 26 deletions
+21
View File
@@ -0,0 +1,21 @@
// User/source text stays a string cell, including leading '=' and embedded newlines.
export async function createTenderWorkbook(tenders) {
if (!Array.isArray(tenders) || !tenders.length) throw new Error('Dışa aktarılacak ihale bulunamadı.');
const {default:ExcelJS} = await import('exceljs');
const book = new ExcelJS.Workbook();
book.creator = 'İhaleist';
const sheet = book.addWorksheet('İhale Listesi');
sheet.columns = [
['İKN',20],['Başlık',65],['Kurum',45],['Şehir',20],['İhale tarihi',18],
['İhale saati',15],['Alım türü',25],['Sektör',30],['CPV',35],['Kaynak',55],
].map(([header,width])=>({header,width}));
for (const t of tenders) {
sheet.addRow([t.ikn,t.baslik,t.kurum,t.sehir,t.tarih,t.saat,t.alimTuru,t.sektor,
t.cpvLabel || (Array.isArray(t.cpv) ? t.cpv.join(', ') : t.cpv),t.kaynakUrl].map(v=>String(v ?? '')));
}
sheet.views = [{state:'frozen',ySplit:1}];
sheet.autoFilter = {from:'A1',to:`J${tenders.length+1}`};
sheet.getRow(1).font = {bold:true};
sheet.eachRow(row=>{row.alignment={vertical:'top',wrapText:true};});
return book.xlsx.writeBuffer();
}