es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Comienza a escribir datos en Excel en alguna posición con SheetJS.

No sé cómo plantear adecuadamente mi pregunta, pero tengo un código que toma los datos de una tabla HTML y los coloca en Excel, pero comienza en la posición A1 y digamos que quiero comenzar en C3.

Y estando aquí, ¿puedo importar un archivo xlsx con estilos, hacer una copia y llenarlo con este método?

var t = document.getElementsByTagName("table")[0];

var wb1 = XLSX.utils.table_to_sheet(t);
var wb2 = XLSX.utils.table_to_sheet(t);

var wb = XLSX.utils.book_new();

XLSX.utils.book_append_sheet(wb, wb1, "Sheet 1");
XLSX.utils.book_append_sheet(wb, wb2, "Sheet 2");

var wbout = XLSX.write(wb, {
    bookType: 'xlsx',
    bookSST: true,
    type: 'binary'
});


saveAs(new Blob([s2ab(wbout)], {
    type: "application/octet-stream"
}), 'data.xlsx');


function s2ab(s) {
    var buf = new ArrayBuffer(s.length);
    var view = new Uint8Array(buf);
    for (var i = 0; i < s.length; i++) view[i] = s.charCodeAt(i) & 0xFF;

    return buf;
}    

<table>
 <tr>
  <td>Emil</td>
  <td>Tobias</td>
  <td>Linus</td>
 </tr>
 <tr>
  <td>26</td>
  <td>24</td>
  <td>20</td>
 </tr>
</table>
<button type="button" onclick="downloadXlsx()">Descargar Excel</button>

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para iniciar la hoja de cálculo de Excel en una posición diferente, puedes modificar las variables wb1 y wb2 antes de añadirlas al libro de trabajo usando XLSX.utils.book_append_sheet().

    Por ejemplo, para empezar en la posición C3, puedes añadir dos celdas vacías al principio de cada hoja:

    var t = document.getElementsByTagName("table")[0];
    var wb1 = XLSX.utils.table_to_sheet(t);
    var wb2 = XLSX.utils.table_to_sheet(t);
    
    // añadir dos celdas vacías al principio de cada hoja
    wb1["!ref"] = "C3:" + wb1["!ref"];
    wb2["!ref"] = "C3:" + wb2["!ref"];
    
    var wb = XLSX.utils.book_new();
    XLSX.utils.book_append_sheet(wb, wb1, "Hoja 1");
    XLSX.utils.book_append_sheet(wb, wb2, "Hoja 2");
    
    var wbout = XLSX.write(wb, {
      bookType: "xlsx",
      bookSST: true,
      type: "binary",
    });
    
    saveAs(
      new Blob([s2ab(wbout)], { type: "application/octet-stream" }),
      "data.xlsx"
    );
    

    En cuanto a importar un archivo xlsx con estilos, puedes usar XLSX.readFile() para leer el archivo y luego modificar el objeto de hoja de cálculo resultante antes de añadirlo a tu libro de trabajo. Por ejemplo, para hacer una copia de la primera hoja del archivo y añadirla a tu libro de trabajo:

    // leer el archivo xlsx
    var workbook = XLSX.readFile('ejemplo.xlsx');
    
    // obtener la primera hoja
    var sheet = workbook.Sheets[workbook.SheetNames[0]];
    
    // hacer una copia y modificarla
    var newSheet = XLSX.utils.sheet_copy(sheet);
    newSheet.A1.t = 'Nuevo Valor';
    
    // añadir la hoja modificada a tu libro de trabajo
    XLSX.utils.book_append_sheet(wb, newSheet, "Nueva Hoja");
    

Comments are closed.