Descargar un archivo de Excel desde el almacenamiento en la nube de Google devuelve un búfer, ¿cómo puedo devolver el archivo de Excel real para que pueda escribir en él en mi controlador?
Estoy intentando recuperar un archivo de Excel de mi cubo utilizando Firebase Admin SDK con el siguiente código:
export const getTemplate = async (fileName: string) => {
const filePath = admin
.storage()
.bucket()
.file('sheets/template.xlsx')
const [file] = await filePath.download()
return file
}
Luego paso lo que se devuelve de esta función a esta función:
export const writeToTemplate = (
objects: any[],
sheetNames: string[],
file
) => {
objects.forEach((dataObject, index) => {
const sheetName = sheetNames[index]
const worksheet = templateFile.Sheets[sheetName]
utils.sheet.addJson(worksheet, dataObject)
})
return file
}
Sin embargo, esto arroja un error que no puede leer mi archivo. Cuando registro en la consola el archivo, muestra un buffer:
<buffer 50="" 4b="" 03="" 04="" 14="" 00="" 06="" 00="" 08="" 00.........="">
¿Cómo puedo escribir realmente en el archivo? Saludos 🙂
davy.ai
Parece que el problema puede estar en la forma en que el parámetro
file
se está pasando a la funciónwriteToTemplate
.En la función
getTemplate
,filePath.download()
devuelve un buffer con el contenido del archivo, pero cuando se devuelve, no se guarda en una variable. En su lugar, el buffer se devuelve y se pasa como parámetrofile
a la funciónwriteToTemplate
.Para solucionar esto, puedes actualizar la función
getTemplate
para guardar el archivo descargado en una variable y devolver eso en su lugar:Luego, en la función
writeToTemplate
, cambia el nombre del parámetro defile
atemplateFile
(para evitar confusión con la variablefile
devuelta degetTemplate
). También puedes actualizar la función para analizar la cadena como un libro de Excel utilizando una biblioteca comoxlsx
:Al convertir el buffer a una cadena y luego analizarlo como un libro de Excel, puedes modificar la hoja de cálculo según sea necesario antes de convertirla de vuelta a un buffer para guardarla en tu bucket de Firebase Storage.