Introducción y uso del objeto de hoja de cálculo general de SheetJS

Brevemente

El "Formato de hoja de cálculo común" (CSF) es el modelo de objeto utilizado por SheetJS.
Por ejemplo, cuando se utiliza el complemento xlsx, el objeto de datos del archivo de Excel obtenido se diseña de acuerdo con este modelo.
Objeto de hoja de cálculo genérico SheetJs

inserte la descripción de la imagen aquí

introducir

importar cdn:

  <script lang="javascript" src="https://cdn.sheetjs.com/xlsx-0.19.2/package/dist/xlsx.full.min.js"></script>

modelo de objeto

Primero, echemos un vistazo al modelo de objeto de hoja de cálculo genérico como un todo.
inserte la descripción de la imagen aquí

  • libro de trabajo (objeto de libro de trabajo ): El objeto de libro de trabajo es el objeto de archivo leído por conversión. Contiene los atributos relevantes del objeto de archivo y la información de datos de la hoja de trabajo almacenada.
  • hojas (objeto de hoja de cálculo) : las hojas son objetos JavaScript ordinarios. Cada tecla que no comienza con ! es una dirección de estilo A1 y su valor correspondiente es un objeto de celda. (El estilo A1 representa una tabla bidimensional con columnas en orden alfabético y filas en orden numérico)
  • celda (objeto de celda) : en la hoja de trabajo, el atributo que comienza con el estilo A1 es un objeto de celda, que utiliza una serie de atributos definidos para almacenar información de datos relacionados.
  • Dirección y rango : la dirección representa la posición del objeto de la celda en la hoja de trabajo; el rango representa la información combinada en la hoja de trabajo.

Direcciones y rangos

DIRECCIÓN

El objeto de dirección de la unidad se almacena como {c:C, r:R}, donde C y R son el número de columna (col) y el número de fila (fila) del índice 0 respectivamente, y el índice js comienza desde 0 de forma predeterminada . Por ejemplo, la dirección de celda B5 está representada por el objeto {c:1, r:4} y A1 está representada por {c:0, r:0}.

alcance

Un objeto de rango de celdas se almacena como {s:S, e:E}, donde S es la primera celda del rango y E es la última celda del rango . rango inclusive, intervalo cerrado. Por ejemplo, el rango A3:B7 está representado por los objetos {s:{c:0, r:2}, e:{c:1, r:6}}.

El rango de columna (que abarca cada fila) está representado por una fila inicial de 0 y una fila final de 1048575:

{
    
     s: {
    
     c: 0, r: 0 }, e: {
    
     c: 0, r: 1048575 } } // A:A
{
    
     s: {
    
     c: 1, r: 0 }, e: {
    
     c: 2, r: 1048575 } } // B:C

Los rangos de filas (que abarcan cada columna) están representados por la columna inicial 0 y la columna final 16383:

{
    
     s: {
    
     c: 0, r: 0 }, e: {
    
     c: 16383, r: 0 } } // 1:1
{
    
     s: {
    
     c: 0, r: 1 }, e: {
    
     c: 16383, r: 2 } } // 2:3

interfaz relacionada

El objeto XLSX.utils proporciona algunas funciones sobre rangos y direcciones de celdas:

  • encode_row/decode_row convierte entre filas indexadas 0 e indexadas 1.
  • encode_col/decode_col convierte entre columnas indexadas en 0 y nombres de columnas.
  • encode_cell / decode_cell convierte la dirección de la celda.
  • encode_range / decode_range convierte un rango de celdas.
    Ejemplo:
    // 在0索引行和1索引行之间转换
    let row_index = XLSX.utils.decode_row("4");
    let row_name = XLSX.utils.encode_row(3);
    console.log(row_index, row_name);
    //  列转换
    let col_index = XLSX.utils.decode_col("D");
    let col_name = XLSX.utils.encode_col(3);
    console.log(col_index, col_name);
    //  单元格地址转换
    let b2_addr = XLSX.utils.encode_cell({
    
     c: 1, r: 1 })
    let b2_obj = XLSX.utils.decode_cell("B2")
    console.log(b2_addr, b2_obj);

    //  单元格范围转换
    let a1_range = XLSX.utils.encode_range({
    
     s: {
    
     c: 0, r: 0 }, e: {
    
     c: 3, r: 2 } });
    let a1_obj = XLSX.utils.decode_range("A1:E5")
    console.log(a1_range, a1_obj);

