#! /usr/bin/env perl
use warnings;
use 5.012;
use Spreadsheet::WriteExcel;
my $workbook = Spreadsheet::WriteExcel->new( 'test_test.xls' ) or die $!;
my $sheet = $workbook->add_worksheet();
my $format_in = $workbook->add_format( align => 'center', valign => 'vcenter' );
my $format_st = $workbook->add_format( align => 'center', valign => 'vcenter' );
$format_in->set_num_format ( 'hh:mm' );
$format_st->set_num_format ( '[h]:mm' );
$sheet->set_row( 0, 22 );
$sheet->set_row( 1, 22 );
$sheet->set_column( 'A:D', 20, $format_in );
$sheet->set_column( 'E:E', 20, $format_st );
$sheet->write( 'A1', 'begin am' );
$sheet->write( 'B1', 'end am' );
$sheet->write( 'C1', 'begin pm' );
$sheet->write( 'D1', 'end pm' );
$sheet->write( 'E1', 'time' );
$sheet->data_validation( 'A2:D2', {
validate => 'time',
criteria => 'between',
minimum => 'T06:00',
maximum => 'T20:00',
});
$sheet->write_formula( 'E2', '=(B2-A2)+(D2-C2)' );
$workbook->close() or die $!;
哪种data_validation会检查“end am”值是否大于“begin am”-value(和“end pm”grater然后“begin pm”)?
我试过这个,但它不起作用:
$sheet->data_validation( 'B2', {
validate => 'time',
criteria => '>=',
value => '=A2',
});
$sheet->data_validation( 'D2', {
validate => 'time',
criteria => '>=',
value => '=C2',
});
答案 0 :(得分:5)
您展示的后一种验证应该有效。请参见下面的屏幕截图:
如果以hh:mm格式输入时间,则会产生相同的效果。
您使用的是哪个版本的Excel?这些数据验证不适用于OpenOffice。
P.S。我是Spreadsheet :: WriteExcel的作者。
答案 1 :(得分:2)
尝试:
$sheet->data_validation( 'B2', {
validate => 'custom',
value => '=IF(B2>A2,TRUE,FALSE)',
} );
更新:这几乎完全取自http://metacpan.org/pod/Spreadsheet::WriteExcel#criteria(版本2.37),但在OpenOffice中似乎不适用于我 - 输入的任何值都被拒绝为无效。
另一方面,从后面的一个例子来看,似乎永远不会说它无效:
$sheet->data_validation( 'B2', {
validate => 'time',
criteria => '>',
value => '=A2',
} );