Как изменить этот код Perl, чтобы получить правильную информацию из файлов .xls - PullRequest
0 голосов
/ 13 сентября 2010

Я хочу изменить этот код с этими условиями: введите дату и сообщите, что все события наступят в ближайшие три или четыре ... дня. Пожалуйста, помогите мне: (

#!/usr/bin/perl -w

use strict;
use Spreadsheet::ParseExcel;

my $oExcel = new Spreadsheet::ParseExcel;

die "You must provide a filename to $0 to be parsed as an Excel file" unless @ARGV;

my $oBook = $oExcel->Parse($ARGV[0]);
my($iR, $iC, $oWkS, $oWkC);
print "FILE  :", $oBook->{File} , "\n";
print "COUNT :", $oBook->{SheetCount} , "\n";

print "AUTHOR:", $oBook->{Author} , "\n"
 if defined $oBook->{Author};

for(my $iSheet=0; $iSheet < $oBook->{SheetCount} ; $iSheet++)
{
 $oWkS = $oBook->{Worksheet}[$iSheet];
 print "--------- SHEET:", $oWkS->{Name}, "\n";

 for(my $iR = $oWkS->{MinRow} ;
     defined $oWkS->{MaxRow} && $iR <= $oWkS->{MaxRow} ;
     $iR++)

 {
  for(my $iC = $oWkS->{MinCol} ;
      defined $oWkS->{MaxCol} && $iC <= $oWkS->{MaxCol} ;
      $iC++)

  {
   $oWkC = $oWkS->{Cells}[$iR][$iC];
   print "( $iR , $iC ) =>", $oWkC->Value, "\n" if($oWkC);
  }
 }
}

1 Ответ

0 голосов
/ 13 сентября 2010

Я предполагаю, что каждая строка является событием? Если это так, вместо внутреннего цикла над столбцами для каждой строки получите конкретный столбец с датой. Если он отформатирован в Excel в качестве даты, Вы можете сделать это с помощью:

my $dateColumn = 3; # for example; 0 for column A, 1 for B, etc.
my $cell = $oWkS->{'Cells'}[$iR][$dateColumn]
my $date = Spreadsheet::ParseExcel::Utility::ExcelFmt( 'YYYY-MM-DD', $cell->unformatted(), $oBook->{'Flg1904'} );

Затем просто посмотрите, находится ли ваша дата в нужном диапазоне, или пропустите строку:

next if $date lt '2010-09-13' || $date gt '2010-09-17';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...