Gerenciar Tabelas de Apresentação em JavaScript
Introdução
As tabelas no PowerPoint organizam informações em linhas e colunas, facilitando a leitura e a comparação de valores.
Aspose.Slides fornece a classe Table , a classe Cell e outros tipos para permitir que você crie, atualize e gerencie tabelas em apresentações.
Criar uma Tabela do Zero
Crie uma tabela especificando sua posição, larguras das colunas e alturas das linhas. Depois de adicioná‑la a um slide, você pode formatar as bordas das células, mesclar células e inserir texto.
- Crie uma instância da classe Presentation .
- Obtenha uma referência ao slide pelo seu índice.
- Defina um array de larguras de coluna em pontos.
- Defina um array de alturas de linha em pontos.
- Adicione um objeto Table ao slide através do método addTable .
- Itere por cada Cell para aplicar formatação nas bordas superior, inferior, direita e esquerda.
- Mescle as duas primeiras células da primeira linha da tabela.
- Acesse a célula mesclada através do seu método getTextFrame .
- Defina o texto na célula mesclada.
- Salve a apresentação modificada.
O exemplo abaixo cria uma tabela com três colunas e cinco linhas em (100, 50) pontos. Aplica bordas vermelhas com largura de 5 pontos, mescla as duas primeiras células da primeira linha e salva o resultado como table.pptx.
const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
const red = java.getStaticFieldValue("java.awt.Color", "RED");
const presentation = new aspose.slides.Presentation();
try {
const slide = presentation.getSlides().get_Item(0);
const columnWidths = java.newArray("double", [50, 50, 50]);
const rowHeights = java.newArray("double", [50, 30, 30, 30, 30]);
const table = slide.getShapes().addTable(100, 50, columnWidths, rowHeights);
for (let i = 0; i < table.getRows().size(); i++) {
const row = table.getRows().get_Item(i);
for (let j = 0; j < row.size(); j++) {
const cell = row.get_Item(j);
const cellFormat = cell.getCellFormat();
cellFormat.getBorderTop().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
cellFormat.getBorderTop().getFillFormat().getSolidFillColor().setColor(red);
cellFormat.getBorderTop().setWidth(5);
cellFormat.getBorderBottom().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
cellFormat.getBorderBottom().getFillFormat().getSolidFillColor().setColor(red);
cellFormat.getBorderBottom().setWidth(5);
cellFormat.getBorderLeft().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
cellFormat.getBorderLeft().getFillFormat().getSolidFillColor().setColor(red);
cellFormat.getBorderLeft().setWidth(5);
cellFormat.getBorderRight().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
cellFormat.getBorderRight().getFillFormat().getSolidFillColor().setColor(red);
cellFormat.getBorderRight().setWidth(5);
}
}
table.mergeCells(table.get_Item(0, 0), table.get_Item(1, 0), false);
table.get_Item(0, 0).getTextFrame().setText("Merged Cells");
presentation.save("table.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Numeração em uma Tabela Padrão
Em uma tabela padrão, os índices das células são baseados em zero e usam a ordem (coluna, linha). A primeira célula tem índice (0, 0).
Por exemplo, as células de uma tabela com 4 colunas e 4 linhas são numeradas assim:
| (0, 0) | (1, 0) | (2, 0) | (3, 0) |
|---|---|---|---|
| (0, 1) | (1, 1) | (2, 1) | (3, 1) |
| (0, 2) | (1, 2) | (2, 2) | (3, 2) |
| (0, 3) | (1, 3) | (2, 3) | (3, 3) |
Este exemplo cria a tabela 4 × 4 ilustrada acima, com larguras de coluna e alturas de linha de 70 pontos e bordas de célula vermelhas com largura de 5 pontos. As coordenadas ilustram os índices das células; o exemplo deixa as células vazias e salva a tabela como StandardTables_out.pptx.
const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
const red = java.getStaticFieldValue("java.awt.Color", "RED");
const presentation = new aspose.slides.Presentation();
try {
const slide = presentation.getSlides().get_Item(0);
const columnWidths = java.newArray("double", [70, 70, 70, 70]);
const rowHeights = java.newArray("double", [70, 70, 70, 70]);
const table = slide.getShapes().addTable(100, 50, columnWidths, rowHeights);
for (let i = 0; i < table.getRows().size(); i++) {
const row = table.getRows().get_Item(i);
for (let j = 0; j < row.size(); j++) {
const cell = row.get_Item(j);
const cellFormat = cell.getCellFormat();
cellFormat.getBorderTop().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
cellFormat.getBorderTop().getFillFormat().getSolidFillColor().setColor(red);
cellFormat.getBorderTop().setWidth(5);
cellFormat.getBorderBottom().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
cellFormat.getBorderBottom().getFillFormat().getSolidFillColor().setColor(red);
cellFormat.getBorderBottom().setWidth(5);
cellFormat.getBorderLeft().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
cellFormat.getBorderLeft().getFillFormat().getSolidFillColor().setColor(red);
cellFormat.getBorderLeft().setWidth(5);
cellFormat.getBorderRight().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
cellFormat.getBorderRight().getFillFormat().getSolidFillColor().setColor(red);
cellFormat.getBorderRight().setWidth(5);
}
}
presentation.save("StandardTables_out.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Acessar uma Tabela Existente
As tabelas são armazenadas na coleção de formas de um slide. Itere pelas formas para localizar uma tabela e, então, use a classe Table para ler ou atualizar suas células.
- Carregue a apresentação usando a classe Presentation .
- Obtenha uma referência ao slide que contém a tabela pelo seu índice.
- Itere pelos objetos Shape e interrompa quando encontrar uma tabela. Se o slide contiver várias tabelas, use getAlternativeText para identificar a que você precisa.
- Atualize o texto na célula alvo.
- Salve a apresentação modificada.
O exemplo abaixo abre UpdateExistingTable.pptx e encontra a primeira tabela no primeiro slide. Define a célula na coluna 0, linha 1 para New e salva o resultado como table1_out.pptx. A entrada deve conter ao menos um slide, e a primeira tabela desse slide deve ter ao menos uma coluna e duas linhas.
const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
const presentation = new aspose.slides.Presentation("UpdateExistingTable.pptx");
try {
const slide = presentation.getSlides().get_Item(0);
let table = null;
for (let i = 0; i < slide.getShapes().size(); i++) {
const shape = slide.getShapes().get_Item(i);
if (java.instanceOf(shape, "com.aspose.slides.ITable")) {
table = shape;
break;
}
}
if (table != null) {
table.get_Item(0, 1).getTextFrame().setText("New");
presentation.save("table1_out.pptx", aspose.slides.SaveFormat.Pptx);
}
} finally {
presentation.dispose();
}
Para redimensionar uma linha em uma tabela existente e entender por que sua altura real pode exceder o mínimo solicitado, veja Control Row Height.
Encontrar a Célula que Possui um TextFrame
Quando um código genérico de processamento de texto recebe um TextFrame de uma tabela, use o método TextFrame.getParentCell para recuperar a Cell proprietária. Para um TextFrame de célula de tabela, TextFrame.getParentCell devolve o proprietário e TextFrame.getParentShape devolve null, embora a tabela em si seja uma forma.
As coordenadas da célula estão disponíveis pelos métodos somente‑leitura Cell.getFirstColumnIndex e Cell.getFirstRowIndex . TextFrame.getParentCell também fornece navegação somente‑leitura: devolve o proprietário, mas não altera a propriedade. Sempre verifique se a célula retornada é null antes de usá‑la.
Para um exemplo completo que identifica proprietários de célula‑tabela e de forma, incluindo formas associadas a nós de SmartArt, veja Search and Replace Text.
Alinhar Texto em uma Tabela
É possível controlar o ancoramento vertical e a direção do texto de células individuais de tabelas. O exemplo nesta seção centraliza o texto na primeira célula e o rotaciona em 270 graus.
- Crie uma instância da classe Presentation .
- Obtenha uma referência ao slide pelo seu índice.
- Adicione um objeto Table ao slide.
- Acesse um objeto TextFrame da tabela.
- Acesse o primeiro Paragraph e defina seu texto e cor.
- Defina o ancoramento vertical da célula e a direção do texto usando setTextAnchorType e setTextVerticalType .
- Salve a apresentação modificada.
Este exemplo cria uma tabela 4 × 4 com larguras de coluna de 120 pontos e alturas de linha de 100 pontos. Formata o texto na célula (0, 0), adiciona valores às demais células da primeira linha e salva o resultado como Vertical_Align_Text_out.pptx.
const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
const black = java.getStaticFieldValue("java.awt.Color", "BLACK");
const presentation = new aspose.slides.Presentation();
try {
const slide = presentation.getSlides().get_Item(0);
const columnWidths = java.newArray("double", [120, 120, 120, 120]);
const rowHeights = java.newArray("double", [100, 100, 100, 100]);
const table = slide.getShapes().addTable(100, 50, columnWidths, rowHeights);
table.get_Item(1, 0).getTextFrame().setText("10");
table.get_Item(2, 0).getTextFrame().setText("20");
table.get_Item(3, 0).getTextFrame().setText("30");
const textFrame = table.get_Item(0, 0).getTextFrame();
const paragraph = textFrame.getParagraphs().get_Item(0);
const portion = paragraph.getPortions().get_Item(0);
portion.setText("Text here");
portion.getPortionFormat().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
portion.getPortionFormat().getFillFormat().getSolidFillColor().setColor(black);
const cell = table.get_Item(0, 0);
cell.setTextAnchorType(java.newByte(aspose.slides.TextAnchorType.Center));
cell.setTextVerticalType(java.newByte(aspose.slides.TextVerticalType.Vertical270));
presentation.save("Vertical_Align_Text_out.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Definir Formatação de Texto no Nível da Tabela
Use setTextFormat para aplicar formatação de texto a todas as células de uma tabela. Suas sobrecargas aceitam formatação de porção, parágrafo e quadro de texto, permitindo definir essas propriedades sem iterar pelas células individualmente.
- Carregue a apresentação usando a classe Presentation .
- Obtenha uma referência ao slide pelo seu índice.
- Acesse um objeto Table do slide.
- Defina o tamanho da fonte usando setFontHeight para o texto.
- Defina o alinhamento do parágrafo e a margem direita usando setAlignment e setMarginRight .
- Defina a direção do texto usando setTextVerticalType .
- Salve a apresentação modificada.
O exemplo abaixo abre table.pptx, que deve conter ao menos um slide com uma tabela como sua primeira forma. Define o tamanho da fonte para 25 pontos, alinha os parágrafos à direita com margem direita de 20 pontos e torna o texto vertical. A apresentação formatada é salva como result.pptx.
const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
const presentation = new aspose.slides.Presentation("table.pptx");
try {
const slide = presentation.getSlides().get_Item(0);
const table = slide.getShapes().get_Item(0);
const portionFormat = new aspose.slides.PortionFormat();
portionFormat.setFontHeight(25);
table.setTextFormat(portionFormat);
const paragraphFormat = new aspose.slides.ParagraphFormat();
paragraphFormat.setAlignment(aspose.slides.TextAlignment.Right);
paragraphFormat.setMarginRight(20);
table.setTextFormat(paragraphFormat);
const textFrameFormat = new aspose.slides.TextFrameFormat();
textFrameFormat.setTextVerticalType(java.newByte(aspose.slides.TextVerticalType.Vertical));
table.setTextFormat(textFrameFormat);
presentation.save("result.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Obter Propriedades de Estilo da Tabela
Use getStylePreset para ler o estilo predefinido de uma tabela e setStylePreset para atribuí‑lo. Este exemplo aplica TableStylePreset.DarkStyle1 a uma tabela, imprime o valor predefinido e atribui o mesmo predefinido a uma segunda tabela. Ambas as tabelas são salvas em table-style.pptx.
const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
const presentation = new aspose.slides.Presentation();
try {
const slide = presentation.getSlides().get_Item(0);
const columnWidths = java.newArray("double", [100, 150]);
const rowHeights = java.newArray("double", [5, 5, 5]);
const table = slide.getShapes().addTable(10, 10, columnWidths, rowHeights);
table.setStylePreset(aspose.slides.TableStylePreset.DarkStyle1);
const stylePreset = table.getStylePreset();
console.log("Table style preset: " + stylePreset);
const anotherTable = slide.getShapes().addTable(10, 100, columnWidths, rowHeights);
anotherTable.setStylePreset(stylePreset);
presentation.save("table-style.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Bloquear a Proporção de uma Tabela
A proporção de uma tabela é a razão entre sua largura e sua altura. Use setAspectRatioLocked para bloquear essa razão em uma tabela.
O exemplo abaixo abre pres.pptx, que deve conter ao menos um slide com uma tabela como sua primeira forma. Imprime o estado atual do bloqueio, habilita o bloqueio da proporção, imprime o estado atualizado (true) e salva o resultado como pres-out.pptx.
const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
const presentation = new aspose.slides.Presentation("pres.pptx");
try {
const slide = presentation.getSlides().get_Item(0);
const table = slide.getShapes().get_Item(0);
console.log("Lock aspect ratio set: " + table.getGraphicalObjectLock().getAspectRatioLocked());
table.getGraphicalObjectLock().setAspectRatioLocked(true);
console.log("Lock aspect ratio set: " + table.getGraphicalObjectLock().getAspectRatioLocked());
presentation.save("pres-out.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Perguntas Frequentes
Posso habilitar a direção de leitura da direita‑para‑esquerda (RTL) para uma tabela inteira e o texto em suas células?
Sim. A tabela expõe um método setRightToLeft e os parágrafos têm ParagraphFormat.setRightToLeft. Usar ambos garante a ordem RTL correta e a renderização dentro das células.
Como impedir que usuários movam ou redimensionem uma tabela no arquivo final?
Use shape locks para desativar mover, redimensionar, selecionar etc. Esses bloqueios se aplicam também a tabelas.
É suportado inserir uma imagem dentro de uma célula como plano de fundo?
Sim. Você pode definir um picture fill para uma célula; a imagem cobrirá a área da célula de acordo com o modo escolhido (esticar ou ladrilho).