Hướng dẫn phpexcel set align right - phpexcel đặt căn chỉnh bên phải

Tôi đang sử dụng mã này cho dữ liệu cột E được đặt để căn chỉnh bên phải nhưng nó không hiển thị cho tôi hiệu ứng

$objPHPExcel->getActiveSheet()
    ->getStyle('E')
    ->getAlignment()
    ->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);

Thay vì 'E' nếu tôi viết E6 thì nó sẽ hiển thị dữ liệu ô E6 sang phải.

$objPHPExcel->getActiveSheet()
    ->getStyle('E6')
    ->getAlignment()
    ->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);

Hướng dẫn phpexcel set align right - phpexcel đặt căn chỉnh bên phải

Đã hỏi ngày 9 tháng 11 năm 2012 lúc 11:17Nov 9, 2012 at 11:17

Pankil Thakkarpankil Thakkarpankil thakkar

Phim huy hiệu vàng 40111 gold badge5 silver badges15 bronze badges

Bạn đúng: kiểu hàng và cột không được PHPExcel hỗ trợ.

Kiểu dáng di động là, nhưng bạn cũng có thể đặt kiểu theo một loạt các ô:

$objPHPExcel->getActiveSheet()
    ->getStyle('E1:E256')
    ->getAlignment()
    ->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);

Đã trả lời ngày 9 tháng 11 năm 2012 lúc 12:18Nov 9, 2012 at 12:18

Hướng dẫn phpexcel set align right - phpexcel đặt căn chỉnh bên phải

Mark Bakermark BakerMark Baker

207K31 Huy hiệu vàng339 Huy hiệu bạc381 Huy hiệu Đồng31 gold badges339 silver badges381 bronze badges

5

Vì không ai giải thích cách tạo kiểu cho toàn bộ cột, một phần của câu hỏi, đây là mã:

$lastrow = $objPHPExcel->getActiveSheet()->getHighestRow();

$objPHPExcel->getActiveSheet()
        ->getStyle('E1:E'.$lastrow)
        ->getAlignment()
        ->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);

Đã trả lời ngày 13 tháng 10 năm 2015 lúc 8:40Oct 13, 2015 at 8:40

Hãy thử mã này. Nó hoạt động tốt. Và tôi đã xác nhận.

 $activeSheet = $phpExcelObject->getActiveSheet();
    //..
    //...
     $activeSheet->getStyle("E")
                 ->getAlignment()
                 ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);

Mã này căn chỉnh cột E theo chiều ngang bên phải

Đã trả lời ngày 18 tháng 9 năm 2014 lúc 7:28Sep 18, 2014 at 7:28

Hướng dẫn phpexcel set align right - phpexcel đặt căn chỉnh bên phải

7

Tôi cũng đã xác nhận điều này trong khi cố gắng áp dụng các định dạng số nhất định vào colums: bạn không thể áp dụng một kiểu cho một cột - getstyle ('e'), bạn phải chỉ định phạm vi - getstyle ('e1: e50').

$objPHPExcel->getActiveSheet()->fromArray($row_array, NULL, 'A2');
$rows = count($row_array);
$objPHPExcel->getActiveSheet()->getStyle('C2:C'.$rows)->getNumberFormat()->setFormatCode('000000000');

Mã này sẽ bỏ trái các số trong cột C với số không

Đã trả lời ngày 28 tháng 5 năm 2013 lúc 0:51May 28, 2013 at 0:51

JimbojimboJimbo

4814 Huy hiệu bạc5 Huy hiệu Đồng4 silver badges5 bronze badges

2

Ở phần 1 tôi đã trình bày sơ qua về cách tích hợp PHPExcel vào CakePHP. Bài này tôi xin chia sẻ thêm một vài tính năng khác như cách thiết lập width, height của dòng cột, cố định vị trí dòng cột, hay style cho cell dữ liệu để nội dung được thân thiện hơn, hay phục vụ cho việc in ấn file.

Width & Height

Việc thiết lập độ rộng cột hay chiều cao hàng thực hiện rất đơn giản, chỉ việc gọi đến các hàm tương ứng rồi cho đối số vào là hoàn thành, đó chính là setWidth() và setRowHeight(), cách dùng như đoạn code này ví dụ bạn chắc chắn ko có sản phẩm nào có giá từ chục triệu trở lên thì tối đa số các con số là 7, vậy hãy set là 10 cho rộng rãi cửa nhà :

