Tengo un archivo xlsm en la carpeta de activos, que necesito leer y devolver como archivo de descarga. Puedo leer el archivo.
El siguiente código, que básicamente descarga el blob como un archivo, conserva las macros y el estilo.
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(); });Sin embargo, necesito modificar algunos datos y estoy usando SheetJs (xlsx) para modificarlos, pero no conserva las macros ni el estilo.
El siguiente código usa xlsx para simplemente leerlo y escribirlo en un archivo y aún pierde macros y estilo, solo conserva los datos.
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); }); incluso después de establecer bookVBA y cellStyles en verdadero no se resuelve.
Estoy usando la última versión de SheetJs