Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用PHPExcel合并Excel中的列_Php_Loops_Phpexcel - Fatal编程技术网

如何使用PHPExcel合并Excel中的列

如何使用PHPExcel合并Excel中的列,php,loops,phpexcel,Php,Loops,Phpexcel,我已经检查了这个,但是它只显示行添加,但是我也对列应用了一些测试,但是没有一个是有效的 此代码虽然成功创建了excel工作表,但excel中的输出抛出错误 编辑 但是,如果删除llop并简单地说,这是可行的- $objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:B1'); $objPHPExcel->getActiveSheet()->setCellValue('A1', 'Swapnesh'); 用于添加数据的主代

我已经检查了这个,但是它只显示行添加,但是我也对列应用了一些测试,但是没有一个是有效的

此代码虽然成功创建了excel工作表,但excel中的输出抛出错误

编辑

但是,如果删除llop并简单地说,这是可行的-

$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');
//添加一些数据
回显日期('H:i:s'),“添加一些数据”,下线;
$i=“A”;
$j=“B”;
对于($num=1;$num setActiveSheetIndex(0)->合并单元格($concat);
$i++;$j++;
} 
$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; 
setCategory(“测试结果文件”);
//添加一些数据
回显日期('H:i:s'),“添加一些数据”,下线;
$i=“A”;
$j=“B”;
对于($num=1;$num setActiveSheetIndex(0)->合并单元格($concat);
$i++;$j++;
} 
$objPHPExcel->getActiveSheet()->setCellValue('A1','Swapnesh');
//重命名工作表
回显日期('H:i:s'),“重命名工作表”,下线;
$objPHPExcel->getActiveSheet()->setTitle(“学生数据”);
//设置文档安全性
回显日期('H:i:s'),“设置文档安全性”,EOL;
$objPHPExcel->getSecurity()->setLockWindows(true);
$objPHPExcel->getSecurity()->setLockStructure(true);
$objPHPExcel->getSecurity()->setWorkbookPassword(“PHPExcel”);
//套票安全
回音日期('H:i:s'),“套单安全”,下线;
$objPHPExcel->getActiveSheet()->getProtection()->setPassword('PHPExcel');
$objPHPExcel->getActiveSheet()->getProtection()->setSheet(true);//应该启用此选项才能启用以下任何一项!
$objPHPExcel->getActiveSheet()->getProtection()->setSort(true);
$objPHPExcel->getActiveSheet()->getProtection()->setInsertRows(true);
$objPHPExcel->getActiveSheet()->getProtection()->setFormatCells(true);
//将活动工作表索引设置为第一张工作表,以便Excel将其作为第一张工作表打开
$objPHPExcel->setActiveSheetIndex(0);
//保存Excel2007文件
回显日期('H:i:s'),“写入Excel2007格式”,EOL;
$objWriter=PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel2007');
//$objWriter->save(str_replace('.php'、'.xlsx'、u文件_u));
$filename=“学生资料表”。.xlsx”;
$objWriter->save($filename);
回显日期('H:i:s'),“文件写入”,str_replace('.php','.xlsx',pathinfo('uuuu文件,pathinfo_基本名称)),下线;
//回波存储器峰值使用率
回显日期('H:i:s'),“峰值内存使用率:”,(内存获取峰值内存使用率(true)/1024/1024),“MB”,下线;
//回音完成
回送日期('H:i:s'),“完成写入文件”,下线;
echo“文件已在”getcwd(),EOL中创建;

我自己想办法-

实际上,在列合并的情况下,我们实际上不需要迭代。假设我想从列
A1
合并到
E1

因此,不必一个接一个地循环,而是可以很容易地通过-

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

所以在我的例子中,我首先需要找到最后一个元素和第一个元素,然后简单地放入mergeCells()中方法使其工作。

当您尝试在循环中合并两个单元格时,会发生此问题。原因不是您正在迭代的循环,而是您正在传递的列名。如果您传递了错误的列名,则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
}