【问题标题】:How can I programmatically retrieve cell comments in excel?如何以编程方式检索 Excel 中的单元格注释?
【发布时间】:2012-08-05 19:25:22
【问题描述】:

我最近将一些大型 excel 2010 电子表格(已导出为 CSV 用于导入)导入数据库。我现在被告知缺少单元格 cmets(我什至不知道原始 Excel 文件中有单元格 cmets,我只有 CSV)。

我需要搜索 Excel 文件的每一行,找到带有单元格 cmets 的单元格,获取注释并将其添加到该行的数据库中(数据库引用电子表格中的行号,所以如果我可以提取行number 和该行中的所有单元格 cmets,这很完美)

我的技能是 PHP 和 Perl。理想情况下,我会使用 PHP 来读取和处理数据,但使用其他东西来输出 text/csv,然后我可以使用 PHP 进行解析也可以正常工作。

有没有人知道提取这些单元格cmets的方法,或者有任何指针?

谢谢!

【问题讨论】:

    标签: php excel export


    【解决方案1】:

    使用PHPExcel 库。针对工作表保留评论。并且工作表的 getComments() 方法将返回一个由单元格地址索引的评论对象数组。

    编辑

    include '/PHPExcel_Library/Classes/PHPExcel.php';
    
    $inputFileType = 'Excel5';
    $inputFileName = 'CS2template_all_products_v12.xls';
    
    $objPHPExcelReader = PHPExcel_IOFactory::createReader($inputFileType);
    $objPHPExcel = $objPHPExcelReader->load($inputFileName);
    
    $sheet = $objPHPExcel->getActiveSheet();
    
    $comments = $sheet->getComments();
    foreach($comments  as $cellID => $comment) {
        echo $cellID,PHP_EOL;
        var_dump($comment->getText()->getPlainText());
    }
    

    注意,我的示例使用 Excel .xls 文件,但该方法同样可以轻松地将 $inputFileType 替换为 .xlsx 文件的“Excel2007”

    【讨论】:

    • 这几乎是完美的!它适用于所有电子表格,但其中一个电子表格内存不足(85k 行)。我什至给了它 3.5Gb 的内存!
    • 因此,如文档中所述,通过单元格缓存或仅加载您感兴趣的工作表(如果它们是多表工作簿)来减少内存使用量
    【解决方案2】:

    我不能把这归功于这个。我从这个网站得到了: http://chandoo.org/wp/2009/09/03/get-cell-comments/

    只需在 VBA 中插入一个模块并将其复制并粘贴到:

    Function getComment(incell) As String
     ' accepts a cell as input and returns its comments (if any) back as a string
     On Error Resume Next
     getComment = incell.Comment.Text
    End Function
    

    只需将其放在一个单元格中,使用评论引用该单元格并自动填充您的心内容。例如:

    =getComment(C42)
    

    如果你需要一行的行号,你可以这样做:

    =row()
    

    不确定您是否需要知道这一点,但我只是想我会添加。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-22
      • 2018-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多