2013-02-26 18 views
5

का उपयोग कर Excel में कॉलम को मर्ज कैसे करें मैंने पहले से ही इस Merging cells in Excel by rows and columns together using PHPExcel को चेक किया है, लेकिन यह केवल पंक्ति जोड़ के लिए दिखा रहा है, हालांकि मैंने कॉलम के लिए कुछ परीक्षण भी लागू किए हैं लेकिन कोई भी काम नहीं कर रहा है।PHPExcel

यह कोड हालांकि एक्सेल शीट सफलतापूर्वक बनाता है लेकिन एक्सेल में आउटपुट त्रुटि फेंक रहा है।

संपादित

लेकिन इस करता है, तो 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

यह समस्या तब होती है जब आप लूप में दो सेल मर्ज करने का प्रयास कर रहे होते हैं। कारण वह लूप नहीं है जिसे आप पुनरावृत्त कर रहे हैं लेकिन इसका कॉलम नाम आप गुजर रहे हैं। यदि आप गलत कॉलम नाम गुजर रहे हैं तो आपका एक्सेल उचित आउटपुट नहीं देगा।

अगले एक्सेल कॉलम प्राप्त करने के लिए सरल प्रोग्राम निम्नलिखित है ताकि हमें इस तरह के मुद्दे का सामना न हो।

/* 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