Skip to content

Commit dc82062

Browse files
committed
Add method deleteRow
1 parent c05e68c commit dc82062

File tree

4 files changed

+24
-0
lines changed

4 files changed

+24
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ try {
9393
$xlsxFastEditor->setFullCalcOnLoad($worksheetId2, true);
9494

9595
// Direct write access
96+
$xlsxFastEditor->deleteRow($worksheetId1, 5);
9697
$xlsxFastEditor->writeFormula($worksheetId1, 'A1', '=B2*3');
9798
$xlsxFastEditor->writeFloat($worksheetId1, 'B2', 3.14);
9899
$xlsxFastEditor->writeInt($worksheetId1, 'C3', 13);

src/XlsxFastEditor.php

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,27 @@ public function getLastRow(int $sheetNumber): ?XlsxFastEditorRow
261261
return null;
262262
}
263263

264+
/**
265+
* Delete the specified row of the specified worksheet.
266+
* @param int $sheetNumber Worksheet number (base 1)
267+
*/
268+
public function deleteRow(int $sheetNumber, int $rowNumber): bool
269+
{
270+
$dom = $this->getDomFromPath(self::getWorksheetPath($sheetNumber));
271+
$xpath = new \DOMXPath($dom);
272+
$xpath->registerNamespace('o', self::OXML_NAMESPACE);
273+
274+
$rs = $xpath->query("/o:worksheet/o:sheetData/o:row[@r='{$rowNumber}'][1]");
275+
if ($rs !== false && $rs->length > 0) {
276+
$r = $rs[0];
277+
if (!($r instanceof \DOMElement) || $r->parentNode === null) {
278+
throw new XlsxFastEditorXmlException("Error querying XML fragment for row {$sheetNumber} of worksheet {$sheetNumber}!");
279+
}
280+
return $r->parentNode->removeChild($r) != false;
281+
}
282+
return false;
283+
}
284+
264285
/**
265286
* To iterate over the all the rows of a given worksheet.
266287
* @return \Traversable<XlsxFastEditorRow>

tests/test.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
$sheet1 = $xlsxFastEditor->getWorksheetNumber('Sheet1');
2121
assert($sheet1 === 1);
2222

23+
assert($xlsxFastEditor->deleteRow($sheet1, 5) === true);
24+
2325
assert($xlsxFastEditor->readFloat($sheet1, 'D2') === 3.14159);
2426
assert($xlsxFastEditor->readFloat($sheet1, 'D4') === -1.0);
2527
assert($xlsxFastEditor->readFloat($sheet1, 'e5') === null);

tests/test.xlsx

69 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)