3

使用此代码,我可以在 excel 文件中创建注释。

 $comment = $data_sheet->getCommentByColumnAndRow($col, 1);
 $comment->setAuthor($table_name . '.' . $field_name);
 $comment->setWidth('200px');
 $comment->setHeight('24px');
 $comment->setVisible(false); # ActiveCell.Comment.Visible = True

 $objCommentRichText = $comment->getText()->createTextRun($table_name . '.' . $field_name);

保存文件时,其中包含注释,并且可以编辑,但是在重新打开此文件时,注释对象处于默认状态。

$comment = $data_sheet->getComment('A1');

结果是:-

$comment = PHPExcel_Comment Object (
    [_author:private] => Author 
    [_text:private] => PHPExcel_RichText Object ( [_richTextElements:private] => Array ( ) ) 
    [_width:private] => 96pt 
    [_marginLeft:private] => 59.25pt 
    [_marginTop:private] => 1.5pt 
    [_visible:private] => 
    [_height:private] => 55.5pt 
    [_fillColor:private] => PHPExcel_Style_Color Object (
        [_argb:private] => FFFFFFE1 
        [_isSupervisor:private] => 
        [_parent:private] => 
        [_parentPropertyName:private] => 
    ) 
 )

++编辑:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<comments xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
  <authors><author>products.products_id</author><author>products.part_code</author><author>products.products_name</author><author>products.products_quantity</author><author>products.products_status</author><author>products.cost</author><author>products.cost_modifier</author><author>products.delivery_cost</author><author>products.shipping_strategy</author><author>products.products_weight</author><author>products.shipping_amount</author><author>products.products_price</author><author>products.rrp</author><author>products.trade</author><author>products_feed.amazon_price</author><author>products_feed.ebay_price</author></authors>
  <commentList>
  <comment ref="A1" authorId="0"><text><r><rPr><sz val="11"/><color rgb="FF000000"/><rFont val="Calibri"/></rPr><t>products.products_id</t></r></text></comment>
  <comment ref="B1" authorId="1"><text><r><rPr><sz val="11"/><color rgb="FF000000"/><rFont val="Calibri"/></rPr><t>products.part_code</t></r></text></comment>
  <comment ref="C1" authorId="2"><text><r><rPr><sz val="11"/><color rgb="FF000000"/><rFont val="Calibri"/></rPr><t>products.products_name</t></r></text></comment>
  <comment ref="D1" authorId="3"><text><r><rPr><sz val="11"/><color rgb="FF000000"/><rFont val="Calibri"/></rPr><t>products.products_quantity</t></r></text></comment>
  <comment ref="E1" authorId="4"><text><r><rPr><sz val="11"/><color rgb="FF000000"/><rFont val="Calibri"/></rPr><t>products.products_status</t></r></text></comment>
  <comment ref="F1" authorId="5"><text><r><rPr><sz val="11"/><color rgb="FF000000"/><rFont val="Calibri"/></rPr><t>products.cost</t></r></text></comment>
  <comment ref="G1" authorId="6"><text><r><rPr><sz val="11"/><color rgb="FF000000"/><rFont val="Calibri"/></rPr><t>products.cost_modifier</t></r></text></comment>
  <comment ref="H1" authorId="7"><text><r><rPr><sz val="11"/><color rgb="FF000000"/><rFont val="Calibri"/></rPr><t>products.delivery_cost</t></r></text></comment>
  <comment ref="I1" authorId="8"><text><r><rPr><sz val="11"/><color rgb="FF000000"/><rFont val="Calibri"/></rPr><t>products.shipping_strategy</t></r></text></comment>
  <comment ref="J1" authorId="9"><text><r><rPr><sz val="11"/><color rgb="FF000000"/><rFont val="Calibri"/></rPr><t>products.products_weight</t></r></text></comment>
  <comment ref="K1" authorId="10"><text><r><rPr><sz val="11"/><color rgb="FF000000"/><rFont val="Calibri"/></rPr><t>products.shipping_amount</t></r></text></comment>
  <comment ref="L1" authorId="11"><text><r><rPr><sz val="11"/><color rgb="FF000000"/><rFont val="Calibri"/></rPr><t>products.products_price</t></r></text></comment>
  <comment ref="M1" authorId="12"><text><r><rPr><sz val="11"/><color rgb="FF000000"/><rFont val="Calibri"/></rPr><t>products.rrp</t></r></text></comment>
  <comment ref="N1" authorId="13"><text><r><rPr><sz val="11"/><color rgb="FF000000"/><rFont val="Calibri"/></rPr><t>products.trade</t></r></text></comment>
  <comment ref="O1" authorId="14"><text><r><rPr><sz val="11"/><color rgb="FF000000"/><rFont val="Calibri"/></rPr><t>products_feed.amazon_price</t></r></text></comment>
  <comment ref="P1" authorId="15"><text><r><rPr><sz val="11"/><color rgb="FF000000"/><rFont val="Calibri"/></rPr><t>products_feed.ebay_price</t></r></text></comment>
  </commentList>
</comments>

所以注释存在于 .xlsx 文件中。

这些都没有收到评论。

$comment = $data_sheet->getCommentByColumnAndRow($col, 1);
$comment = $data_sheet->getComment('A'. $row);
$comments = $data_sheet->getComments();

--EDIT 问题,评论是否以“Excel2007”格式正确加载?

4

2 回答 2

3

这是我用来使用 PHPExcel 从单元格中提取注释的代码片段

    $objPHPExcel = PHPExcel_IOFactory::load("MyExcelFile.xlsx"); 
    $objWorksheet = $objPHPExcel->getActiveSheet();

    // loop through each row in excel file
    foreach ($objWorksheet->getRowIterator() as $row) {

    $cellIterator = $row->getCellIterator();
    $cellIterator->setIterateOnlyExistingCells(true);

    // loop through each column in row
    foreach ($cellIterator as $cell) {

        // get the value of the cell
        $value = $cell->getValue();

        // get the comment in the cell (if a comment exists)
        $comment = $objWorksheet->getComment($cell->getCoordinate())->getText();

    }


    }

这是PHPExcel 评论文档的链接

于 2012-11-01T13:12:11.247 回答
2

代码肯定存在于 Excel2007 阅读器中以加载评论。我必须进行一些测试以确认它是否有效。

编辑

终于找到时间来测试一下。

使用 1.7.5 版本和最新的 SVN 代码,Excel2007 阅读器成功读取工作表的所有注释(使用工作表的 getComments() 方法确定),getCommentByColumnAndRow() 和 getComment() 方法都返回注释请求单元格的对象,如果尚未设置,则创建新评论。

这是预期的行为。

我唯一能想到的是您在 $data_sheet 中没有正确的工作表

于 2010-10-08T18:45:40.537 回答