2011-01-03 9 views
2
#! /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 $!; 


が、私はこれを試してみましたが、それはうまくいきませんでした:スプレッドシート:: WriteExcel - 「エンド午前」 - 値が(その後、「午後の始まり」と「終わり午後」おろし金)「午前を始める」 - 値よりも大きい場合data_validationの種類を確認しますdata_validation

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

Spreadsheet::WriteExcel

答えて

5

後者の検証:

これは、他の一方で、後で上の例から、それは無効だと言うことはありませんように思われます。下のスクリーンショットを参照してください。

alt text

あなたはHHで時間を入力する場合は、同じ効果を得る必要があります:mm形式。

使用しているExcelのバージョンは何ですか?これらのデータ検証はOpenOfficeでは機能しません。

P.S.私はSpreadsheet :: WriteExcelの著者です。

+0

OpenOfficeを使ってテストしました。 –

+0

それで、それはそれを説明します。 WriteExcel/OpenOfficeには(あなたの視点に応じて)OpenExpiceで正しく評価されていないWriteExcelによって生成されたデータの検証を妨げるバグがあります。ただし、Excelで評価します。 – jmcnamara

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', 
}); 
関連する問題