/*
 * now i will set width for Price column to 10 (can fill 8 number characters) * or you can set auto width for it by using setAutoSize(true)
*/
$this->PhpExcel->getActiveSheet()->getColumnDimension('D')->setWidth(10);

Vậy còn height? trong demo này có thể lấy minh hoạ rằng dòng trống sau bảng dữ liệu phải rộng hơn để cho nhìn cảm giác thoải mái hơn chút :

// set that blank row's height to 30pt by using setRowHeight()
$this->PhpExcel->getActiveSheet()->getRowDimension($next2Row - 1)->setRowHeight(25);

Style

Căn lề dữ liệu

Đầu tiên là header của bảng dữ liệu, tôi sẽ thiết lập để nó được căn lề giữa cho cả 2 chiều ngang (dùng setHorizontal) và dọc (dùng setVertical). Nhưng trước đó, phải cần xem là căn cho cell nào hay là một dải các cell, vùng các cell bằng getStyle(), rồi sẽ getAlignment() để cho PHPExcel biết ta sẽ style về lề dữ liệu :

// then align heading to center
$this->PhpExcel->getActiveSheet()->getStyle('A7:F7')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$this->PhpExcel->getActiveSheet()->getStyle('A7:F7')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);

Như bạn thấy chỉ cần truyền hằng số về căn lề đã đươc định sẵn thì cell đã được style lề, ngoài căn giữa thì còn có thể chọn right hay left theo đúng cú pháp trên.

Tiếp theo là style cho bảng dữ liệu sau header, trong demo này thì ta biết chắc dữ liệu sẽ được fill vào từ dòng 8 còn dòng cuối của bảng có thể lấy qua biến $next2Row trừ đi 2 sẽ ra kết quả. Hai cột đầu tiên là số thứ tự (No) và mã sản phẩm (Code) sẽ canh giữa theo cả 2 chiều :

// ok, we have $next2Row so we know current row.
// we will style from row 8 for cell table
// firstly, column A (No) will be centered
$this->PhpExcel->getActiveSheet()->getStyle('A8:A' . (string)($next2Row - 2))->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$this->PhpExcel->getActiveSheet()->getStyle('A8:A' . (string)($next2Row - 2))->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);

Mặc định cột Product được căn lề trái nên nếu cần thiết thì chỉ set lề chiều dọc nữa mà thôi

$objPHPExcel->getActiveSheet()
    ->getStyle('E6')
    ->getAlignment()
    ->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
0

Cuối cùng là 3 cột cuối Price, Quantity và Sub Total đều chứa dữ liệu kiểu số nên ta sẽ để căn lề phải chiều ngang và căn giữa chiều dọc :

$objPHPExcel->getActiveSheet()
    ->getStyle('E6')
    ->getAlignment()
    ->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
1

Bạn hẳn nhận thấy rằng đang thừa code một chút, bởi vì dải A8:F(cuối) đều căn lề giữa chiều dọc nên cần thu gọn bớt như sau là đủ :

$objPHPExcel->getActiveSheet()
    ->getStyle('E6')
    ->getAlignment()
    ->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
2
$objPHPExcel->getActiveSheet()
    ->getStyle('E6')
    ->getAlignment()
    ->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
3

Border

Giờ đến lúc thiết lập các border cần thiết để khi in ra nhìn sẽ đẹp hơn, rõ ràng với khung viền bao quanh bảng dữ liệu. Để thiết lập thì bạn cần gọi getBorders() trước tiên, sau đó là border nào bạn định format (trái, phải, trên dưới hay tất cả) và cuối cùng sẽ là loại border nào bạn muốn. Các loại border được hỗ trợ rất nhiều, cơ bản có THIN, THICK, DOTTED, DASHED, DOUBLE, DASHDOT ...

$objPHPExcel->getActiveSheet()
    ->getStyle('E6')
    ->getAlignment()
    ->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
4

Hyperlink