Si desea personalizar los datos, puede usarlos al procesar la información de combinación de celdas.

Objeto de celda

Los objetos de celda son objetos js normales, definidos en el siguiente formato:

Atributos describir
v el valor de la celda (número, cadena, objeto de fecha, booleano)
t Tipo de valor: (b: booleano, s: cadena, n: número, d: fecha, e: error, z: código auxiliar)
correlación digital
z la cadena de formato de número asociada con la celda
w texto con formato de número
fórmula relacionada
F Fórmulas de celda codificadas como cadenas de estilo A1 (si corresponde)
F Si la fórmula es una fórmula de matriz, el rango de la matriz que la encierra (si corresponde)
D Si es verdadero, las fórmulas de matriz son dinámicas (si corresponde)
Otras propiedades de la celda
yo Hipervínculos de celda e información sobre herramientas
C comentario de celda
r Codificación de texto enriquecido (si corresponde)
h Representación HTML de texto enriquecido (si corresponde)
s El estilo/tema de la celda (si corresponde)

Objetos de hoja

Las hojas son objetos simples de JavaScript. Cada tecla que no comienza con ! es una dirección de estilo A1 y su valor correspondiente es un objeto de celda.

Información de datos en la hoja de cálculo

En general, hoja[dirección] devuelve el objeto de celda en la dirección especificada.
Al analizar el archivo, si la opción tiene denso: verdadero , los datos se mostrarán en modo denso y el formato de datos es hoja["! datos"][R][C], donde las celdas se almacenan en la matriz de matrices. table![R][C] devuelve el objeto de celda (valor indexado a cero) en la fila R y la columna C.
El sitio web oficial proporciona un código estándar para imprimir datos de la hoja de trabajo, que pego a continuación:

 const {
    
     decode_range, encode_cell } = XLSX.utils;

    function log_all_cells(ws) {
    
    
      let range = decode_range(ws["!ref"]);
      let dense = ws["!data"] != null; // test if sheet is dense
      for (let R = 0; R <= range.e.r; ++R) {
    
    
        for (let C = 0; C <= range.e.c; ++C) {
    
    
          let cell = dense ? ws["!data"]?.[R]?.[C] : ws[encode_cell({
    
     r: R, c: C })];
          console.log(R, C, cell);
        }
      }
    }

El parámetro de log_all_cells (ws) es el objeto de la hoja de trabajo. Al obtener el objeto, primero debe obtener el nombre de la hoja de trabajo del objeto del libro de trabajo y luego llamar dinámicamente a la propiedad del objeto para obtener el objeto de la hoja de trabajo.

Otras propiedades en la hoja de cálculo

Cada tecla comienza con !. Se puede acceder a las propiedades como hoja [clave].

  • sheet['!ref'] : un rango basado en A-1, que indica un rango de hoja. Las funciones que procesan hojas de trabajo deben usar este parámetro para determinar el rango. Las celdas asignadas fuera del rango no se procesan. En particular, cuando se escribe a mano en papel, las celdas fuera del rango no se incluyen.Las
    funciones que procesan formularios deben probar la presencia del campo !ref. Si se omite !ref o no es un rango válido, la función es libre de tratar la hoja como vacía o intentar adivinar el rango. Las utilidades estándar incluidas con esta biblioteca tratan las hojas como vacías (por ejemplo, la salida CSV como una cadena vacía).
    Al leer una hoja con la propiedad sheetRows establecida, el parámetro ref utilizará el rango restringido. El ámbito original se establece en ws['!fullref']

  • sheet['!margins'] : un objeto que representa los márgenes de la página. El valor predeterminado sigue el valor predeterminado "General" de Excel. Excel también tiene preajustes "anchos" y "estrechos", pero se almacenan como medidas sin procesar.

  • ws['!cols']: matriz de objetos de atributo de columna. Los anchos de columna en realidad se almacenan en el archivo de forma normalizada, medidos contra el "ancho de número máximo" (ancho máximo de los números representados 0-9, en píxeles). Al analizar, el objeto de columna almacena el ancho de píxel en el campo wpx, el ancho de carácter en el campo wch y el ancho de número máximo en el campo MDW.

  • ws['!rows'] : Matriz de objetos de atributo de fila, como se describe más adelante en la documentación. Cada objeto de fila codifica propiedades, incluidas la altura y la visibilidad de la fila.

  • ws['!merges'] : matriz de objetos de rango correspondientes a celdas combinadas en la hoja de trabajo. El formato de texto sin formato no admite celdas combinadas. La exportación CSV escribirá en todas las celdas del rango combinado (si está presente), así que asegúrese de configurar solo la primera celda del rango (arriba a la izquierda).

  • ws['!outline'] : Configura cómo se comporta el contorno. Las opciones tienen la configuración predeterminada en Excel 2019.

  • ws['!protect'] : Un objeto para escribir las propiedades de protección de la hoja de trabajo. La clave de contraseña especifica una contraseña para los formatos que admiten hojas de trabajo protegidas con contraseña (XLSX/XLSB/XLS).

  • ws['!autofilter'] : objeto de autofiltro después del patrón.

  • ws['!type']: indica el tipo de hoja de trabajo, "chart" es una hoja de trabajo de gráfico, "macro" es una hoja de trabajo de macro y "dialog" es una hoja de trabajo de diálogo.

