2013-02-26 7 views
5

이미 Merging cells in Excel by rows and columns together using PHPExcel을 확인했지만 행 추가에 대해서만 표시했지만 열에 대한 일부 테스트도 적용했지만 아무 것도 작동하지 않습니다.PHPExcel을 사용하여 Excel에서 열을 병합하는 방법

이 코드는 Excel 시트를 성공적으로 만들지 만 excel의 출력은 오류가 발생합니다.

편집

llop를 제거하고 간단한 용어에 넣고 그러나이 노력하고 있습니다 -

// Add some data 
echo date('H:i:s') , " Add some data" , EOL; 
$i = "A"; 
$j ="B"; 
for($num =1; $num <= 5; $num++) 
{ 
    $concat = "{$i}1:{$j}1"; 
    $objPHPExcel->setActiveSheetIndex(0)->mergeCells($concat); 
    $i++;$j++; 
} 
$objPHPExcel->getActiveSheet()->setCellValue('A1', 'Swapnesh'); 

내 전체 코드 - 데이터를 추가하는

$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:B1'); 
$objPHPExcel->getActiveSheet()->setCellValue('A1', 'Swapnesh'); 

홈페이지 코드 -

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', TRUE); 
ini_set('display_startup_errors', TRUE); 

define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '<br />'); 

date_default_timezone_set('Asia/Calcutta'); 

/** Include PHPExcel */ 
require_once 'Classes/PHPExcel.php'; 


// Create new PHPExcel object 
echo date('H:i:s') , " Create new PHPExcel object" , EOL; 
$objPHPExcel = new PHPExcel(); 

// Set document properties 
echo date('H:i:s') , " Set document properties" , EOL; 
$objPHPExcel-> 
getProperties()->setCreator("Swapnesh Sinha") 
          ->setLastModifiedBy("Swapnesh") 
          ->setTitle("Office 2007 XLSX Test Document") 
          ->setSubject("Office 2007 XLSX Test Document") 
          ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.") 
          ->setKeywords("office 2007 openxml php") 
          ->setCategory("Test result file"); 


// Add some data 
echo date('H:i:s') , " Add some data" , EOL; 
$i = "A"; 
$j ="B"; 
for($num =1; $num <= 5; $num++) 
{ 
    $concat = "{$i}1:{$j}1"; 
    $objPHPExcel->setActiveSheetIndex(0)->mergeCells($concat); 
    $i++;$j++; 
} 
$objPHPExcel->getActiveSheet()->setCellValue('A1', 'Swapnesh'); 

// Rename worksheet 
echo date('H:i:s') , " Rename worksheet" , EOL; 
$objPHPExcel->getActiveSheet()->setTitle('Student Data'); 


// Set document security 
echo date('H:i:s') , " Set document security" , EOL; 
$objPHPExcel->getSecurity()->setLockWindows(true); 
$objPHPExcel->getSecurity()->setLockStructure(true); 
$objPHPExcel->getSecurity()->setWorkbookPassword("PHPExcel"); 


// Set sheet security 
echo date('H:i:s') , " Set sheet security" , EOL; 
$objPHPExcel->getActiveSheet()->getProtection()->setPassword('PHPExcel'); 
$objPHPExcel->getActiveSheet()->getProtection()->setSheet(true); // This should be enabled in order to enable any of the following! 
$objPHPExcel->getActiveSheet()->getProtection()->setSort(true); 
$objPHPExcel->getActiveSheet()->getProtection()->setInsertRows(true); 
$objPHPExcel->getActiveSheet()->getProtection()->setFormatCells(true); 


// Set active sheet index to the first sheet, so Excel opens this as the first sheet 
$objPHPExcel->setActiveSheetIndex(0); 


// Save Excel 2007 file 
echo date('H:i:s') , " Write to Excel2007 format" , EOL; 
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 
//$objWriter->save(str_replace('.php', '.xlsx', __FILE__)); 
$filename = "Student-data-sheet".".xlsx"; 
$objWriter->save($filename); 
echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL; 


// Echo memory peak usage 
echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true)/1024/1024) , " MB" , EOL; 

// Echo done 
echo date('H:i:s') , " Done writing file" , EOL; 
echo 'File has been created in ' , getcwd() , EOL; 

답변

10

내 솔루션을 알아 낸다.

실제로 열 병합의 경우에는 실제로 반복 할 필요가 없다. 열 A1에서 E1으로 병합하고 싶다고합시다.

그래서 대신 루프에 의해 루프 그것은 아주 쉽게를 통해 할 수있는 것 -

$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:E1'); 

그래서 내 경우에는 내가 먼저 마지막 요소와) (제 단순히 mergeCells에 넣어 방법을 찾을 필요 그것을 작동하게 만들기 위해서.

5

이 문제는 루프의 두 셀을 병합하려고 할 때 발생합니다. 이유는 반복되는 루프가 아니라 전달하는 열 이름입니다. 잘못된 열 이름을 전달하면 Excel에서 적절한 출력을 생성하지 않습니다.

다음은 이런 종류의 문제에 직면하지 않도록 다음 Excel을 얻는 간단한 프로그램입니다.

/* manage excel index */ 
function getColumn($prevColumn){ 
    if(strlen($prevColumn)==1&&$prevColumn!="Z") 
    { $prevColumn++;return $prevColumn; } 

    $colum = ''; 
    $list = str_split($prevColumn); 

    if(count($list)==1&&$list[0]=='Z') 
    { 
     $list[0] = "A"; 
     $list[1] = "A"; 
    } 
    else if(count($list)==2&&$list[1]!='Z') 
    { 
     $list[1]++; 
} 
    else if(count($list)==2&&$list[1]=='Z') 
    { 
     $list[0] = "B"; 
     $list[1] = "A"; 
} 
return implode('',$list); 
} 

## us this like below 

$column = "A"; 
$row = 1; 
foreach($array_to_print as $details) 
{ 

$column = getColumn($column); // product next column B 
$Excelobj->getActiveSheet()->setCellValue($column.$row, $details); 
$column = getColumn($column);// product next column C 
$Excelobj->setActiveSheetIndex(0)->mergeCells($from_cell.':'.$to_cell);// now this will work till A-ZZ column in excel 
} 
+0

thx 프로그램 – swapnesh

관련 문제