Helpex - Trao đổi & giúp đỡ Đăng nhập
3

Tôi muốn sử dụng chức năng "autofit_columns" như được tìm thấy ở đây: CPAN

Đây là chương trình của tôi cho đến nay (tôi đã bỏ qua phần kết nối và truy vấn DB)

my $workbook = Spreadsheet::WriteExcel->new("TEST.xls");

my $bold = $workbook->add_format();
$bold->set_bold();
my $number = $workbook->add_format();
$number->set_num_format(0x01);
$worksheet = $workbook->add_worksheet('Sheet1');

my @headings = ('Blabla...');

foreach $i (@headings){
$worksheet->write(0, $col++, $i, $bold);
};

$col=0;
$lrow=1;
while (@row = $sth->fetchrow_array()) {
        $worksheet->write($lrow,$col,\@row);
        $lrow++;

};
$sth->finish;
$dbh->disconnect;

autofit_columns($worksheet);
$workbook->close();

sub autofit_columns {

        my $worksheet = shift;
        my $col       = 0;

        for my $width (@{$worksheet->{__col_widths}}) {

            $worksheet->set_column($col, $col, $width) if $width;
            $col++;
        }
    }

VẤN ĐỀ: Các cột của tôi không được tự động điều chỉnh trong tệp xls ... Bạn có biết tại sao không?

Tôi không nhận được mã:

for my $width (@{$worksheet->{__col_widths}}) {

                $worksheet->set_column($col, $col, $width) if $width;
                $col++;
            } 
3 hữu ích 0 bình luận 2.1k xem chia sẻ
2

Bạn cần xem lại ví dụ đó và triển khai add_write_handlermột phần trước khi viết bất cứ thứ gì vào trang tính của mình.

Mời các bạn xem qua

$worksheet->add_write_handler(qr[\w], \&store_string_widths);

dòng và sau đó khi store_string_widthsthực hiện chương trình con.

Trả lời là bạn cần lưu trữ độ rộng tuyệt đối của chuỗi ở mỗi lần ghi. Sau đó, sau khi bạn ghi tất cả dữ liệu vào trang tính của mình, bạn cần xem qua các hàng và tìm 'chiều dài' của chuỗi lớn nhất cho mỗi cột - đó sẽ là chiều rộng cột mong muốn.

Chúc bạn may mắn.

2 hữu ích 0 bình luận chia sẻ
2

Bạn đang thiếu một phần của mã ví dụ thêm chức năng gọi lại:

$worksheet->add_write_handler(qr[\w], \&store_string_widths);

Bạn cũng đang thiếu store_string_widths()chức năng.

Liên quan đến câu hỏi thứ hai của bạn, lệnh gọi lại lưu trữ độ dài chuỗi tối đa được sử dụng cho mỗi cột. Đoạn mã đang sử dụng các độ dài này để đặt chiều rộng cột cho mỗi cột từ cột đầu tiên đến cột cuối cùng có độ dài được lưu trữ. Nếu một cột không có chiều rộng autfit được lưu trữ thì chiều rộng của nó sẽ không được điều chỉnh.

Đây là tất cả một chút hacky trong Spreadsheet :: WriteExcel. Nó sẽ được tích hợp nhiều hơn vào mô-đun trong Excel :: Writer :: XLSX, thay thế cho WriteExcel.

2 hữu ích 2 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ perl excel module , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading