2012-06-06 34 views
14

tôi cần phải hợp nhất các tế bào trong Excel (xlsx) bởi hàng và một lần nữa bằng cách sử dụng cột PHPExcel. Tôi đã thử những điều sau đây.hợp nhất ô trong Excel bằng các hàng và cột với nhau bằng PHPExcel

$sheet->mergeCells("G".($row_count+1).":G".($row_count+4));    
$sheet->mergeCells("H".($row_count+1).":H".($row_count+4));    
$sheet->mergeCells("I".($row_count+1).":I".($row_count+4));  

Trường hợp biến số $row_count có một số giá trị động không thể đoán trước như 25, 50, 75, v.v. (không có mẫu thông thường).

enter image description here

Nó kết hợp các tế bào như trong trước snap shot như có thể thấy ngay dưới tế bào Note. Sau khi sáp nhập các ô này theo hàng, tôi đang cố gắng hợp nhất chúng theo các cột như sau.

$sheet->mergeCells("G".($row_count+1).":I".($row_count+1));    

nhưng không hoạt động. Khi tôi cố gắng mở tệp excel, nó yêu cầu xác nhận (có hộp xác nhận)

Excel tìm thấy nội dung không đọc được trong 'report.xlsx'. Bạn có muốn khôi phục nội dung của sổ làm việc này không? Nếu bạn tin tưởng nguồn của sổ làm việc này, hãy nhấp vào Có.

Làm cách nào để hợp nhất các ô theo hàng và cột với nhau trong Excel?

Trả lời

20

Kết hợp đơn giản đòi hỏi một phạm vi hợp lệ của các tế bào như A1: B2, vì vậy bạn

$sheet->mergeCells("G".($row_count+1).":I".($row_count+1)); 

nên làm việc mà không cần bất kỳ vấn đề.

Bạn có thể xin thử nghiệm với một trường hợp thử nghiệm đơn giản để chứng minh rằng đây là làm cho bạn một vấn đề, chứ không phải cái gì khác trong kịch bản của bạn

EDIT

Sau khi đọc lại câu hỏi của bạn: Vấn đề của bạn có thể được rằng bạn đang cố gắng để hợp nhất các ô đã là một phần của một loạt hợp nhất, chứ không phải là sáp nhập mỗi hàng, sau đó cố gắng để hợp nhất theo cột, hãy thử kết hợp đầy đủ các rangein một đi.

$sheet->mergeCells("G".($row_count+1).":I".($row_count+4));    
+0

Nó làm việc như mong đợi. Cảm ơn bạn. – Tiny

+0

@markBaker, tôi đã sử dụng PHPExcel và tôi chỉ có cumpliments để nói về thư viện này.Bây giờ tôi đang làm việc với Aspose cho một dự án java và có một giới hạn cho thư viện này có vẻ như PHPExcel cũng có .. Chúng tôi không thể hợp nhất các ô đã hợp nhất với một ô mới. Bạn có biết tại sao? – periback2

+0

Chủ yếu là vì nó rất khó xử lý trong mã và thêm chi phí cho mỗi lần hợp nhất, thử nghiệm nếu nó là một phần của bất kỳ hợp nhất hiện có nào và kết hợp cả hai nếu nó ... và không thể cung cấp bất kỳ phản hồi nào khi thực hiện như vậy –

2

Tôi thực hiện chức năng đơn giản để calc ô được hợp nhất bằng các cột và hàng.

function cellsToMergeByColsRow($start = NULL, $end = NULL, $row = NULL){ 
    $merge = 'A1:A1'; 
    if($start && $end && $row){ 
     $start = PHPExcel_Cell::stringFromColumnIndex($start); 
     $end = PHPExcel_Cell::stringFromColumnIndex($end); 
     $merge = "$start{$row}:$end{$row}"; 

    } 

    return $merge; 
} 

Và gọi

$sheet->mergeCells(cellsToMergeByColsRow($col, $col+5, $row)); 

Cảm ơn @ Mark Baker

+0

Bạn có thể muốn sử dụng các hàm trợ giúp được xây dựng sẵn PHPExcel_Cell :: columnIndexFromString() và PHPExcel_Cell :: stringFromColumnIndex() thay vì chr/sàn/etc của riêng bạn vì chúng đã được xây dựng sẵn trong –

+0

Nhờ đề cập đến những người trợ giúp này – jashk

3
function cellsToMergeByColsRow($start = -1, $end = -1, $row = -1){ 
    $merge = 'A1:A1'; 
    if($start>=0 && $end>=0 && $row>=0){ 
     $start = PHPExcel_Cell::stringFromColumnIndex($start); 
     $end = PHPExcel_Cell::stringFromColumnIndex($end); 
     $merge = "$start{$row}:$end{$row}"; 
    } 
    return $merge; 
} 

bổ sung các trường hợp:

$objPHPExcel->getActiveSheet()->mergeCells(cellsToMergeByColsRow(0,2,3)) 
8

Có nhiều phương pháp trong tế bào sáp nhập

/** 
* Set merge on a cell range by using numeric cell coordinates 
* 
* @param int $pColumn1 Numeric column coordinate of the first cell 
* @param int $pRow1  Numeric row coordinate of the first cell 
* @param int $pColumn2 Numeric column coordinate of the last cell 
* @param int $pRow2  Numeric row coordinate of the last cell 
* @throws Exception 
* @return PHPExcel_Worksheet 
*/ 
    public function mergeCellsByColumnAndRow($pColumn1 = 0, $pRow1 = 1, $pColumn2 = 0, $pRow2 = 1) 
Các vấn đề liên quan