如何填充 php 中隐藏的 Excel 文件中的空行?
How to fill empty lines in an Excel file ummerged in php?
我有这段代码可以让我读取包含合并单元格的 xlsx 文件并取消合并它们以便能够处理它们。
xlsx 未合并的文件是这样的:
而且我希望像这样填充空行:
每次 'Style' 值更改时,空单元格将填充上面各行的值。
我试过 foreach($sheet->getMergeCells() as $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]
.
得到第一个元素
然后我们通过将最后一个参数设置为 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);
}
}
}
我有这段代码可以让我读取包含合并单元格的 xlsx 文件并取消合并它们以便能够处理它们。
xlsx 未合并的文件是这样的:
而且我希望像这样填充空行:
每次 'Style' 值更改时,空单元格将填充上面各行的值。
我试过 foreach($sheet->getMergeCells() as $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]
.
然后我们通过将最后一个参数设置为 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);
}
}
}