2013-02-26 14 views
5

私はすでにこのMerging cells in Excel by rows and columns together using PHPExcelをチェックしていましたが、行の追加だけを示していましたが、カラムのテストをいくつか適用しましたが、PHPExcelを使用してExcelで列をマージする方法

このコードはExcelシートを正常に作成しますが、excelの出力はスローエラーです。データを追加するための

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

メインコード - -

// 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'); 

私のコード全体をllopを削除して、簡単な言葉でこれを入れている場合しかし、これが働いている

EDIT

-

<?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にマージしたいとしましょう。だから私の場合、私は最初の最後の要素と第1および単にmergeCellsに入れ()メソッドを見つける必要があり

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

- 代わりに、ループによってループを行くのだから、非常に簡単にを介して行うことができます

それを働かせる。

5

この問題は、ループ内の2つのセルをマージしようとしているときに発生します。理由は反復しているループではなく、渡す列名です。間違った列名を渡すと、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 for the program – swapnesh

関連する問題