I have an xlsm file in assets folder, which I need to reading and returning as a download file. I am able to read the file.
The following code, which basically downloads the blob as a file, it retains the macros and styling.
this.http.get(..., {responseType: 'blob' as 'json'}).subscribe((response:any)=>{
let dataType = response.type;
let binaryData = [];
binaryData.push(response);
let downloadLink = document.createElement('a');
downloadLink.href = window.URL.createObjectURL(new Blob(binaryData, {type: dataType}));
if (this.fileName)
downloadLink.setAttribute('download', this.fileName);
document.body.appendChild(downloadLink);
downloadLink.click();
});
However, I need to modify some data, and I am using SheetJs(xlsx) to modify it, but it is not retaining the macros and styling.
The following code uses xlsx to simply read and write it to a file and it is still losing macros and styling, only retaining the data.
this.http.get(..., {responseType: 'blob' as 'json'}).subscribe((response:any)=>{
const reader: FileReader = new FileReader();
reader.onload = (e: any) => {
const bstr: string = e.target.result;
const wb: XLSX.WorkBook = XLSX.read(bstr, {
type: 'binary',
bookVBA :true,
cellStyles:true,
cellHTML:true });
XLSX.writeFile(wb, this.fileName,{
type: 'binary',
bookVBA:true,
bookType: 'xlsm',
cellStyles:true,
bookSST:true,
});
};
reader.readAsBinaryString(response);
});
even after setting bookVBA and cellStyles to true isn't resolving it.
I am using the latest version of SheetJs