Trong demo này chỗ thích hợp để link nhất chắc là tên khách hàng, chẳng hạn gắn vào đó email của khách hàng và khi click vào đó sẽ khởi động trình soạn thảo mail gửi cho khách hàng. Hoặc là URL dẫn đến chính invoice đó trên giao diện web

Hướng dẫn phpexcel set align right - phpexcel đặt căn chỉnh bên phải

$objPHPExcel->getActiveSheet()
    ->getStyle('E6')
    ->getAlignment()
    ->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
5

Cố định hàng cột khi view

Với những file có số lượng hàng cột nhiều mà không thể xem hết trong màn hình, đôi khi ta sẽ cần cố định những phần nội dung thường là tiêu đề để khi kéo view sang các hàng cột bị khuất thì sẽ vẫn biết được đang aview phần nội dung của tiêu đề nào. Ở demo này dữ liệu là không nhiều nhưng tôi sẽ cố định lại phần thông tin về khách hàng và cột A :

$objPHPExcel->getActiveSheet()
    ->getStyle('E6')
    ->getAlignment()
    ->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
6

Hàm freezePane() làm việc giống như Excel của bạn, như trên khi chỉ định B6 làm đối số thì PHPExcel sẽ hiểu là bạn muốn cố định từ dòng 1 đến 5 và các cột trước B (tức cột A). Rất đơn giản phải không !?

Metadata

Mỗi file khi được xuất ra từ hệ thống, để đảm bảo tính sở hữu cá nhân hay bản quyền, hoặc để quản lý tìm kiếm file được dễ dàng hơn ... nhiều khi bạn cần đưa cả những thông tin cần thiết (như tên người tạo, subject của file, mô tả về file đó ...) vào metadata. PHPExcel hỗ trợ các thông tin như sau :

$objPHPExcel->getActiveSheet()
    ->getStyle('E6')
    ->getAlignment()
    ->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
7

Comment và data validation

Comment

Với nhiều ứng dụng, đôi khi những nội dung trên file có chỗ sẽ cần phải note lại cho người đọc dễ hiểu hơn như chú thích về cách tính của một cell, hay bất kì nội dung chú thích nào khác thì giải pháp là để lại comment cho cell dữ liệu đó. PHPExcel hỗ trợ rất nhiều và chức năng này cũng không là ngoại lệ. Bạn sẽ dùng hàm getComment() với đối số là địa chỉ cell dữ liệu muốn để comment rồi dùng getText() và createTextRUn('content here') để fill nội dung comment vào cell đã định. Giả sử comment cell đầu tiên là phải thanh toán trước, hãy cùng xem đoạn code demo sau :

$objPHPExcel->getActiveSheet()
    ->getStyle('E6')
    ->getAlignment()
    ->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
8

Data validation

Cuối cùng trong bài này, tôi sẽ viết về cách tạo ra một data validation, vì có nhiều loại nên tôi chỉ chọn một loại là list để trình bày, các loại khác cũng gần tương tự nên có dịp tôi sẽ trình bày sau :

$objPHPExcel->getActiveSheet()
    ->getStyle('E6')
    ->getAlignment()
    ->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
9
$objPHPExcel->getActiveSheet()
    ->getStyle('E1:E256')
    ->getAlignment()
    ->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
0

Trong một vài trường hợp, có thể list dữ liệu của bạn lấy luôn từ các giá trị có trong worksheet đó và bạn có thể xem đoạn code như sau :

$objPHPExcel->getActiveSheet()
    ->getStyle('E1:E256')
    ->getAlignment()
    ->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
1

Để tạo ra một chuỗi những drop-down list tương tự có cùng nội dung thì bạn có thể sử dụng vòng lặp tạo ra hàng loạt hoặc đôi khi bạn chỉ muốn sao chép từ cell này sang cell nào khác trong sheet, lúc này bạn dùng clone :

$objPHPExcel->getActiveSheet()
    ->getStyle('E1:E256')
    ->getAlignment()
    ->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
2

Lời kết

Đến đây demo đã tương đối hoàn chỉnh, ở phần tiếp tôi sẽ trình bày tiếp về những tính năng khác mà PHPExcel cung cấp và hoàn thiện demo này,ví dụ như format số tiền theo định dạng mong muốn, tạo thiết lập bảo vệ file, thiết lập các thông số cho in ấn ...

code on github