如何在用php整合的Excel文件中填充空行?
我有这段代码,它允许我读取包含合并单元格和未合并单元格的xlsx文件,以便能够处理它们。 xlsx未合并文件如下所示: 我想把空行填成这样: 每次“样式”值更改时,空单元格都会被上面行的值填充。 我尝试了使用如何在用php整合的Excel文件中填充空行?,php,excel,phpexcel,Php,Excel,Phpexcel,我有这段代码,它允许我读取包含合并单元格和未合并单元格的xlsx文件,以便能够处理它们。 xlsx未合并文件如下所示: 我想把空行填成这样: 每次“样式”值更改时,空单元格都会被上面行的值填充。 我尝试了使用foreach($sheet->getMergeCells()作为$cells){$sheet->setCellValue($cells);}但它不起作用 我如何解决我的问题 <?php //uploaded xlsx file recovery $xlsx="C:/w
foreach($sheet->getMergeCells()作为$cells){$sheet->setCellValue($cells);}
但它不起作用
我如何解决我的问题
<?php
//uploaded xlsx file recovery
$xlsx="C:/wamp64/www/Extract_pictures_Excel/xlsx_files/".date('Y_m_d H-i-s')."_file.xlsx";
move_uploaded_file($_FILES["mon_fichier"]["tmp_name"],$xlsx);
require_once 'PHPExcel/Classes/PHPExcel/IOFactory.php';
$objPHPExcel = PHPExcel_IOFactory::load($xlsx);
//reading the xlsx file
$sheet = $objPHPExcel->getActiveSheet();
echo 'before unmerge: ', count($sheet->getMergeCells()), PHP_EOL;
foreach($sheet->getMergeCells() as $cells)
{
$sheet->unmergeCells($cells);
foreach($sheet->getMergeCells() as $cells)
{
$sheet->setCellValue($cells);
}
}
echo 'after unmerge: ', count($sheet->getMergeCells()), PHP_EOL;
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
$objWriter->save('./unmerged_files/unmerged.xlsx');
?>
获取范围的第一个单元格的值。因为它是一个二维数组,所以我们可以通过
[0][0]
获取第一个元素
然后我们通过将last param设置为true来获得所有单元格,最重要的是CellReference。这将使二维数组的第一个键为行键,第二个键为列键
有了这些数据和值,我们可以取消单元格合并,并使用相同的值设置范围内的所有单元格
$row = 0;
$skipRows = [1, 3];
foreach($sheet->getMergeCells() as $range) {
$value = $sheet->rangeToArray($range)[0][0];
$cells = $sheet->rangeToArray($range, null, true, true, true);
$sheet->unmergeCells($range);
if(in_array(++$row, $skipRows)) continue;
if(!$value) continue;
foreach($cells as $row => $columns) {
foreach(array_keys($columns) as $column) {
$sheet->setCellValue("$column$row", $value);
}
}
}
使用此伪代码(!)
foreach($sheet->getMergeCells()作为$range){$value=getvaluefromrrange($range);$sheet->unmergeCells($range);foreach($range作为$cell)$sheet->setCellValue($cell,$value);}
这不是真正的代码,但是一个算法需要做什么。我用文档的语法更改了代码,但是对于第二个foreach,我有:“警告:为foreach()提供的参数无效”。我使用了$value=$sheet->rangtoarray($range)代码>它返回一个二维数组!你需要仔细阅读这些文件。要获得它,请使用$value=$sheet->rangeToArray($range)[0][0]代码>例如。好的,谢谢,我修改了它,在文档中它与硬单元一起使用,例如“C3:E5”,我没有很好地理解。但我的问题仍然存在…您应该使用调试器来了解发生了什么。非常感谢您的精确解释,它工作得非常完美!只是一个小细节,因为标题是在一个合并的单元格中,它会在我的xlsx文件的所有第一个单元格中复制自己,如下所示:日期相同,非常完美,非常感谢,第一行现在保持不变。我刚刚看到文件末尾的日期也是重复的,但是忽略它会更复杂,不是吗?当然,只要比较一下它是否包含“截至的数据”。很好,我添加了这个修改,它工作得很好!