2013-02-14 1 views
1

Excel로 내보내기 위해 Excel :: Writer :: XLSX perl 모듈을 사용하고 있습니다. 대규모 수출이 오랜 시간이 걸린다는 점을 제외하면 큰 성과를 거두고 있습니다. 그러나, 내가 $ 통합 -> set_optimization() 추가; 나는 .xlsx 파일에서만 숫자 데이터를 얻는다.Excel :: Writer :: XLSX set_optimization()은 숫자 데이터 만 쓰기

$ workheet-> write() 및 $ worksheet-> write_string()을 사용해 보았지만 $ workbook-> set_optimization을 사용할 때 숫자가 아닌 문자열을 가진 모든 필드가 내보내기에서 제외되었습니다.(); 나는 이전 스프레드 시트를 사용하는 경우

:: 모듈 WriteExcel는 잘 작동하지만 수출의 파일 크기가 실질적으로 더 큰, 24메가바이트을 7메가바이트

여기에 헤더 행 만들기위한 코드입니다 :

# Create a new workbook 
my $workbook = Excel::Writer::XLSX->new($file_path); 

$workbook->set_optimization(); 

my $worksheet = $workbook->add_worksheet(); 
# insert the header row 
my $header_cnt = 0; 
foreach my $header_cell (@header_values){#loop through each header column and add it to the sheet 
    # print $header_cell." - ".$header_cnt."\n"; 
    # $worksheet->write_string("0", $header_cnt, "test"); 
    $worksheet->write_string("0", $header_cnt, $header_cell); 
    $header_cnt++; 
} 

$workbook->close() or die "Error closing file: $!"; 

답변

2

set_optimization() 모드에서 숫자 또는 문자열을 쓰는 데 문제가 없어야합니다. 사실 several test cases just like that이 있습니다.

일부 샘플 데이터로 프로그램 변형을 실행했는데 결과가 올바르게 나타났습니다. 문자열이 왼쪽과 Excel에서 문자열과 숫자 데이터로 처리되어 있음을 나타냅니다 오른쪽에있는 숫자로 정렬되어 있는지

#!/usr/bin/perl -w 

use strict; 
use Excel::Writer::XLSX; 

my $workbook = Excel::Writer::XLSX->new('test.xlsx'); 
$workbook->set_optimization(); 

my $worksheet = $workbook->add_worksheet(); 


my @header_values = (1, 2, 3, 'foo', 'bar', 6, 7); 
my $header_cnt = 0; 

for my $header_cell (@header_values){ 
    $worksheet->write(0, $header_cnt, $header_cell); 
    $header_cnt++; 
} 

$workbook->close(); 

example output

참고.

또한 write_string() 메서드를 사용하면 두 경우 모두에서 문자열을 얻게됩니다.

발생하는 문제는 최적화 모드에서 데이터를 행 - 열 순서로 작성해야 할 수 있습니다. 즉, 행의 각 행과 각 열을 순차적으로 작성해야합니다. 당신은 루프에 대한 후 다음 줄을 추가 한 경우

예를 들어, 두 번째 데이터 최적화 모드에 표시되지 않습니다 :

$worksheet->write('A2', "This is fine"); 
$worksheet->write('A1', "I'm too late."); 
+0

빠른 답장을 보내 주셔서 감사합니다. 나는 당신의 코드를 복사하고 그것을 달렸고 숫자 만 내보내기에 나타났습니다. 내가 set_optiomization()을 주석 처리 할 때; 모든 데이터 (숫자와 문자열)를 얻습니다. – nickradford

+0

출력 파일을 보려면 무엇을 사용하고 있습니까? 나는 스크린 샷을 쇼핑하지 않았다. 데이터가 Excel에 표시됩니다. :-) – jmcnamara

+0

나는 파일을보기 위해 Numbers를 OS X에서 사용 해왔다. 그러나 필자는 Windows에서 Excel로 파일을 열었고 데이터가 모두 나타납니다. – nickradford

0

이 방법을 사용하는 메모리 사용 set_optimization()를 줄이기 위해 그것을 제한하지 데이터는 수치가된다. 숫자와 문자열을 모두 처리 할 수 ​​있습니다.

그리고

foreach my $record (@records){ 
    $row++; 
    $col = 0; 

    foreach my $data (@{$record}){ 
     $worksheet->write($row,$col,$data);  
     $col++; 
    } 
} 

은 자세한 내용은이 링크를 https://github.com/AarthiRT/Excel_Writer_XLSX에서 "Write_largeData_XLSX.pl"를 참조하십시오 각 행을 통해 루프

.

관련 문제