Quản lý hàng và cột trong bảng PowerPoint trên Android

Giới thiệu

Aspose.Slides cho Android qua Java cho phép bạn quản lý cấu trúc và định dạng bảng trong các bản trình bày PowerPoint thông qua lớp Table và giao diện ITable. Bạn có thể chỉ định hàng tiêu đề, sao chép hoặc xóa các hàng và cột, và áp dụng định dạng văn bản cho toàn bộ hàng hoặc cột.

Bài viết này giải thích các thao tác này bằng các ví dụ Java. Nó cũng chỉ ra cách lấy preset kiểu bảng để bạn có thể tái sử dụng. Chỉ mục hàng và cột của bảng được tính từ 0.

Kiểm soát chiều cao hàng

Sử dụng IRow.setMinimalHeight để đặt chiều cao tối thiểu của một hàng tính bằng point. Đây là giới hạn dưới, không phải chiều cao cố định. IRow.getHeight trả về chiều cao thực tế. Truy cập hàng thông qua ITable.getRows.

Ví dụ tải row-height-input.pptx, trong đó bảng là hình dạng đầu tiên trên slide đầu tiên. Hàng đầu tiên bắt đầu ở 70 point. Các ô sử dụng văn bản Arial 18-point, có ngắt dòng và lề trên dưới 6-point; văn bản dài hơn ở cột thứ hai được ngắt dòng thành nhiều dòng. Ví dụ tăng tối thiểu lên 100 point, sau đó giảm xuống 20 point, in ra chiều cao thực tế sau mỗi lần thay đổi, và lưu cả hai kết quả.

import com.aspose.slides.*;