interfaz relacionada

Debajo del objeto XLSX.utils:

  • aoa_to_sheet convierte matrices de datos JS en hojas de trabajo.
  • json_to_sheet convierte una matriz de objetos JS en una hoja.
  • table_to_sheet convierte un elemento de tabla DOM en una hoja.
  • sheet_add_aoa agrega una matriz de datos JS a una hoja existente.
  • sheet_add_json agrega una matriz de objetos JS a una hoja existente.
  • sheet_add_dom agrega datos de un elemento de tabla DOM a una hoja existente
  • sheet_to_json convierte un objeto de hoja en una matriz de objetos JSON.
  • sheet_to_csv produce una salida de valores separados por delimitadores.
  • sheet_to_txt genera texto en formato UTF16.
  • sheet_to_html genera una salida HTML.
  • sheet_to_formulae genera una lista de fórmulas (con reserva de valor).

Hay más métodos para la hoja de trabajo, eso es porque la hoja de trabajo es el cuerpo principal del archivo. Si desea personalizar la hoja de trabajo o procesar la información de la hoja de trabajo, visite el sitio web oficial para obtener más detalles.

Objeto de libro

Un libro de trabajo es una descripción de objeto de un archivo de Excel. Algunas de estas propiedades se describen a continuación:

  • workbook.SheetNames : una lista ordenada de hojas de trabajo en el libro de trabajo, que almacena los nombres de las hojas de trabajo.
  • wb.Sheets [sheetname] : Devuelve un objeto de hoja de cálculo.
  • wb.Props: es un objeto que almacena propiedades estándar.
  • wb.Custprops: almacenar propiedades personalizadas.
  • wb.Workbook: almacena propiedades a nivel de libro de trabajo.

interfaz relacionada

  • book_new crea un libro de trabajo vacío
  • book_append_sheet agrega una hoja de trabajo a un libro de trabajo

Además, en la función de archivo de análisis, la función de archivo de lectura devuelve el objeto del libro de trabajo y el primer parámetro de la función de archivo de exportación es el objeto del libro de trabajo. Por ejemplo:
XLSX.read(data, read_opts) intenta analizar los datos y devolver el libro de trabajo,
XLSX.writeXLSX(wb, write_opts) intenta escribir el libro de trabajo en formato XLSX.

Ejemplo:

// 创建工作簿
    const wb = new XLSX.utils.book_new()
    //  json数据转成工作表对象
    let ws = XLSX.utils.json_to_sheet([
      {
    
     A: "S1", B: "h1", C: "e1", D: "e1", E: "t1", F: "J1", G: "S1" },
      {
    
     A: "S2", B: "h2", C: "e2", D: "e2", E: "t2", F: "J2", G: "S2" }

    ], {
    
     header: ["A", "B", "C", "D", "E", "F", "G"], skipHeader: true });
    //  更新对应地址的值,不存在添加,存在替换
    XLSX.utils.sheet_add_json(ws, [
      {
    
     A: 1, B: 2 }, {
    
     A: 2, B: 3 }, {
    
     A: 3, B: 4 }
    ], {
    
     skipHeader: true, origin: "A2" });

    //  将工作表对象追加到工作簿中
    XLSX.utils.book_append_sheet(wb, ws, '数据表1')
    XLSX.utils.book_append_sheet(wb, ws, '数据表2')

    console.log(wb);
    //  导出
    XLSX.writeFile(wb, '新的excel.xlsx')

epílogo

se acabó.

Supongo que te gusta

Origin blog.csdn.net/qq_43231248/article/details/129059901
Recomendado
Clasificación