【问题标题】:File Error:data may have been lost while giving hyperlinks文件错误:提供超链接时数据可能已丢失
【发布时间】:2019-05-20 16:32:31
【问题描述】:

我正在编写代码以使用 Spreadsheet::WriteExcel 生成 excel。 我想将数据写入单元格并为其提供超链接。 我这样做了。但是在打开文件时它会显示警告说文件数据可能已丢失。

$Log_Sheet->write(12,0,'AA',$ERR_DESCR_Format );
$Log_Sheet->write_url(12, 0,  'internal:sheet3!A1'  );

我想在不收到警告的情况下编写内容并提供链接。怎么做?

【问题讨论】:

    标签: excel perl hyperlink


    【解决方案1】:

    Spreadsheet::WriteExcel,尽管它很棒,但已经好几年没有更新了,据我所知,它只支持 .xls 的 pre-Office 2007 扩展。我真的建议您升级到 Excel::Writer::XLSX,这是 McNamara 对开放 XML 标准格式 (xlsx) 的精彩更新。

    所以,我不能肯定地说,因为 Excel::Writer::XLSX 不会发生此错误,但我最初的理论是您将两个不同的值写入完全相同的单元格 (12, 0),所以一个基本上是在破坏另一个 - 因此是警告。

    如果您升级到 Excel-Writer,警告应该会消失。更重要的是,如果你想要一个超链接,你可以在同一个调用中包含链接和友好的描述:

    $worksheet->write_url(12, 0, 'internal:Sheet3!A1', 'Click Here!');
    

    对于它的价值,我认为write 方法也会正确地将其解释为链接:

    $worksheet->write(12, 0, 'internal:Sheet3!A1', 'Click Here!');
    

    -- 编辑 2018 年 12 月 21 日--

    如果想在合并单元格上做超链接,一种方法是使用 Excel 的超链接功能:

    my $merged = $workbook->add_format();
    $worksheet->merge_range("A10:A11",
      qq{=hyperlink("#'Sheet3'!A1","Click Here!")},
      $merged);
    

    【讨论】:

    • write_url 在 Spreadsheet::WriteExcel 中的一次调用中同时获取标签和链接。我个人并不赞同“每个人都应该升级到 Excel::Writer::XLSX”(尽管不幸的是模块作者似乎这样做了),因为 XLS 和 XLSX 是两种独立的格式,需要两个不同的模块。当然人们应该停止使用 XLS 格式,但这是另一回事。
    • 谢谢大家。我不知道我们可以在一个电话中同时提供标签和链接。我使用 Spreadsheet::WriteExcel 本身得到了预期的输出。
    • 关于如何合并单元格并提供超链接而不会出现文件错误的任何想法?
    • @Grinnz -- 我想这就是我的观点,关于 xls 与 xlsx。十多年了,实现后,还有理由继续使用 xlsx 吗?我不把它当作一个单独的问题。
    • @NAVEENPRAKASH -- 在 Spreadsheet::WriteExcel 中,您合并范围并将值分配为单个操作。查看metacpan.org/pod/distribution/Spreadsheet-WriteExcel/lib/…
    猜你喜欢
    • 2014-05-31
    • 1970-01-01
    • 2023-03-10
    • 2021-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-01
    相关资源
    最近更新 更多