【问题标题】:How to read table cell content via phpword library如何通过 phpword 库读取表格单元格内容
【发布时间】:2020-08-04 15:00:59
【问题描述】:

这是我目前的代码

$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???
        }
    }
}

我不知道如何从单元格中获取内容?

这些是 cell-object 中可用的 getters 方法:

  • getCommentRangeEnd
  • getCommentRangeStart
  • getDocPart
  • getDocPartId
  • 获取元素
  • getElementId
  • getElementIndex
  • 获取元素
  • getNestedLevel
  • getParent
  • getPhpWord
  • getRelationId
  • getSectionId
  • 获取样式
  • getTrackChange
  • 获取宽度

【问题讨论】:

    标签: php phpword


    【解决方案1】:

    在这里解决了这个问题:

    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;
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多