Intelligent GridDocumentação em português

Importação

A grade lê arquivos .csv, .tsv, .txt e .xlsx sem nenhuma dependência: CSV com um parser padrão (RFC 4180), XLSX com um pequeno leitor de zip sobre o DecompressionStream do navegador.

input.addEventListener('change', async () => {
    const result = await grid.importFile(input.files[0]);
    console.log(result);
    // { rows: 120, fields: ['name', 'qty', 'due'], skipped: ['Color'], errors: [...], sheet: 'Sheet1' }
});

grid.importCSV('name;qty\nPen;3');                      // texto
await grid.importXLSX(bytes, { sheet: 'Data' });         // Uint8Array ou ArrayBuffer
grid.importTable([['name', 'qty'], ['Pen', 3]]);         // linhas de células que você já tem

Ou deixe os usuários fazerem isso pela barra de navegação:

navbar: { import: true }                     // botão "Import": substitui as linhas
navbar: { import: { mode: 'append' } }       // ou quaisquer opções de importação

O botão pede confirmação quando alterações não salvas seriam perdidas e informa o resultado na barra de status ("120 row(s) imported, 2 value(s) did not fit and were left blank").

Opções

Opção Padrão
mode 'replace' 'replace' funciona como setData(); 'append' adiciona as linhas como um único passo de desfazer
header true a primeira linha contém os títulos. false preenche as colunas em ordem (pulando as colunas de fórmula)
delimiter detectado ,, ; ou tab, a partir da primeira linha (arquivos .tsv usam tab)
sheet primeira planilha nome da planilha do .xlsx ou índice começando em 0
createColumns quando a grade não tem colunas adiciona colunas para os títulos que não correspondem a nenhuma, com um tipo inferido

Como os valores são lidos

O evento import é disparado com o mesmo objeto de resultado.

Leitores independentes

import { parseDelimited, detectDelimiter, readXlsx } from '@andmarruda/intelligent-grid';

parseDelimited('a,"b,c"\n1,2');        // [['a', 'b,c'], ['1', '2']]
const sheet = await readXlsx(bytes);  // { name, rows: [['Name', 'Qty'], ['Pen', 3]] }

Ler .xlsx exige DecompressionStream: todos os navegadores atuais e o Node 18 ou posterior.

Editar esta página no GitHub