gpt4 book ai didi

excel - 在不使用 Excel 的情况下检查 Excel 文件是否以兼容模式保存

转载 作者:行者123 更新时间:2023-12-04 19:49:50 26 4
gpt4 key购买 nike

我最近一直在尝试使用 perl 和一些模块来读取 Excel 文件,尤其是单元格的格式。

例如,我写了一段使用 ParseExcel 模块读取单元格背景颜色的 perl 代码。然而,在测试时我注意到对于某些文件,我的 perl 程序返回的颜色与 Excel 报告的颜色不匹配。最终我发现这是因为我正在阅读的文件是一个以兼容模式保存的.xls 文件。基本上,文件的创建者使用 Excel .xlsx 类型文件 (2007+) 的功能为一些单元格着色,然后使用不支持所选颜色的旧 .xls 文件扩展名保存文件。

所以我的问题是:有什么方法可以判断给定的 .xls 文件(或任何其他旧的 Excel 文件格式)是否已以兼容模式保存,而无需使用 Excel 来查找?我问的原因是我在linux环境下工作,无法使用任何windows工具分析文件。

此外,如果可以确定给定的 Excel 文件确实以兼容模式保存,是否有任何方法可以知道原始颜色是如何映射到我的程序告诉我的颜色的?

非常感谢您对此提供的任何帮助。

最佳答案

我认为您不能使用 Spreadsheet::ParseExcel 来做到这一点。我尝试用 .xlsx 中的颜色保存一个 xls 文件,并以 2003 兼容性保存它。然后将它与 2003 年的空 .xls 进行比较,我没有发现我的文件有任何差异。

您可以尝试使用以下代码使用您自己的文件对其进行调试,以找出您可以使用的差异:

use strict;
use warnings;
use Spreadsheet::ParseExcel;
use Data::Dumper;
use JSON;

use Test::More tests => 1;

my $file_1 = 'test_xls.xls';
my $file_2 = 'compat_xls.xls';

my @files = (
$file_1,
$file_2,
);

my @workbooks;
foreach my $file (@files){
print("\n\nReading $file\n");
my $parser = Spreadsheet::ParseExcel->new();
my $workbook = $parser->parse($file);

# print Dumper($workbook->{PkgStr});
delete $workbook->{PkgStr};
delete $workbook->{File};
delete $workbook->{Worksheet}->[0]->{MinRow};
delete $workbook->{Worksheet}->[0]->{RowHeight};
delete $workbook->{Worksheet}->[0]->{_Pos};
delete $workbook->{Worksheet}->[0]->{MinCol};
delete $workbook->{Worksheet}->[0]->{MaxCol};
delete $workbook->{Worksheet}->[0]->{MaxRow};
delete $workbook->{Worksheet}->[0]->{Cells};
delete $workbook->{Format}->[62];
push @workbooks, $workbook;
}



my ($ok, $stack) = is_deeply($workbooks[0], $workbooks[1]);
my $diag = explain($stack);
print(Dumper($diag));

关于excel - 在不使用 Excel 的情况下检查 Excel 文件是否以兼容模式保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49254035/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com