来自自定义单元格的PHPExcel循环SetCellValue

时间:2015-12-09 10:16:23

标签: php phpexcel

我需要从Cell V1循环到DATE的Cell HA1自定义时段。这是一种手动方式:

$objPHPExcel->getActiveSheet()->SetCellValue('V1', '2015-11-29');
$objPHPExcel->getActiveSheet()->SetCellValue('W1', '2015-11-30');
$objPHPExcel->getActiveSheet()->SetCellValue('X1', '2015-12-01');
$objPHPExcel->getActiveSheet()->SetCellValue('Y1', '2015-12-02');
$objPHPExcel->getActiveSheet()->SetCellValue('Z1', '2015-12-03');
$objPHPExcel->getActiveSheet()->SetCellValue('AA1', '2015-12-04');

但这显然代码太多了。并注意我不能使用任何其他功能,然后使用SetCellValue,因为在那之前还有20个单元格值。 我需要将日期从CELL V1 2015-11-29循环到CELL HA1 2016-06-04我该怎么做?

1 个答案:

答案 0 :(得分:1)

这不是特别的PHPExcel方法,只是循环的标准PHP方法

您只需要创建从列V到列HA的循环,并在每次迭代时递增列地址和日期值

$startColumn = 'V';
$endColumn = 'HA';

$date = new DateTime('2015-11-29');
$interval = new DateInterval('P1D');

$endColumn++;
for($column = $startColumn; $column !== $endColumn; $column++) {
    $objPHPExcel->getActiveSheet()
        ->SetCellValue($column.'1', $date->format('Y-m-d'));
    $date->add($interval);
}

但是,您应该使用MS序列化日期/时间值作为日期,并设置格式化掩码以将值显示为日期:

$startColumn = 'V';
$endColumn = 'HA';
$lastColumn = $endColumn;

$date = new DateTime('2015-11-29');
$interval = new DateInterval('P1D');

$endColumn++;
for($column = $startColumn; $column !== $endColumn; $column++) {
    $objPHPExcel->getActiveSheet()
        ->SetCellValue(
            $column.'1',
            PHPExcel_Shared_Date::PHPToExcel($date)
        );
    $date->add($interval);
}
$objPHPExcel->getActiveSheet()
    ->getStyle($startColumn.'1:'.$lastColumn.'1')
    ->getNumberFormat()
    ->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDD2);