Presentation presentation = new Presentation("row-height-input.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    ITable table = (ITable)slide.getShapes().get_Item(0);
    IRow row = table.getRows().get_Item(0);

    row.setMinimalHeight(100);
    System.out.printf("Increased: minimum = %.1f, actual = %.1f pt%n", row.getMinimalHeight(), row.getHeight());
    presentation.save("row-height-increased.pptx", SaveFormat.Pptx);

    row.setMinimalHeight(20);
    System.out.printf("Decreased: minimum = %.1f, actual = %.1f pt%n", row.getMinimalHeight(), row.getHeight());
    presentation.save("row-height-decreased.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Với bản trình bày được cung cấp, tăng tối thiểu sẽ thêm không gian cho hàng. Giảm nó sẽ loại bỏ không gian thừa, nhưng chiều cao thực tế vẫn lớn hơn 20 point vì văn bản và lề ô cần thêm chỗ. Chỉ giảm tối thiểu không thể buộc hàng xuống dưới không gian cần thiết cho nội dung của nó.

Một số yếu tố ảnh hưởng đến chiều cao thực tế:

  • Văn bản và kích thước phông chữ: văn bản dài hơn, ngắt dòng rõ ràng, hoặc phông chữ lớn hơn có thể yêu cầu nhiều không gian dọc hơn.
  • Ngắt dòng và độ rộng cột: với ngắt dòng bật, giảm độ rộng cột bằng IColumn.setWidth có thể tạo ra nhiều dòng hơn. Cột rộng hơn có thể giảm không gian cần thiết theo chiều dọc.
  • Lề ô: ICell.setMarginTop và ICell.setMarginBottom thêm không gian dọc. ICell.setMarginLeft và ICell.setMarginRight giảm độ rộng khả dụng cho văn bản và có thể gây ngắt dòng bổ sung.

Đối với bảng này không có ô hợp nhất, ô cần không gian dọc nhiều nhất sẽ xác định giới hạn dưới dựa trên nội dung cho toàn bộ hàng. Để làm hàng ngắn hơn, bạn cũng có thể cần rút ngắn văn bản, giảm kích thước phông chữ hoặc lề, hoặc làm rộng một cột.

Các hình ảnh bên dưới hiển thị cùng một bảng ở cùng tỷ lệ. Trong các kết quả minh họa, chiều cao thực tế là 70, 100 và 55.2 point: hàng cuối vẫn cao hơn tối thiểu 20 point. Các đo lường văn bản chính xác có thể thay đổi tùy vào phông chữ có trong môi trường của bạn. Tải về các kết quả đã lưu: increased minimum và decreased minimum.

Gốc: tối thiểu 70 pt, thực tế 70 pt Tăng: tối thiểu 100 pt, thực tế 100 pt Giảm: tối thiểu 20 pt, thực tế 55.2 pt
Bảng gốc với hàng đầu tiên 70 point. Bảng sau khi tăng tối thiểu hàng đầu tiên lên 100 point. Bảng sau khi giảm tối thiểu hàng đầu tiên xuống 20 point; văn bản ngắt dòng giữ cho hàng cao hơn mức tối thiểu.

Đặt Hàng Đầu tiên làm Tiêu đề

Sử dụng phương thức setFirstRow để đánh dấu hàng đầu tiên cho định dạng tiêu đề. Hiển thị của nó phụ thuộc vào kiểu bảng được áp dụng cho bảng.

  1. Tải bản trình bày bằng lớp Presentation.
  2. Truy cập slide đầu tiên.
  3. Truy cập bảng được lưu làm hình dạng đầu tiên trên slide.
  4. Bật định dạng tiêu đề cho hàng đầu tiên.
  5. Lưu bản trình bày đã chỉnh sửa.

Ví dụ yêu cầu table.pptx có một bảng là hình dạng đầu tiên trên slide đầu tiên. Nó bật định dạng tiêu đề cho hàng đầu tiên và lưu First_row_header.pptx.

import com.aspose.slides.*;

Presentation presentation = new Presentation("table.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    ITable table = (ITable)slide.getShapes().get_Item(0);
    table.setFirstRow(true);

    presentation.save("First_row_header.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Sao chép Hàng hoặc Cột Bảng

Sao chép các hàng hoặc cột để tái sử dụng nội dung và định dạng của chúng. Bạn có thể thêm một bản sao vào cuối bảng hoặc chèn vào vị trí xác định.

  1. Tải bản trình bày bằng lớp Presentation.
  2. Truy cập slide đầu tiên.
  3. Xác định độ rộng cột và chiều cao hàng.
  4. Thêm bảng bằng phương thức addTable.
  5. Sao chép các hàng cần thiết.
  6. Sao chép các cột cần thiết.
  7. Lưu bản trình bày đã chỉnh sửa.

Ví dụ yêu cầu Test.pptx có ít nhất một slide. Nó tạo một bảng với ba cột và năm hàng, với kích thước được chỉ định bằng point. Nó thêm các bản sao của hàng và cột đầu tiên, sau đó chèn các bản sao của hàng và cột thứ hai ở chỉ số 3 (vị trí thứ tư). Bảng kết quả có bảy hàng và năm cột. Tham số false tắt việc sao chép vào các hàng hoặc cột hợp nhất liền kề; bảng này không có ô hợp nhất.

import com.aspose.slides.*;

Presentation presentation = new Presentation("Test.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    double[] columnWidths = new double[] { 50, 50, 50 };
    double[] rowHeights = new double[] { 50, 30, 30, 30, 30 };
    ITable table = slide.getShapes().addTable(100, 50, columnWidths, rowHeights);

    table.get_Item(0, 0).getTextFrame().setText("Row 1 Cell 1");
    table.get_Item(1, 0).getTextFrame().setText("Row 1 Cell 2");
    table.getRows().addClone(table.getRows().get_Item(0), false);

    table.get_Item(0, 1).getTextFrame().setText("Row 2 Cell 1");
    table.get_Item(1, 1).getTextFrame().setText("Row 2 Cell 2");
    table.getRows().insertClone(3, table.getRows().get_Item(1), false);

    table.getColumns().addClone(table.getColumns().get_Item(0), false);
    table.getColumns().insertClone(3, table.getColumns().get_Item(1), false);

    presentation.save("table_out.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Xóa Hàng hoặc Cột khỏi Bảng

Xóa các hàng hoặc cột không còn cần thiết trong bảng. Khi xóa một mục, chỉ mục của các hàng hoặc cột phía sau nó sẽ dịch chuyển.

  1. Tạo một bản trình bày bằng lớp Presentation.
  2. Truy cập slide đầu tiên.
  3. Xác định độ rộng cột và chiều cao hàng.
  4. Thêm bảng bằng phương thức addTable.
  5. Xóa hàng thứ hai và cột thứ hai.
  6. Lưu bản trình bày đã chỉnh sửa.

Ví dụ này tạo một bảng ba‑by‑ba và xóa hàng và cột ở chỉ số 1, để lại một bảng hai‑by‑hai trong TestTable_out.pptx. Các kích thước được tính bằng point. Tham số false tắt việc xóa các hàng hoặc cột hợp nhất liền kề; bảng này không có ô hợp nhất.

import com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    double[] columnWidths = new double[] { 100, 50, 30 };
    double[] rowHeights = new double[] { 30, 50, 30 };
    ITable table = slide.getShapes().addTable(100, 100, columnWidths, rowHeights);

    table.getRows().removeAt(1, false);
    table.getColumns().removeAt(1, false);

    presentation.save("TestTable_out.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Đặt Định dạng Văn bản ở Cấp độ Hàng Bảng

Áp dụng định dạng văn bản cho toàn bộ hàng để giữ cho các ô của nó đồng nhất. Bạn có thể đặt thuộc tính phông chữ, định dạng đoạn văn và hướng văn bản mà không cần định dạng từng ô riêng lẻ.

  1. Tải bản trình bày bằng lớp Presentation.
  2. Truy cập bảng trên slide đầu tiên.
  3. Sử dụng setFontHeight cho hàng đầu tiên.
  4. Sử dụng setAlignment và setMarginRight cho hàng đầu tiên.
  5. Sử dụng setTextVerticalType cho hàng thứ hai.
  6. Lưu bản trình bày đã chỉnh sửa.

Ví dụ yêu cầu table.pptx có một bảng là hình dạng đầu tiên trên slide đầu tiên và ít nhất hai hàng. Nó áp dụng văn bản 25‑point, căn phải và lề đoạn văn phải 20‑point cho hàng đầu tiên, sau đó đặt văn bản dọc cho hàng thứ hai.

import com.aspose.slides.*;

Presentation presentation = new Presentation("table.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    ITable table = (ITable)slide.getShapes().get_Item(0);

    PortionFormat portionFormat = new PortionFormat();
    portionFormat.setFontHeight(25);
    table.getRows().get_Item(0).setTextFormat(portionFormat);

    ParagraphFormat paragraphFormat = new ParagraphFormat();
    paragraphFormat.setAlignment(TextAlignment.Right);
    paragraphFormat.setMarginRight(20);
    table.getRows().get_Item(0).setTextFormat(paragraphFormat);

    TextFrameFormat textFrameFormat = new TextFrameFormat();
    textFrameFormat.setTextVerticalType(TextVerticalType.Vertical);
    table.getRows().get_Item(1).setTextFormat(textFrameFormat);

    presentation.save("row_formatting.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Đặt Định dạng Văn bản ở Cấp độ Cột Bảng

Áp dụng định dạng văn bản cho toàn bộ cột để giữ cho các ô của nó đồng nhất. Bạn có thể đặt thuộc tính phông chữ, định dạng đoạn văn và hướng văn bản mà không cần định dạng từng ô riêng lẻ.

  1. Tải bản trình bày bằng lớp Presentation.
  2. Truy cập bảng trên slide đầu tiên.
  3. Sử dụng setFontHeight cho cột đầu tiên.
  4. Sử dụng setAlignment và setMarginRight cho cột đầu tiên.
  5. Sử dụng setTextVerticalType cho cột thứ hai.
  6. Lưu bản trình bày đã chỉnh sửa.

Ví dụ yêu cầu table.pptx có một bảng là hình dạng đầu tiên trên slide đầu tiên và ít nhất hai cột. Nó áp dụng văn bản 25‑point, căn phải và lề đoạn văn phải 20‑point cho cột đầu tiên, sau đó đặt văn bản dọc cho cột thứ hai.

import com.aspose.slides.*;

Presentation presentation = new Presentation("table.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    ITable table = (ITable)slide.getShapes().get_Item(0);

    PortionFormat portionFormat = new PortionFormat();
    portionFormat.setFontHeight(25);
    table.getColumns().get_Item(0).setTextFormat(portionFormat);

    ParagraphFormat paragraphFormat = new ParagraphFormat();
    paragraphFormat.setAlignment(TextAlignment.Right);
    paragraphFormat.setMarginRight(20);
    table.getColumns().get_Item(0).setTextFormat(paragraphFormat);

    TextFrameFormat textFrameFormat = new TextFrameFormat();
    textFrameFormat.setTextVerticalType(TextVerticalType.Vertical);
    table.getColumns().get_Item(1).setTextFormat(textFrameFormat);

    presentation.save("column_formatting.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Lấy Thuộc tính Kiểu Bảng

Sử dụng phương thức getStylePreset để lấy preset được áp dụng cho một bảng và tái sử dụng nó cho bảng khác. Điều này xác định preset thay vì các ghi đè định dạng riêng lẻ của ô.

Ví dụ tạo một bảng, áp dụng TableStylePreset.DarkStyle1, và đọc lại preset. Nó in ra giá trị nguyên tương ứng với DarkStyle1 và lưu bảng trong table.pptx.

import com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    double[] columnWidths = new double[] { 100, 150 };
    double[] rowHeights = new double[] { 5, 5, 5 };
    ITable table = slide.getShapes().addTable(10, 10, columnWidths, rowHeights);
    table.setStylePreset(TableStylePreset.DarkStyle1);

    int stylePreset = table.getStylePreset();
    System.out.println(stylePreset);

    presentation.save("table.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

FAQ

Có thể áp dụng chủ đề/kiểu PowerPoint cho một bảng đã được tạo không?

Có. Bảng sẽ kế thừa chủ đề slide/layout/master, và bạn vẫn có thể ghi đè màu nền, viền và màu văn bản bên trên chủ đề đó.

Có thể sắp xếp các hàng của bảng giống như trong Excel không?

Không, các bảng Aspose.Slides không có tính năng sắp xếp hoặc bộ lọc tích hợp. Hãy sắp xếp dữ liệu trong bộ nhớ trước, sau đó điền lại các hàng bảng theo thứ tự đó.

Có thể có các cột sọc (banded) trong khi vẫn giữ màu tùy chỉnh cho các ô cụ thể không?

Có. Bật các cột sọc, sau đó ghi đè các ô cụ thể bằng định dạng cục bộ; định dạng ở cấp độ ô sẽ có ưu tiên hơn kiểu bảng.