2015-02-06 8 views
-3

perl을 처음 사용합니다.Perl 스크립트로 데이터베이스에 시트 파일 읽기 가능.

#!/usr/bin/perl -w 
use DBI; 
use warnings; 
my $dbh = DBI->connect("DBI:mysql:database=afscp;host=135.75.60.120; mysql_socket=/var/lib/mysql/mysql.sock","blrdev_rw","W.mZk8", {'RaiseError' => 1}); 
my $insert_table_2= $dbh->prepare(q{INSERT INTO employee_perl (emp_id,first_nm,last_nm,team_code) VALUES (?, ?,?,?)}) or die $dbh->errstr; 
open (FILE, "Excel/Book1.xls") or die "Couldn't read file: $!"; 

while (<FILE>) 
    { 
     chomp; 
     my @fields = split(',', $_); 

     my $emp_id = shift(@fields); 
     my $fname = shift(@fields); 
     my $lname = shift(@fields); 
     my $team_code = shift(@fields);  
     $insert_table_2->execute($emp_id,$fname,$lname,$team_code) or die  $dbh->errstr; 
    } 

close (FILE); 
$dbh->disconnect(); 
+2

xls는 바이너리 형식입니다. 바이너리 형식을 읽으려면 http://search.cpan.org/~dougw/Spreadsheet-ParseExcel-0.65/lib/Spreadsheet/ParseExcel.pm과 같은 sth이 필요합니다. – weismat

+0

어떤 플랫폼을 사용하고 계십니까? Win32 :: OLE를 사용하여 Excel을 구동 할 수 있습니다. XML을 가지고있는 zip 파일이기 때문에'xlsx'를 unpick 처리 할 수도 있습니다. – Sobrique

+0

또한 :'use strict; ' – Sobrique

답변

1

CPAN 모듈 Spreadsheet::ParseExcel 엑셀을 읽을 수있는 친구가 있습니다 : 나는 여기 내 시험 코드입니다 .. 엑셀 파일을 읽고 데이터베이스에 삽입해야합니다. 문서에서 :

#!/usr/bin/perl -w 
use strict; 
use Spreadsheet::ParseExcel; 
my $parser = Spreadsheet::ParseExcel->new(); 
my $workbook = $parser->parse('Book1.xls'); 
if (!defined $workbook) 
{ 
    die $parser->error(), ".\n"; 
} 
for my $worksheet ($workbook->worksheets()) 
{ 
    my ($row_min, $row_max) = $worksheet->row_range(); 
    my ($col_min, $col_max) = $worksheet->col_range(); 

    for my $row ($row_min .. $row_max) 
    { 
     for my $col ($col_min .. $col_max) 
     { 
      my $cell = $worksheet->get_cell($row, $col); 
      next unless $cell; 

      print "Row, Col = ($row, $col)\n"; 
      print "Value  = ", $cell->value(),  "\n"; 
      print "Unformatted = ", $cell->unformatted(), "\n"; 
      print "\n"; 
     } 
    } 
} 
+0

위의 코드를 다음과 같은 오류가 발생했습니다 : @INC에서 스프레드 시트/ParseExcel.pm을 찾을 수 없습니다 (@INC에는 다음이 포함되어 있습니다 : /usr/lib64/perl5/site_perl/5.8.8/). x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8/usr/lib/perl5/site_perl /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi/usr/lib/perl5/vendor_perl/5.8.8/usr/lib/perl5/vendor_perl /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/usr/lib/perl5/5.8.8.) at excel. pl 줄 3 – chaya

+2

예. Spreadsheet :: ParseExcel은 CPAN 모듈입니다. 그것을 설치해야합니다. 또한 Perl 버전 업그레이드를 고려할 수도 있습니다. 5.8.8은 9 년 전에 발표되었습니다. 현재 버전은 5.20입니다. –

+0

이것은 시스템에 Spreadsheet :: ParseExcel 모듈을 설치하지 않았 음을 의미합니다. perl 모듈을 설치하는 방법을 살펴보십시오. http://www.cpan.org/modules/INSTALL.html – serenesat

0

당신은 아마 그것을 위해 CPAN에서 공유 좋은 직장에서 혜택을 누릴 것 : enter link description here. GNU/Linux OS를 사용하는 경우 컴파일 된 패키지로 사용할 수있는 모듈을 확인할 수 있습니다 (예 : aptitude 또는 emerge 또는 MacPorts를 사용하여 설치할 수 있음).

또한 Excel은 여러 버전이 포함 된 여러 스프레드 시트 형식을 지원하는 소프트웨어라는 점을 고려해야합니다.

일부 비즈니스 시나리오에서는 Excel 스프레드 시트를 일부 RDBMS 서버에 연결하여 Excel 파일을 공유 데이터 저장소의 프론트 엔드로 전환하는 것을 고려할 수 있습니다.