2012-06-21 39 views
5

Tôi đang cố gắng thêm định dạng có điều kiện vào bảng tính excel của mình. Rất tiếc, ví dụ trên trang Spreadsheet :: WriteExcel quá đơn giản và tôi không biết cách thực hiện.Bảng tính :: WriteExcel định dạng có điều kiện dựa trên giá trị ô khác

Tôi muốn thay đổi màu backgroud của hàng theo giá trị ô RC10. Trong excel tôi sẽ bổ sung thêm công thức định dạng

=IF(RC10="xxxx";1;0) 

Tôi đã cố gắng để làm một cái gì đó như thế trong bảng tính :: WriteExcel:

my $detail_rest_fmt = $excel->add_format(font => "Calibri", size => 11, valign => "vcenter", align => "right", border => 1); 
$detail_rest_fmt->set_num_format("[Green]=IF(RC10=\"xxxx\";1;0);[Red]=IF(RC10=\"yyyyyy\";1;0)"); 

nhưng withouts hiệu lực.

Trả lời

3

Tin xấu là tôi nghĩ rằng khó có thể thực hiện với Spreadsheet :: WriteExcel.

Tin vui là có thể dễ dàng thực hiện với Excel :: Writer :: XLSX. Điều này xảy ra là một loại hậu duệ của Spreadsheet :: WriteExcel. Vui lòng đọc bài viết: Spreadsheet::WriteExcel is dead. Long live Excel::Writer::XLSX

Các mã sau đây không chính xác định dạng mà bạn muốn (chỉ dựa trên ô A1 thay vì RC10, điều này có thể thay đổi tất nhiên):

#!/usr/bin/perl -w 
use strict; 
use Excel::Writer::XLSX; 

my @matrix = (
    ['xxxx', '<-- Change the value in cell A1 to change the colour of row 4'], 
    [qw(Redyard Kipling)], 
    [qw(If--)], 
    [qw(If you can keep your head when all about you)], 
    [qw(Are losing theirs and blaming it on you;)], 
); 

writeSpreadsheet('conditional.formatting.xlsx', \@matrix); 

sub writeSpreadsheet { 
    my ($outFile, $matrix) = @_; 
    my $MIN_COL_WIDTH = 5; 
    my $MAX_COL_WIDTH = 35; 
    my $workbook = Excel::Writer::XLSX->new($outFile); 
    my $worksheet = $workbook->add_worksheet(); 
    my $redFormat = $workbook->add_format(font => 'Arial', color => 'red'); 
    my $greenFormat = $workbook->add_format(font => 'Arial', color => 'green', bold => 1); 
    $worksheet->set_row(0, undef, 
     $workbook->add_format(font => 'Arial', align => 'center', bold => 1)); 
    $worksheet->conditional_formatting('A4:Z4', 
     { 
      type => 'formula', 
      criteria => '=$A$1 = "xxxx"', 
      format => $greenFormat 
     } 
    ); 
    $worksheet->conditional_formatting('A4:Z4', 
     { 
      type => 'formula', 
      criteria => '=$A$1 = "yyyyyy"', 
      format => $redFormat 
     } 
    ); 
    foreach my $row (0 .. $#$matrix) { 
     foreach my $col (0 .. $#{$matrix->[$row]}) { 
      $worksheet->write($row, $col, $matrix->[$row][$col] || ''); 
     } 
    } 
} 
1

Anton, là đúng. Định dạng có điều kiện không thực sự được hỗ trợ trong Spreadsheet::WriteExcel.

Tuy nhiên, thay thế tương thích API mới hơn, Excel::Writer::XLSX cung cấp một tập hợp các tính năng định dạng có điều kiện phong phú.

Xem tài liệu được cập nhật Conditional Formatting trong Excel :: Writer :: XLSX và example này.

+0

API của WriteExcel hoàn toàn tương thích với XLSX? – patseb

+0

Có. Xem [Excel :: Writer :: XLSX và Bảng tính :: WriteExcel] (http://search.cpan.org/~jmcnamara/Excel-Writer-XLSX/lib/Excel/Writer/XLSX.pm#Excel::Writer :: XLSX_and_Spreadsheet :: WriteExcel) phần của tài liệu. – jmcnamara

1

Hành vi của điều kiện_formatting rất lạ. tôi có một cái gì đó như thế:

my $yyy = $excel->add_format(font => "Calibri", size => 11, valign => "vcenter", align => "right", border => 1, border_color => "black", bg_color => $green); 

for my $section (@sections) { 
    for my $sector (@sectors) { 
     my $xxxx = $excel->add_format(font => "Calibri", size => 11, valign => "vcenter", align => "right", border => 1, border_color => "black", bg_color => $green); 
      $sheet->conditional_formatting("A1", 
      { 
       type => "formula", 
       criteria => '=J4="T1"', 
       format => $yyy 
      }); 
    } 
} 

Khi tôi sử dụng $ yyy nó doesnt làm việc (trong excel có được thiết lập mẫu điền thay vì màu backgroud) Khi tôi sử dụng $ xxxx nó hoạt động tốt. $ yyy và $ xxxx giống nhau, vậy tại sao nó không hoạt động?

+0

Có vẻ như tôi không thể sử dụng định dạng $ trước đó, nó phải là "mới" mới ... nó không có ý nghĩa. – patseb

0

Đối với câu hỏi thứ hai của bạn:

Bạn có thể gặp phải một vấn đề mà các định dạng đang nhận được thu gom rác thải trước khi bạn có thể sử dụng chúng do các vấn đề phạm vi.

Nếu đó là vấn đề phạm vi, hãy thử thêm $workbook->close() vào cuối chương trình để xem có khắc phục được không.

Nếu không, chúng tôi sẽ cần một chương trình mẫu hoàn chỉnh hơn để gỡ lỗi.

Các vấn đề liên quan