perl - 电子表格::WriteExcel - 数据验证

标签 perl spreadsheet validation

#! /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 $!;

哪种数据验证会检查“结束时间”值是否大于“开始时间”值(以及“结束时间”是否大于“开始时间”)?
我试过了,但没用:

$sheet->data_validation( 'B2', {
    validate        => 'time',
    criteria        => '>=',
    value           => '=A2',
});
$sheet->data_validation( 'D2', {
    validate        => 'time',
    criteria        => '>=',
    value           => '=C2',
});

Spreadsheet::WriteExcel

最佳答案

您展示的后一种验证应该有效。请参见下面的屏幕截图:

alt text

如果以 hh:mm 格式输入时间,您应该会得到相同的效果。

您使用的是哪个版本的 Excel?这些数据验证不适用于 OpenOffice。

附言我是 Spreadsheet::WriteExcel 的作者。

关于perl - 电子表格::WriteExcel - 数据验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4582995/

相关文章:

javascript - jQuery 无法正确验证 RadioButtonList?

jquery - 使用 angularjs 保留光标位置

perl - 催化剂作用接受 0-n 参数

c# - 将新工作表插入电子表格文档 OpenXml

ruby - 如何使用 Rails 生成 Excel 文件?

vba - 在程序中创建命令按钮并为其分配事件

java - JPA:自己的注释来为具有相同值的字段捆绑注释

perl - 如果全局变量不会改变,是否应该将它们作为参数传递给子程序?

perl - 如何从 Perl 输出 UTF-8?

javascript - 如何安排在perl中每小时执行一次脚本的一部分,而其余脚本每分钟刷新一次