Performance improvement for readers that reduces overheads when setting titles in multi-worksheet workbooks, by avoiding re-iterating through all worksheet/cells whenever a sheet title is set
git-svn-id: https://phpexcel.svn.codeplex.com/svn/trunk@83603 2327b42d-5241-43d6-9e2a-de5ac946f064
This commit is contained in:
parent
c345c0e8ca
commit
5fb3ffceb0
|
@ -571,7 +571,10 @@ class PHPExcel_Reader_Excel2003XML implements PHPExcel_Reader_IReader
|
||||||
$objPHPExcel->setActiveSheetIndex($worksheetID);
|
$objPHPExcel->setActiveSheetIndex($worksheetID);
|
||||||
if (isset($worksheet_ss['Name'])) {
|
if (isset($worksheet_ss['Name'])) {
|
||||||
$worksheetName = self::_convertStringEncoding((string) $worksheet_ss['Name'],$this->_charSet);
|
$worksheetName = self::_convertStringEncoding((string) $worksheet_ss['Name'],$this->_charSet);
|
||||||
$objPHPExcel->getActiveSheet()->setTitle($worksheetName);
|
// Use false for $updateFormulaCellReferences to prevent adjustment of worksheet references in
|
||||||
|
// formula cells... during the load, all formulae should be correct, and we're simply bringing
|
||||||
|
// the worksheet name in line with the formula, not the reverse
|
||||||
|
$objPHPExcel->getActiveSheet()->setTitle($worksheetName,false);
|
||||||
}
|
}
|
||||||
|
|
||||||
$columnID = 'A';
|
$columnID = 'A';
|
||||||
|
|
|
@ -622,7 +622,11 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
|
||||||
|
|
||||||
// Load sheet
|
// Load sheet
|
||||||
$docSheet = $excel->createSheet();
|
$docSheet = $excel->createSheet();
|
||||||
$docSheet->setTitle((string) $eleSheet["name"]);
|
// Use false for $updateFormulaCellReferences to prevent adjustment of worksheet
|
||||||
|
// references in formula cells... during the load, all formulae should be correct,
|
||||||
|
// and we're simply bringing the worksheet name in line with the formula, not the
|
||||||
|
// reverse
|
||||||
|
$docSheet->setTitle((string) $eleSheet["name"],false);
|
||||||
$fileWorksheet = $worksheets[(string) self::array_item($eleSheet->attributes("http://schemas.openxmlformats.org/officeDocument/2006/relationships"), "id")];
|
$fileWorksheet = $worksheets[(string) self::array_item($eleSheet->attributes("http://schemas.openxmlformats.org/officeDocument/2006/relationships"), "id")];
|
||||||
$xmlSheet = simplexml_load_string($this->_getFromZipArchive($zip, "$dir/$fileWorksheet")); //~ http://schemas.openxmlformats.org/spreadsheetml/2006/main");
|
$xmlSheet = simplexml_load_string($this->_getFromZipArchive($zip, "$dir/$fileWorksheet")); //~ http://schemas.openxmlformats.org/spreadsheetml/2006/main");
|
||||||
|
|
||||||
|
|
|
@ -727,7 +727,10 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
|
||||||
|
|
||||||
// add sheet to PHPExcel object
|
// add sheet to PHPExcel object
|
||||||
$this->_phpSheet = $this->_phpExcel->createSheet();
|
$this->_phpSheet = $this->_phpExcel->createSheet();
|
||||||
$this->_phpSheet->setTitle($sheet['name']);
|
// Use false for $updateFormulaCellReferences to prevent adjustment of worksheet references in formula
|
||||||
|
// cells... during the load, all formulae should be correct, and we're simply bringing the worksheet
|
||||||
|
// name in line with the formula, not the reverse
|
||||||
|
$this->_phpSheet->setTitle($sheet['name'],false);
|
||||||
$this->_phpSheet->setSheetState($sheet['sheetState']);
|
$this->_phpSheet->setSheetState($sheet['sheetState']);
|
||||||
|
|
||||||
$this->_pos = $sheet['offset'];
|
$this->_pos = $sheet['offset'];
|
||||||
|
|
|
@ -414,7 +414,10 @@ class PHPExcel_Reader_Gnumeric implements PHPExcel_Reader_IReader
|
||||||
// Create new Worksheet
|
// Create new Worksheet
|
||||||
$objPHPExcel->createSheet();
|
$objPHPExcel->createSheet();
|
||||||
$objPHPExcel->setActiveSheetIndex($worksheetID);
|
$objPHPExcel->setActiveSheetIndex($worksheetID);
|
||||||
$objPHPExcel->getActiveSheet()->setTitle($worksheetName);
|
// Use false for $updateFormulaCellReferences to prevent adjustment of worksheet references in formula
|
||||||
|
// cells... during the load, all formulae should be correct, and we're simply bringing the worksheet
|
||||||
|
// name in line with the formula, not the reverse
|
||||||
|
$objPHPExcel->getActiveSheet()->setTitle($worksheetName,false);
|
||||||
|
|
||||||
if ((!$this->_readDataOnly) && (isset($sheet->PrintInformation))) {
|
if ((!$this->_readDataOnly) && (isset($sheet->PrintInformation))) {
|
||||||
if (isset($sheet->PrintInformation->Margins)) {
|
if (isset($sheet->PrintInformation->Margins)) {
|
||||||
|
|
|
@ -396,7 +396,10 @@ class PHPExcel_Reader_OOCalc implements PHPExcel_Reader_IReader
|
||||||
$objPHPExcel->setActiveSheetIndex($worksheetID);
|
$objPHPExcel->setActiveSheetIndex($worksheetID);
|
||||||
if (isset($worksheetDataAttributes['name'])) {
|
if (isset($worksheetDataAttributes['name'])) {
|
||||||
$worksheetName = (string) $worksheetDataAttributes['name'];
|
$worksheetName = (string) $worksheetDataAttributes['name'];
|
||||||
$objPHPExcel->getActiveSheet()->setTitle($worksheetName);
|
// Use false for $updateFormulaCellReferences to prevent adjustment of worksheet references in
|
||||||
|
// formula cells... during the load, all formulae should be correct, and we're simply
|
||||||
|
// bringing the worksheet name in line with the formula, not the reverse
|
||||||
|
$objPHPExcel->getActiveSheet()->setTitle($worksheetName,false);
|
||||||
}
|
}
|
||||||
|
|
||||||
$rowID = 1;
|
$rowID = 1;
|
||||||
|
|
|
@ -644,9 +644,14 @@ class PHPExcel_Worksheet implements PHPExcel_IComparable
|
||||||
* Set title
|
* Set title
|
||||||
*
|
*
|
||||||
* @param string $pValue String containing the dimension of this worksheet
|
* @param string $pValue String containing the dimension of this worksheet
|
||||||
|
* @param string $updateFormulaCellReferences boolean Flag indicating whether cell references in formulae should
|
||||||
|
* be updated to reflect the new sheet name.
|
||||||
|
* This should be left as the default true, unless you are
|
||||||
|
* certain that no formula cells on any worksheet contain
|
||||||
|
* references to this worksheet
|
||||||
* @return PHPExcel_Worksheet
|
* @return PHPExcel_Worksheet
|
||||||
*/
|
*/
|
||||||
public function setTitle($pValue = 'Worksheet')
|
public function setTitle($pValue = 'Worksheet', $updateFormulaCellReferences = true)
|
||||||
{
|
{
|
||||||
// Is this a 'rename' or not?
|
// Is this a 'rename' or not?
|
||||||
if ($this->getTitle() == $pValue) {
|
if ($this->getTitle() == $pValue) {
|
||||||
|
@ -690,7 +695,8 @@ class PHPExcel_Worksheet implements PHPExcel_IComparable
|
||||||
|
|
||||||
// New title
|
// New title
|
||||||
$newTitle = $this->getTitle();
|
$newTitle = $this->getTitle();
|
||||||
PHPExcel_ReferenceHelper::getInstance()->updateNamedFormulas($this->getParent(), $oldTitle, $newTitle);
|
if ($updateFormulaCellReferences)
|
||||||
|
PHPExcel_ReferenceHelper::getInstance()->updateNamedFormulas($this->getParent(), $oldTitle, $newTitle);
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
@ -2260,7 +2266,6 @@ class PHPExcel_Worksheet implements PHPExcel_IComparable
|
||||||
// Identify the range that we need to extract from the worksheet
|
// Identify the range that we need to extract from the worksheet
|
||||||
$maxCol = $this->getHighestColumn();
|
$maxCol = $this->getHighestColumn();
|
||||||
$maxRow = $this->getHighestRow();
|
$maxRow = $this->getHighestRow();
|
||||||
|
|
||||||
// Return
|
// Return
|
||||||
return $this->rangeToArray( 'A1:'.$maxCol.$maxRow,
|
return $this->rangeToArray( 'A1:'.$maxCol.$maxRow,
|
||||||
$nullValue, $calculateFormulas, $formatData, $returnCellRef);
|
$nullValue, $calculateFormulas, $formatData, $returnCellRef);
|
||||||
|
@ -2269,10 +2274,11 @@ class PHPExcel_Worksheet implements PHPExcel_IComparable
|
||||||
/**
|
/**
|
||||||
* Get row iterator
|
* Get row iterator
|
||||||
*
|
*
|
||||||
|
* @param integer $startRow The row number at which to start iterating
|
||||||
* @return PHPExcel_Worksheet_RowIterator
|
* @return PHPExcel_Worksheet_RowIterator
|
||||||
*/
|
*/
|
||||||
public function getRowIterator() {
|
public function getRowIterator($startRow = 1) {
|
||||||
return new PHPExcel_Worksheet_RowIterator($this);
|
return new PHPExcel_Worksheet_RowIterator($this,$startRow);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue