Вопрос, в том, как сделать вставляемые строки - гиперссылками.
Используемый модуль - xlsx-style (^0.8.13)
Код для примера в уменьшенном объёме.
Пример с типом "l" не помогает:
ws[cell_ref] = {
v: value,
t: type,
s: val.style || '',
l: { Target:"#'" + cell_ref.v + "'!A1", Tooltip:cell_ref.v }
};
Создание:
createWB(Name) {
let wb = new Workbook();
wb.SheetNames.push(Name);
wb.Sheets[Name] = {'!cols': []};
return wb;
},
Промежуточный код при генерации ячеек из данных:
export(Name, ColsOptions, ResponseData) {
let wb = this.createWB(Name);
let ws = wb.Sheets[Name];
// set main settings
ws['!ref'] = this.encode_range({
s: {c: 0, r: 0},
e: {c: Object.keys(ColsOptions).length - 1, r: ResponseData.Records.length}
});
//set cols width
_.each(ColsOptions, (val) => {
ws['!cols'].push({wch: val.wch});
});
// set header
let colIndex = -1;
_.each(ColsOptions, (val) => {
let cell_ref = this.encode_cell({c: ++colIndex, r: 0});
ws[cell_ref] = {
v: label,
t: 's',
s: {
alignment: {
vertical: 'center',
horizontal: 'center',
wrapText: true
},
}
},
};
});
// create dara rows
let newVersion = _.isArray(ColsOptions);
_.each(ResponseData.Records, (item, rowIndex) => {
let colIndex = -1;
_.each(ColsOptions, (val, key) => {
let cell_ref = XLSX.utils.encode_cell({c: ++colIndex, r: rowIndex + 1});
let value = (newVersion) ? item[val.field] || '' : item[key] || '';
}
ws[cell_ref] = {
v: value,
t: type,
s: val.style || '',
l: { Target:"#'" + cell_ref.v + "'!A1", Tooltip:cell_ref.v }
};
});
});
},
Генерация:
const wbout = XLSX.write(wb, {type: 'binary', bookType: 'xlsx', bookSST: true/*, cellDates: true*/});
FileSaver.saveAs(new Blob([this.s2ab(wbout)], {type: 'application/octet-stream'}), ws_name + '.xlsx');