Partilhar via


Combinar dados de várias tabelas do Excel numa única tabela

Este exemplo mostra como combinar dados de várias tabelas do Excel numa única tabela que inclui todas as linhas. Pressupõe que todas as tabelas que estão a ser utilizadas têm a mesma estrutura.

Existem duas variações deste script:

  1. O primeiro script combina todas as tabelas no ficheiro do Excel.
  2. O segundo script obtém seletivamente tabelas dentro de um conjunto de folhas de cálculo.

Observação

Execute estes exemplos diretamente a partir do Editor de Código de Scripts do Office. Para abrir o Editor de Código, aceda a Automatizar>a Criação de Novo Script>no Editor de Código. Substitua o código predefinido pelo código de exemplo que pretende executar e, em seguida, selecione Executar.

Configuração: ficheiro do Excel de exemplo

Este livro contém os dados, objetos e formatação esperados pelo script.

Código de exemplo: combinar dados de várias tabelas do Excel numa única tabela

Adicione o seguinte script ao livro de exemplo e experimente o exemplo!

function main(workbook: ExcelScript.Workbook) {
  // Delete the "Combined" worksheet, if it's present.
  workbook.getWorksheet('Combined')?.delete();

  // Create a new worksheet named "Combined" for the combined table.
  const newSheet = workbook.addWorksheet('Combined');
  
  // Get the header values for the first table in the workbook.
  // This also saves the table list before we add the new, combined table.
  const tables = workbook.getTables();    
  const headerValues = tables[0].getHeaderRowRange().getTexts();
  console.log(headerValues);

  // Copy the headers on a new worksheet to an equal-sized range.
  const targetRange = newSheet.getRange('A1').getResizedRange(headerValues.length-1, headerValues[0].length-1);
  targetRange.setValues(headerValues);

  // Add the data from each table in the workbook to the new table.
  const combinedTable = newSheet.addTable(targetRange.getAddress(), true);
  for (let table of tables) {      
    let dataValues = table.getRangeBetweenHeaderAndTotal().getTexts();
    let rowCount = table.getRowCount();

    // If the table isn't empty, add its rows to the combined table.
    if (rowCount > 0) {
      combinedTable.addRows(-1, dataValues);
    }
  }
}

Código de exemplo: combinar dados de várias tabelas do Excel em folhas de cálculo selecionadas numa única tabela

Transfira o ficheiro de exemplotables-select-copy.xlsx e utilize-o com o seguinte script para experimentar!

function main(workbook: ExcelScript.Workbook) {
  // Set the worksheet names to get tables from.
  const sheetNames = ['Sheet1', 'Sheet2', 'Sheet3'];
    
  // Delete the "Combined" worksheet, if it's present.
  workbook.getWorksheet('Combined')?.delete();

  // Create a new worksheet named "Combined" for the combined table.
  const newSheet = workbook.addWorksheet('Combined');

  // Create a new table with the same headers as the other tables.
  const headerValues = workbook.getWorksheet(sheetNames[0]).getTables()[0].getHeaderRowRange().getTexts();
  const targetRange = newSheet.getRange('A1').getResizedRange(headerValues.length-1, headerValues[0].length-1);
  targetRange.setValues(headerValues);
  const combinedTable = newSheet.addTable(targetRange.getAddress(), true);

  // Go through each listed worksheet and get their tables.
  sheetNames.forEach((sheet) => {
    const tables = workbook.getWorksheet(sheet).getTables();     
    for (let table of tables) {
      // Get the rows from the tables.
      let dataValues = table.getRangeBetweenHeaderAndTotal().getTexts();
      let rowCount = table.getRowCount();

      // If there's data in the table, add it to the combined table.
      if (rowCount > 0) {
          combinedTable.addRows(-1, dataValues);
      }
    }
  });
}

Vídeo de formação: Combinar dados de várias tabelas do Excel numa única tabela

Veja Sudhi Ramamurthy a percorrer este exemplo no YouTube.