为什么Spreadsheet :: XLSX在不同的机器上parsingdate不一致?

我创build了一个从XLSX工作表读取信息的Perl脚本。 由于在一台机器上运行良好,另一台机器没有运行,所以我join了一个简短的debugging部分:

$sheetdate = ($sheet -> {Cells} [0] [$sheet->{MaxCol}]) -> value(); print "value: $sheetdate\n"; $sheetdate = ($sheet -> {Cells} [0] [$sheet->{MaxCol}]) -> get_format(); print "getformat: $sheetdate\n"; 

在一台机器上打印:

 value: 2016-01-18 getformat: yyyy-mm-dd 

另一方面:

 value: 1-18-16 getformat: md-yy 

相同的脚本,相同的工作表,不同的结果。 我相信环境中的东西会有所不同,但是我不知道究竟是什么。

任何提示?

“同样的脚本,同样的工作表,不同的结果,我相信环境中的东西会有所不同,但我不知道究竟是什么。”

你在这里指出你自己并不是在真正寻求perl或XLSX问题的解决scheme,而是在解决你的环境问题上提供一些帮助。

没有环境就难以提供解决scheme本身,但我可以这样说 – 你需要;

1)重新安排事情,以便从两种环境中获得相同的结果;

2)确定原始问题环境与现在“有效”环境之间的差异列表; 和

3)一次修改列表中的一个事物 – 向着有效的环境移动 – 每次检查直到变得清楚关键variables(不是编程意义上的)是什么。

关于(1),看看草莓Perl 。 使用草莓,它相对容易设置一些棒上的Perl (见便携式ZIP版本 ) – 一个完整的USB棒上的Perl环境。 将您的文档放在同一个USB上,然后尝试两种环境 – 这次绝对有确定的环境。 如果不同的结果仍然存在,请尝试从“live environement”DVD(适当的linux或widows)启动,然后使用USB。

最终,我会build议有一些东西(如电子表格模板)在不同环境之间进行竞争。 你只需要通过一个消除过程来找出它是什么。

为了后见之明,我认为值得重温,为将来遇到这个问题的人们提供一个简洁的答案。

最初的问题是,如果一个perl脚本input的excel数据文件是相同的(这是通过MD5校验和确认的),它将如何产生两个不同的结果。 作为程序员,我们的重点往往放在我们编写的脚本和进入它们的数据上。 什么滑到心的背后是perl本身可以安装和configuration的无数的方式。

这三件事应该有助于确定两次安装的区别在哪里。

(1)如上所述,用棒状草莓perl将环境排除在外,从而(如果问题“消失”)确认问题与环境有关。

(2)使用Data::Dumper自由地查找执行stream“fork”的位置。

(3)比较perl -V (注释大写V)的输出,以查明在各自的perls如何构build和configuration方面存在差异。

问题的根源是一个过时的Spreadsheet :: XLSX cpan模块作为来自分发存储库的RPM安装。 RPM包含了该模块的版本0.13,在CPAN中已经有版本0.15,从版本0.14开始,模块的行为在这个特定的方面被改变了。 所以一旦我用从CPAN直接下载的版本replace了预编译的模块并在本地编译,问题就解决了。