Как читать содержимое ячейки таблицы через библиотеку phpword - PullRequest
0 голосов
/ 04 августа 2020

Это код, который у меня сейчас есть

$phpWord = \PhpOffice\PhpWord\IOFactory::load($source);
$sections = $phpWord->getSections();
foreach ($sections as $s) {
    $els = $s->getElements();
    foreach ($els as $e) {
        switch (get_class($element)) {
            case 'PhpOffice\PhpWord\Element\TextRun':
                $this->logger->debug("TextRun");
                $this->getTextFromTextRun($element);
                break;

            case 'PhpOffice\PhpWord\Element\Table':
                $this->logger->debug("Table");
                $this->iterateOverRows($element);
                break;
        }
    }
}


private function getTextFromTextRun($element) {
    for ($index = 0; $index < $element->countElements(); $index++) {
        $textRunElement = $element->getElement($index);
        $text = $textRunElement->getText();
        if (strlen($text) > 0) {
            $this->logger->debug("TextRun Text: " . $text);
        }
    }
}

private function iterateOverRows($table) {
    $rows = $table->getRows();
    foreach ($rows as $row) {
        foreach ($row->getCells() as $cell) {
            // What to do here???
        }
    }
}

Я не знаю, как получить содержимое из ячеек?

Это метод получения, доступный в объекте-ячейке :

  • getCommentRangeEnd
  • getCommentRangeStart
  • getDocPart
  • getDocPartId
  • getElement
  • getElementId
  • getElementIndex
  • getElements
  • getNestedLevel
  • getParent
  • getPhpWord
  • getRelationId
  • getSectionId
  • getStyle
  • getTrackChange
  • getWidth

1 Ответ

0 голосов
/ 14 августа 2020

Решили вот так:

private function iterateOverRows($table) {
    $rows = $table->getRows();
    foreach ($rows as $row) {
        foreach ($row->getCells() as $cell) {
            $els = $cell->getElements();
            foreach ($els as $e) {
                $this->switchElements($e);
            }
        }
    }
}


private function switchElements($element) {
    switch (get_class($element)) {
        case 'PhpOffice\PhpWord\Element\TextRun':
            $this->getTextFromTextRun($element);
            break;

        case 'PhpOffice\PhpWord\Element\Table':
            $this->iterateOverRows($element);
            break;

        default:
            break;
    }
}


private function getTextFromTextRun($element) {
    for ($index = 0; $index < $element->countElements(); $index++) {
        $textRunElement = $element->getElement($index);

        switch (get_class($textRunElement)) {
            case 'PhpOffice\PhpWord\Element\Text':
            case 'PhpOffice\PhpWord\Element\TextRun':
                $text = $textRunElement->getText();
                if (strlen($text) > 0) {
                    $this->logger->debug("Text: " . $text);
                    $this->getFont($textRunElement);
                }
                break;

            case 'PhpOffice\PhpWord\Element\TextBreak':
                break;

            default:
                break;
        }
    }
}
...