Extract tables from document

GroupDocs.Parser provides the functionality to extract tables from documents including Excel spreadsheets (XLS, XLSX), Word documents, PDFs, and other supported formats by the getTables(PageTableAreaOptions) method:

Iterable<PageTableArea> getTables(PageTableAreaOptions options);

This method returns a collection of PageTableArea object:

MemberDescription
getRectangleThe rectangular area that bounds text area.
getPageThe page information (page index and page size)
getRowCountThe total number of the table rows.
getColumnCountThe total number of the table columns.
getCell(int, int)The table cell by row and column indexes.
getRowHeight(int)The the row height.
getColumnWidth(int)Returns the column width.

getTables(PageTableAreaOptions) accepts PageTableAreaOption object that contains TemplateTableLayout object with table layout (see this article for more details).

Extract tables from Excel in Java

GroupDocs.Parser supports extracting structured table data from Excel spreadsheets. This is especially useful for processing data-rich Excel files programmatically.

For spreadsheets, getTables() (or getTables(PageTableAreaOptions) without a table layout) returns the Excel tables defined in the workbook (ranges formatted as a table) - one PageTableArea per table. The page index of each table (getPage.getIndex()) is the index of the worksheet that contains it. Use getTables(int) to extract tables from a single worksheet. Plain cell ranges that are not formatted as tables are not returned; use worksheet cells extraction for them.

Basic steps

Here are the basic steps to extract tables from an Excel spreadsheet:

  1. Instantiate Parser object for the spreadsheet;
  2. Check if the document supports table extraction using isTables method;
  3. Call getTables() method and obtain collection of PageTableArea objects;
  4. Iterate through the collection and access table cells.

Example: extract tables from Excel spreadsheet

// Create an instance of Parser class
try (Parser parser = new Parser(Constants.SampleXlsx)) {
    // Check if table extraction is supported
    if (!parser.getFeatures().isTables()) {
        System.out.println("Table extraction is not supported for this Excel file.");
        return;
    }

    // Extract all tables from the Excel spreadsheet
    Iterable<PageTableArea> tables = parser.getTables();

    int tableIndex = 0;
    for (PageTableArea table : tables) {
        System.out.println(String.format("=== Table %d (worksheet %d) ===", ++tableIndex, table.getPage().getIndex()));
        System.out.println(String.format("Rows: %d, Columns: %d", table.getRowCount(), table.getColumnCount()));

        // Iterate over rows
        for (int row = 0; row < table.getRowCount(); row++) {
            // Iterate over columns
            for (int column = 0; column < table.getColumnCount(); column++) {
                // Get the table cell
                PageTableAreaCell cell = table.getCell(row, column);
                if (cell != null) {
                    // Print the cell text
                    System.out.print(cell.getText() + " | ");
                }
            }
            System.out.println();
        }
    }
}

Extract tables with custom layout

When you know the exact table structure (columns and rows positions), pass it as TemplateTableLayout in PageTableAreaOptions. Here are the steps to extract tables from the whole document:

The following example shows how to extract tables from the whole document:

// Create an instance of Parser class
try (Parser parser = new Parser(Constants.SampleInvoicePagesPdf)) {
    // Check if the document supports table extraction
    if (!parser.getFeatures().isTables()) {
        System.out.println("Document isn't supports tables extraction.");
        return;
    }
    // Create the layout of tables
    TemplateTableLayout layout = new TemplateTableLayout(
            java.util.Arrays.asList(new Double[]{50.0, 95.0, 275.0, 415.0, 485.0, 545.0}),
            java.util.Arrays.asList(new Double[]{325.0, 340.0, 365.0, 395.0}));
    // Create the options for table extraction
    PageTableAreaOptions options = new PageTableAreaOptions(layout);
    // Extract tables from the document
    Iterable<PageTableArea> tables = parser.getTables(options);
    // Iterate over tables
    for (PageTableArea t : tables) {
        // Iterate over rows
        for (int row = 0; row < t.getRowCount(); row++) {
            // Iterate over columns
            for (int column = 0; column < t.getColumnCount(); column++) {
                // Get the table cell
                PageTableAreaCell cell = t.getCell(row, column);
                if (cell != null) {
                    // Print the table cell text
                    System.out.print(cell.getText());
                    System.out.print(" | ");
                }
            }
            System.out.println();
        }
        System.out.println();
    }
}

More resources

GitHub examples

You may easily run the code above and see the feature in action in our GitHub examples:

Free online document parser App

Along with full featured Java library we provide simple, but powerful free Apps.

You are welcome to extract data from PDF, DOC, DOCX, PPT, PPTX, XLS, XLSX, Emails and more with our free online Free Online Document Parser App.

Close
Loading

Analyzing your prompt, please hold on...

An error occurred while retrieving the results. Please refresh the page and try again.