Beispiel #1
0
 private static function couponFirstPeriodDate($settlement, $maturity, $frequency, $next)
 {
     $months = 12 / $frequency;
     $result = \PHPExcel\Shared\Date::excelToPHPObject($maturity);
     $eom = self::isLastDayOfMonth($result);
     while ($settlement < \PHPExcel\Shared\Date::PHPToExcel($result)) {
         $result->modify('-' . $months . ' months');
     }
     if ($next) {
         $result->modify('+' . $months . ' months');
     }
     if ($eom) {
         $result->modify('-1 day');
     }
     return \PHPExcel\Shared\Date::PHPToExcel($result);
 }
 /**
  * Loads PHPExcel from file into PHPExcel instance
  *
  * @param     string         $pFilename
  * @param    PHPExcel    $objPHPExcel
  * @return     PHPExcel
  * @throws     Exception
  */
 public function loadIntoExisting($pFilename, PHPExcel $objPHPExcel)
 {
     $fromFormats = array('\\-', '\\ ');
     $toFormats = array('-', ' ');
     $underlineStyles = array(\PHPExcel\Style\Font::UNDERLINE_NONE, \PHPExcel\Style\Font::UNDERLINE_DOUBLE, \PHPExcel\Style\Font::UNDERLINE_DOUBLEACCOUNTING, \PHPExcel\Style\Font::UNDERLINE_SINGLE, \PHPExcel\Style\Font::UNDERLINE_SINGLEACCOUNTING);
     $verticalAlignmentStyles = array(\PHPExcel\Style\Alignment::VERTICAL_BOTTOM, \PHPExcel\Style\Alignment::VERTICAL_TOP, \PHPExcel\Style\Alignment::VERTICAL_CENTER, \PHPExcel\Style\Alignment::VERTICAL_JUSTIFY);
     $horizontalAlignmentStyles = array(\PHPExcel\Style\Alignment::HORIZONTAL_GENERAL, \PHPExcel\Style\Alignment::HORIZONTAL_LEFT, \PHPExcel\Style\Alignment::HORIZONTAL_RIGHT, \PHPExcel\Style\Alignment::HORIZONTAL_CENTER, \PHPExcel\Style\Alignment::HORIZONTAL_CENTER_CONTINUOUS, \PHPExcel\Style\Alignment::HORIZONTAL_JUSTIFY);
     $timezoneObj = new \DateTimeZone('Europe/London');
     $GMT = new \DateTimeZone('UTC');
     // Check if file exists
     if (!file_exists($pFilename)) {
         throw new Exception("Could not open " . $pFilename . " for reading! File does not exist.");
     }
     if (!$this->canRead($pFilename)) {
         throw new Exception($pFilename . " is an Invalid Spreadsheet file.");
     }
     $xml = simplexml_load_string($this->securityScan(file_get_contents($pFilename)), 'SimpleXMLElement', \PHPExcel\Settings::getLibXmlLoaderOptions());
     $namespaces = $xml->getNamespaces(true);
     $docProps = $objPHPExcel->getProperties();
     if (isset($xml->DocumentProperties[0])) {
         foreach ($xml->DocumentProperties[0] as $propertyName => $propertyValue) {
             switch ($propertyName) {
                 case 'Title':
                     $docProps->setTitle(self::convertStringEncoding($propertyValue, $this->charSet));
                     break;
                 case 'Subject':
                     $docProps->setSubject(self::convertStringEncoding($propertyValue, $this->charSet));
                     break;
                 case 'Author':
                     $docProps->setCreator(self::convertStringEncoding($propertyValue, $this->charSet));
                     break;
                 case 'Created':
                     $creationDate = strtotime($propertyValue);
                     $docProps->setCreated($creationDate);
                     break;
                 case 'LastAuthor':
                     $docProps->setLastModifiedBy(self::convertStringEncoding($propertyValue, $this->charSet));
                     break;
                 case 'LastSaved':
                     $lastSaveDate = strtotime($propertyValue);
                     $docProps->setModified($lastSaveDate);
                     break;
                 case 'Company':
                     $docProps->setCompany(self::convertStringEncoding($propertyValue, $this->charSet));
                     break;
                 case 'Category':
                     $docProps->setCategory(self::convertStringEncoding($propertyValue, $this->charSet));
                     break;
                 case 'Manager':
                     $docProps->setManager(self::convertStringEncoding($propertyValue, $this->charSet));
                     break;
                 case 'Keywords':
                     $docProps->setKeywords(self::convertStringEncoding($propertyValue, $this->charSet));
                     break;
                 case 'Description':
                     $docProps->setDescription(self::convertStringEncoding($propertyValue, $this->charSet));
                     break;
             }
         }
     }
     if (isset($xml->CustomDocumentProperties)) {
         foreach ($xml->CustomDocumentProperties[0] as $propertyName => $propertyValue) {
             $propertyAttributes = $propertyValue->attributes($namespaces['dt']);
             $propertyName = preg_replace_callback('/_x([0-9a-z]{4})_/', '\\PHPExcel\\Reader\\Excel2003XML::hex2str', $propertyName);
             $propertyType = \PHPExcel\Document\Properties::PROPERTY_TYPE_UNKNOWN;
             switch ((string) $propertyAttributes) {
                 case 'string':
                     $propertyType = \PHPExcel\Document\Properties::PROPERTY_TYPE_STRING;
                     $propertyValue = trim($propertyValue);
                     break;
                 case 'boolean':
                     $propertyType = \PHPExcel\Document\Properties::PROPERTY_TYPE_BOOLEAN;
                     $propertyValue = (bool) $propertyValue;
                     break;
                 case 'integer':
                     $propertyType = \PHPExcel\Document\Properties::PROPERTY_TYPE_INTEGER;
                     $propertyValue = intval($propertyValue);
                     break;
                 case 'float':
                     $propertyType = \PHPExcel\Document\Properties::PROPERTY_TYPE_FLOAT;
                     $propertyValue = floatval($propertyValue);
                     break;
                 case 'dateTime.tz':
                     $propertyType = \PHPExcel\Document\Properties::PROPERTY_TYPE_DATE;
                     $propertyValue = strtotime(trim($propertyValue));
                     break;
             }
             $docProps->setCustomProperty($propertyName, $propertyValue, $propertyType);
         }
     }
     foreach ($xml->Styles[0] as $style) {
         $style_ss = $style->attributes($namespaces['ss']);
         $styleID = (string) $style_ss['ID'];
         //            echo 'Style ID = '.$styleID.'<br />';
         $this->styles[$styleID] = isset($this->styles['Default']) ? $this->styles['Default'] : array();
         foreach ($style as $styleType => $styleData) {
             $styleAttributes = $styleData->attributes($namespaces['ss']);
             //                echo $styleType.'<br />';
             switch ($styleType) {
                 case 'Alignment':
                     foreach ($styleAttributes as $styleAttributeKey => $styleAttributeValue) {
                         //                                echo $styleAttributeKey.' = '.$styleAttributeValue.'<br />';
                         $styleAttributeValue = (string) $styleAttributeValue;
                         switch ($styleAttributeKey) {
                             case 'Vertical':
                                 if (self::identifyFixedStyleValue($verticalAlignmentStyles, $styleAttributeValue)) {
                                     $this->styles[$styleID]['alignment']['vertical'] = $styleAttributeValue;
                                 }
                                 break;
                             case 'Horizontal':
                                 if (self::identifyFixedStyleValue($horizontalAlignmentStyles, $styleAttributeValue)) {
                                     $this->styles[$styleID]['alignment']['horizontal'] = $styleAttributeValue;
                                 }
                                 break;
                             case 'WrapText':
                                 $this->styles[$styleID]['alignment']['wrap'] = true;
                                 break;
                         }
                     }
                     break;
                 case 'Borders':
                     foreach ($styleData->Border as $borderStyle) {
                         $borderAttributes = $borderStyle->attributes($namespaces['ss']);
                         $thisBorder = array();
                         foreach ($borderAttributes as $borderStyleKey => $borderStyleValue) {
                             //                                    echo $borderStyleKey.' = '.$borderStyleValue.'<br />';
                             switch ($borderStyleKey) {
                                 case 'LineStyle':
                                     $thisBorder['style'] = \PHPExcel\Style\Border::BORDER_MEDIUM;
                                     //                                                $thisBorder['style'] = $borderStyleValue;
                                     break;
                                 case 'Weight':
                                     //                                                $thisBorder['style'] = $borderStyleValue;
                                     break;
                                 case 'Position':
                                     $borderPosition = strtolower($borderStyleValue);
                                     break;
                                 case 'Color':
                                     $borderColour = substr($borderStyleValue, 1);
                                     $thisBorder['color']['rgb'] = $borderColour;
                                     break;
                             }
                         }
                         if (!empty($thisBorder)) {
                             if ($borderPosition == 'left' || $borderPosition == 'right' || $borderPosition == 'top' || $borderPosition == 'bottom') {
                                 $this->styles[$styleID]['borders'][$borderPosition] = $thisBorder;
                             }
                         }
                     }
                     break;
                 case 'Font':
                     foreach ($styleAttributes as $styleAttributeKey => $styleAttributeValue) {
                         //                                echo $styleAttributeKey.' = '.$styleAttributeValue.'<br />';
                         $styleAttributeValue = (string) $styleAttributeValue;
                         switch ($styleAttributeKey) {
                             case 'FontName':
                                 $this->styles[$styleID]['font']['name'] = $styleAttributeValue;
                                 break;
                             case 'Size':
                                 $this->styles[$styleID]['font']['size'] = $styleAttributeValue;
                                 break;
                             case 'Color':
                                 $this->styles[$styleID]['font']['color']['rgb'] = substr($styleAttributeValue, 1);
                                 break;
                             case 'Bold':
                                 $this->styles[$styleID]['font']['bold'] = true;
                                 break;
                             case 'Italic':
                                 $this->styles[$styleID]['font']['italic'] = true;
                                 break;
                             case 'Underline':
                                 if (self::identifyFixedStyleValue($underlineStyles, $styleAttributeValue)) {
                                     $this->styles[$styleID]['font']['underline'] = $styleAttributeValue;
                                 }
                                 break;
                         }
                     }
                     break;
                 case 'Interior':
                     foreach ($styleAttributes as $styleAttributeKey => $styleAttributeValue) {
                         //                                echo $styleAttributeKey.' = '.$styleAttributeValue.'<br />';
                         switch ($styleAttributeKey) {
                             case 'Color':
                                 $this->styles[$styleID]['fill']['color']['rgb'] = substr($styleAttributeValue, 1);
                                 break;
                         }
                     }
                     break;
                 case 'NumberFormat':
                     foreach ($styleAttributes as $styleAttributeKey => $styleAttributeValue) {
                         //                                echo $styleAttributeKey.' = '.$styleAttributeValue.'<br />';
                         $styleAttributeValue = str_replace($fromFormats, $toFormats, $styleAttributeValue);
                         switch ($styleAttributeValue) {
                             case 'Short Date':
                                 $styleAttributeValue = 'dd/mm/yyyy';
                                 break;
                         }
                         if ($styleAttributeValue > '') {
                             $this->styles[$styleID]['numberformat']['code'] = $styleAttributeValue;
                         }
                     }
                     break;
                 case 'Protection':
                     foreach ($styleAttributes as $styleAttributeKey => $styleAttributeValue) {
                         //                                echo $styleAttributeKey.' = '.$styleAttributeValue.'<br />';
                     }
                     break;
             }
         }
         //            print_r($this->styles[$styleID]);
         //            echo '<hr />';
     }
     //        echo '<hr />';
     $worksheetID = 0;
     $xml_ss = $xml->children($namespaces['ss']);
     foreach ($xml_ss->Worksheet as $worksheet) {
         $worksheet_ss = $worksheet->attributes($namespaces['ss']);
         if (isset($this->loadSheetsOnly) && isset($worksheet_ss['Name']) && !in_array($worksheet_ss['Name'], $this->loadSheetsOnly)) {
             continue;
         }
         //            echo '<h3>Worksheet: ', $worksheet_ss['Name'],'<h3>';
         //
         // Create new Worksheet
         $objPHPExcel->createSheet();
         $objPHPExcel->setActiveSheetIndex($worksheetID);
         if (isset($worksheet_ss['Name'])) {
             $worksheetName = self::convertStringEncoding((string) $worksheet_ss['Name'], $this->charSet);
             //    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';
         if (isset($worksheet->Table->Column)) {
             foreach ($worksheet->Table->Column as $columnData) {
                 $columnData_ss = $columnData->attributes($namespaces['ss']);
                 if (isset($columnData_ss['Index'])) {
                     $columnID = \PHPExcel\Cell::stringFromColumnIndex($columnData_ss['Index'] - 1);
                 }
                 if (isset($columnData_ss['Width'])) {
                     $columnWidth = $columnData_ss['Width'];
                     //                        echo '<b>Setting column width for '.$columnID.' to '.$columnWidth.'</b><br />';
                     $objPHPExcel->getActiveSheet()->getColumnDimension($columnID)->setWidth($columnWidth / 5.4);
                 }
                 ++$columnID;
             }
         }
         $rowID = 1;
         if (isset($worksheet->Table->Row)) {
             $additionalMergedCells = 0;
             foreach ($worksheet->Table->Row as $rowData) {
                 $rowHasData = false;
                 $row_ss = $rowData->attributes($namespaces['ss']);
                 if (isset($row_ss['Index'])) {
                     $rowID = (int) $row_ss['Index'];
                 }
                 //                    echo '<b>Row '.$rowID.'</b><br />';
                 $columnID = 'A';
                 foreach ($rowData->Cell as $cell) {
                     $cell_ss = $cell->attributes($namespaces['ss']);
                     if (isset($cell_ss['Index'])) {
                         $columnID = \PHPExcel\Cell::stringFromColumnIndex($cell_ss['Index'] - 1);
                     }
                     $cellRange = $columnID . $rowID;
                     if ($this->getReadFilter() !== null) {
                         if (!$this->getReadFilter()->readCell($columnID, $rowID, $worksheetName)) {
                             continue;
                         }
                     }
                     if (isset($cell_ss['MergeAcross']) || isset($cell_ss['MergeDown'])) {
                         $columnTo = $columnID;
                         if (isset($cell_ss['MergeAcross'])) {
                             $additionalMergedCells += (int) $cell_ss['MergeAcross'];
                             $columnTo = \PHPExcel\Cell::stringFromColumnIndex(\PHPExcel\Cell::columnIndexFromString($columnID) + $cell_ss['MergeAcross'] - 1);
                         }
                         $rowTo = $rowID;
                         if (isset($cell_ss['MergeDown'])) {
                             $rowTo = $rowTo + $cell_ss['MergeDown'];
                         }
                         $cellRange .= ':' . $columnTo . $rowTo;
                         $objPHPExcel->getActiveSheet()->mergeCells($cellRange);
                     }
                     $cellIsSet = $hasCalculatedValue = false;
                     $cellDataFormula = '';
                     if (isset($cell_ss['Formula'])) {
                         $cellDataFormula = $cell_ss['Formula'];
                         // added this as a check for array formulas
                         if (isset($cell_ss['ArrayRange'])) {
                             $cellDataCSEFormula = $cell_ss['ArrayRange'];
                             //                                echo "found an array formula at ".$columnID.$rowID."<br />";
                         }
                         $hasCalculatedValue = true;
                     }
                     if (isset($cell->Data)) {
                         $cellValue = $cellData = $cell->Data;
                         $type = \PHPExcel\Cell_DataType::TYPE_NULL;
                         $cellData_ss = $cellData->attributes($namespaces['ss']);
                         if (isset($cellData_ss['Type'])) {
                             $cellDataType = $cellData_ss['Type'];
                             switch ($cellDataType) {
                                 /*
                                 const TYPE_STRING        = 's';
                                 const TYPE_FORMULA        = 'f';
                                 const TYPE_NUMERIC        = 'n';
                                 const TYPE_BOOL            = 'b';
                                 const TYPE_NULL            = 'null';
                                 const TYPE_INLINE        = 'inlineStr';
                                 const TYPE_ERROR        = 'e';
                                 */
                                 case 'String':
                                     $cellValue = self::convertStringEncoding($cellValue, $this->charSet);
                                     $type = \PHPExcel\Cell\DataType::TYPE_STRING;
                                     break;
                                 case 'Number':
                                     $type = \PHPExcel\Cell\DataType::TYPE_NUMERIC;
                                     $cellValue = (double) $cellValue;
                                     if (floor($cellValue) == $cellValue) {
                                         $cellValue = (int) $cellValue;
                                     }
                                     break;
                                 case 'Boolean':
                                     $type = \PHPExcel\Cell\DataType::TYPE_BOOL;
                                     $cellValue = $cellValue != 0;
                                     break;
                                 case 'DateTime':
                                     $type = \PHPExcel\Cell\DataType::TYPE_NUMERIC;
                                     $cellValue = \PHPExcel\Shared\Date::PHPToExcel(strtotime($cellValue));
                                     break;
                                 case 'Error':
                                     $type = \PHPExcel\Cell\DataType::TYPE_ERROR;
                                     break;
                             }
                         }
                         if ($hasCalculatedValue) {
                             //                                echo 'FORMULA<br />';
                             $type = \PHPExcel\Cell\DataType::TYPE_FORMULA;
                             $columnNumber = \PHPExcel\Cell::columnIndexFromString($columnID);
                             if (substr($cellDataFormula, 0, 3) == 'of:') {
                                 $cellDataFormula = substr($cellDataFormula, 3);
                                 //                                    echo 'Before: ', $cellDataFormula,'<br />';
                                 $temp = explode('"', $cellDataFormula);
                                 $key = false;
                                 foreach ($temp as &$value) {
                                     //    Only replace in alternate array entries (i.e. non-quoted blocks)
                                     if ($key = !$key) {
                                         $value = str_replace(array('[.', '.', ']'), '', $value);
                                     }
                                 }
                             } else {
                                 //    Convert R1C1 style references to A1 style references (but only when not quoted)
                                 //                                    echo 'Before: ', $cellDataFormula,'<br />';
                                 $temp = explode('"', $cellDataFormula);
                                 $key = false;
                                 foreach ($temp as &$value) {
                                     //    Only replace in alternate array entries (i.e. non-quoted blocks)
                                     if ($key = !$key) {
                                         preg_match_all('/(R(\\[?-?\\d*\\]?))(C(\\[?-?\\d*\\]?))/', $value, $cellReferences, PREG_SET_ORDER + PREG_OFFSET_CAPTURE);
                                         //    Reverse the matches array, otherwise all our offsets will become incorrect if we modify our way
                                         //        through the formula from left to right. Reversing means that we work right to left.through
                                         //        the formula
                                         $cellReferences = array_reverse($cellReferences);
                                         //    Loop through each R1C1 style reference in turn, converting it to its A1 style equivalent,
                                         //        then modify the formula to use that new reference
                                         foreach ($cellReferences as $cellReference) {
                                             $rowReference = $cellReference[2][0];
                                             //    Empty R reference is the current row
                                             if ($rowReference == '') {
                                                 $rowReference = $rowID;
                                             }
                                             //    Bracketed R references are relative to the current row
                                             if ($rowReference[0] == '[') {
                                                 $rowReference = $rowID + trim($rowReference, '[]');
                                             }
                                             $columnReference = $cellReference[4][0];
                                             //    Empty C reference is the current column
                                             if ($columnReference == '') {
                                                 $columnReference = $columnNumber;
                                             }
                                             //    Bracketed C references are relative to the current column
                                             if ($columnReference[0] == '[') {
                                                 $columnReference = $columnNumber + trim($columnReference, '[]');
                                             }
                                             $A1CellReference = \PHPExcel\Cell::stringFromColumnIndex($columnReference - 1) . $rowReference;
                                             $value = substr_replace($value, $A1CellReference, $cellReference[0][1], strlen($cellReference[0][0]));
                                         }
                                     }
                                 }
                             }
                             unset($value);
                             //    Then rebuild the formula string
                             $cellDataFormula = implode('"', $temp);
                             //                                echo 'After: ', $cellDataFormula,'<br />';
                         }
                         //                            echo 'Cell '.$columnID.$rowID.' is a '.$type.' with a value of '.(($hasCalculatedValue) ? $cellDataFormula : $cellValue).'<br />';
                         //
                         $objPHPExcel->getActiveSheet()->getCell($columnID . $rowID)->setValueExplicit($hasCalculatedValue ? $cellDataFormula : $cellValue, $type);
                         if ($hasCalculatedValue) {
                             //                                echo 'Formula result is '.$cellValue.'<br />';
                             $objPHPExcel->getActiveSheet()->getCell($columnID . $rowID)->setCalculatedValue($cellValue);
                         }
                         $cellIsSet = $rowHasData = true;
                     }
                     if (isset($cell->Comment)) {
                         //                            echo '<b>comment found</b><br />';
                         $commentAttributes = $cell->Comment->attributes($namespaces['ss']);
                         $author = 'unknown';
                         if (isset($commentAttributes->Author)) {
                             $author = (string) $commentAttributes->Author;
                             //                                echo 'Author: ', $author,'<br />';
                         }
                         $node = $cell->Comment->Data->asXML();
                         //                            $annotation = str_replace('html:','',substr($node,49,-10));
                         //                            echo $annotation,'<br />';
                         $annotation = strip_tags($node);
                         //                            echo 'Annotation: ', $annotation,'<br />';
                         $objPHPExcel->getActiveSheet()->getComment($columnID . $rowID)->setAuthor(self::convertStringEncoding($author, $this->charSet))->setText($this->parseRichText($annotation));
                     }
                     if ($cellIsSet && isset($cell_ss['StyleID'])) {
                         $style = (string) $cell_ss['StyleID'];
                         //                            echo 'Cell style for '.$columnID.$rowID.' is '.$style.'<br />';
                         if (isset($this->styles[$style]) && !empty($this->styles[$style])) {
                             //                                echo 'Cell '.$columnID.$rowID.'<br />';
                             //                                print_r($this->styles[$style]);
                             //                                echo '<br />';
                             if (!$objPHPExcel->getActiveSheet()->cellExists($columnID . $rowID)) {
                                 $objPHPExcel->getActiveSheet()->getCell($columnID . $rowID)->setValue(null);
                             }
                             $objPHPExcel->getActiveSheet()->getStyle($cellRange)->applyFromArray($this->styles[$style]);
                         }
                     }
                     ++$columnID;
                     while ($additionalMergedCells > 0) {
                         ++$columnID;
                         $additionalMergedCells--;
                     }
                 }
                 if ($rowHasData) {
                     if (isset($row_ss['StyleID'])) {
                         $rowStyle = $row_ss['StyleID'];
                     }
                     if (isset($row_ss['Height'])) {
                         $rowHeight = $row_ss['Height'];
                         //                            echo '<b>Setting row height to '.$rowHeight.'</b><br />';
                         $objPHPExcel->getActiveSheet()->getRowDimension($rowID)->setRowHeight($rowHeight);
                     }
                 }
                 ++$rowID;
             }
         }
         ++$worksheetID;
     }
     // Return
     return $objPHPExcel;
 }
Beispiel #3
0
 /**
  *    Convert a dynamic rule daterange to a custom filter range expression for ease of calculation
  *
  *    @param    string                   $dynamicRuleType
  *    @param    AutoFilter\Column        &$filterColumn
  *    @return mixed[]
  */
 private function dynamicFilterDateRange($dynamicRuleType, &$filterColumn)
 {
     $rDateType = \PHPExcel\Calculation\Functions::getReturnDateType();
     \PHPExcel\Calculation\Functions::setReturnDateType(\PHPExcel\Calculation\Functions::RETURNDATE_PHP_NUMERIC);
     $val = $maxVal = null;
     $ruleValues = array();
     $baseDate = \PHPExcel\Calculation\DateTime::DATENOW();
     //    Calculate start/end dates for the required date range based on current date
     switch ($dynamicRuleType) {
         case AutoFilter\Column\Rule::AUTOFILTER_RULETYPE_DYNAMIC_LASTWEEK:
             $baseDate = strtotime('-7 days', $baseDate);
             break;
         case AutoFilter\Column\Rule::AUTOFILTER_RULETYPE_DYNAMIC_NEXTWEEK:
             $baseDate = strtotime('-7 days', $baseDate);
             break;
         case AutoFilter\Column\Rule::AUTOFILTER_RULETYPE_DYNAMIC_LASTMONTH:
             $baseDate = strtotime('-1 month', gmmktime(0, 0, 0, 1, date('m', $baseDate), date('Y', $baseDate)));
             break;
         case AutoFilter\Column\Rule::AUTOFILTER_RULETYPE_DYNAMIC_NEXTMONTH:
             $baseDate = strtotime('+1 month', gmmktime(0, 0, 0, 1, date('m', $baseDate), date('Y', $baseDate)));
             break;
         case AutoFilter\Column\Rule::AUTOFILTER_RULETYPE_DYNAMIC_LASTQUARTER:
             $baseDate = strtotime('-3 month', gmmktime(0, 0, 0, 1, date('m', $baseDate), date('Y', $baseDate)));
             break;
         case AutoFilter\Column\Rule::AUTOFILTER_RULETYPE_DYNAMIC_NEXTQUARTER:
             $baseDate = strtotime('+3 month', gmmktime(0, 0, 0, 1, date('m', $baseDate), date('Y', $baseDate)));
             break;
         case AutoFilter\Column\Rule::AUTOFILTER_RULETYPE_DYNAMIC_LASTYEAR:
             $baseDate = strtotime('-1 year', gmmktime(0, 0, 0, 1, date('m', $baseDate), date('Y', $baseDate)));
             break;
         case AutoFilter\Column\Rule::AUTOFILTER_RULETYPE_DYNAMIC_NEXTYEAR:
             $baseDate = strtotime('+1 year', gmmktime(0, 0, 0, 1, date('m', $baseDate), date('Y', $baseDate)));
             break;
     }
     switch ($dynamicRuleType) {
         case AutoFilter\Column\Rule::AUTOFILTER_RULETYPE_DYNAMIC_TODAY:
         case AutoFilter\Column\Rule::AUTOFILTER_RULETYPE_DYNAMIC_YESTERDAY:
         case AutoFilter\Column\Rule::AUTOFILTER_RULETYPE_DYNAMIC_TOMORROW:
             $maxVal = (int) \PHPExcel\Shared\Date::PHPtoExcel(strtotime('+1 day', $baseDate));
             $val = (int) \PHPExcel\Shared\Date::PHPToExcel($baseDate);
             break;
         case AutoFilter\Column\Rule::AUTOFILTER_RULETYPE_DYNAMIC_YEARTODATE:
             $maxVal = (int) \PHPExcel\Shared\Date::PHPtoExcel(strtotime('+1 day', $baseDate));
             $val = (int) \PHPExcel\Shared\Date::PHPToExcel(gmmktime(0, 0, 0, 1, 1, date('Y', $baseDate)));
             break;
         case AutoFilter\Column\Rule::AUTOFILTER_RULETYPE_DYNAMIC_THISYEAR:
         case AutoFilter\Column\Rule::AUTOFILTER_RULETYPE_DYNAMIC_LASTYEAR:
         case AutoFilter\Column\Rule::AUTOFILTER_RULETYPE_DYNAMIC_NEXTYEAR:
             $maxVal = (int) \PHPExcel\Shared\Date::PHPToExcel(gmmktime(0, 0, 0, 31, 12, date('Y', $baseDate)));
             ++$maxVal;
             $val = (int) \PHPExcel\Shared\Date::PHPToExcel(gmmktime(0, 0, 0, 1, 1, date('Y', $baseDate)));
             break;
         case AutoFilter\Column\Rule::AUTOFILTER_RULETYPE_DYNAMIC_THISQUARTER:
         case AutoFilter\Column\Rule::AUTOFILTER_RULETYPE_DYNAMIC_LASTQUARTER:
         case AutoFilter\Column\Rule::AUTOFILTER_RULETYPE_DYNAMIC_NEXTQUARTER:
             $thisMonth = date('m', $baseDate);
             $thisQuarter = floor(--$thisMonth / 3);
             $maxVal = (int) \PHPExcel\Shared\Date::PHPtoExcel(gmmktime(0, 0, 0, date('t', $baseDate), (1 + $thisQuarter) * 3, date('Y', $baseDate)));
             ++$maxVal;
             $val = (int) \PHPExcel\Shared\Date::PHPToExcel(gmmktime(0, 0, 0, 1, 1 + $thisQuarter * 3, date('Y', $baseDate)));
             break;
         case AutoFilter\Column\Rule::AUTOFILTER_RULETYPE_DYNAMIC_THISMONTH:
         case AutoFilter\Column\Rule::AUTOFILTER_RULETYPE_DYNAMIC_LASTMONTH:
         case AutoFilter\Column\Rule::AUTOFILTER_RULETYPE_DYNAMIC_NEXTMONTH:
             $maxVal = (int) \PHPExcel\Shared\Date::PHPtoExcel(gmmktime(0, 0, 0, date('t', $baseDate), date('m', $baseDate), date('Y', $baseDate)));
             ++$maxVal;
             $val = (int) \PHPExcel\Shared\Date::PHPToExcel(gmmktime(0, 0, 0, 1, date('m', $baseDate), date('Y', $baseDate)));
             break;
         case AutoFilter\Column\Rule::AUTOFILTER_RULETYPE_DYNAMIC_THISWEEK:
         case AutoFilter\Column\Rule::AUTOFILTER_RULETYPE_DYNAMIC_LASTWEEK:
         case AutoFilter\Column\Rule::AUTOFILTER_RULETYPE_DYNAMIC_NEXTWEEK:
             $dayOfWeek = date('w', $baseDate);
             $val = (int) \PHPExcel\Shared\Date::PHPToExcel($baseDate) - $dayOfWeek;
             $maxVal = $val + 7;
             break;
     }
     switch ($dynamicRuleType) {
         //    Adjust Today dates for Yesterday and Tomorrow
         case AutoFilter\Column\Rule::AUTOFILTER_RULETYPE_DYNAMIC_YESTERDAY:
             --$maxVal;
             --$val;
             break;
         case AutoFilter\Column\Rule::AUTOFILTER_RULETYPE_DYNAMIC_TOMORROW:
             ++$maxVal;
             ++$val;
             break;
     }
     //    Set the filter column rule attributes ready for writing
     $filterColumn->setAttributes(array('val' => $val, 'maxVal' => $maxVal));
     //    Set the rules for identifying rows for hide/show
     $ruleValues[] = array('operator' => AutoFilter\Column\Rule::AUTOFILTER_COLUMN_RULE_GREATERTHANOREQUAL, 'value' => $val);
     $ruleValues[] = array('operator' => AutoFilter\Column\Rule::AUTOFILTER_COLUMN_RULE_LESSTHAN, 'value' => $maxVal);
     \PHPExcel\Calculation\Functions::setReturnDateType($rDateType);
     return array('method' => 'filterTestInCustomDataSet', 'arguments' => array('filterRules' => $ruleValues, 'join' => AutoFilter\Column::AUTOFILTER_COLUMN_JOIN_AND));
 }
 */
/** Error reporting */
error_reporting(E_ALL);
/** Include PHPExcel */
require_once dirname(__FILE__) . '/../src/Bootstrap.php';
// Create new PHPExcel object
echo date('H:i:s'), " Create new PHPExcel object", EOL;
$objPHPExcel = new \PHPExcel\Spreadsheet();
// Set document properties
echo date('H:i:s'), " Set document properties", EOL;
$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")->setLastModifiedBy("Maarten Balliauw")->setTitle("Office 2007 XLSX Test Document")->setSubject("Office 2007 XLSX Test Document")->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")->setKeywords("office 2007 openxml php")->setCategory("Test result file");
// Create a first sheet, representing sales data
echo date('H:i:s'), " Add some data", EOL;
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->setCellValue('B1', 'Invoice');
$objPHPExcel->getActiveSheet()->setCellValue('D1', \PHPExcel\Shared\Date::PHPToExcel(gmmktime(0, 0, 0, date('m'), date('d'), date('Y'))));
$objPHPExcel->getActiveSheet()->getStyle('D1')->getNumberFormat()->setFormatCode(\PHPExcel\Style\NumberFormat::FORMAT_DATE_XLSX15);
$objPHPExcel->getActiveSheet()->setCellValue('E1', '#12566');
$objPHPExcel->getActiveSheet()->setCellValue('A3', 'Product Id');
$objPHPExcel->getActiveSheet()->setCellValue('B3', 'Description');
$objPHPExcel->getActiveSheet()->setCellValue('C3', 'Price');
$objPHPExcel->getActiveSheet()->setCellValue('D3', 'Amount');
$objPHPExcel->getActiveSheet()->setCellValue('E3', 'Total');
$objPHPExcel->getActiveSheet()->setCellValue('A4', '1001');
$objPHPExcel->getActiveSheet()->setCellValue('B4', 'PHP for dummies');
$objPHPExcel->getActiveSheet()->setCellValue('C4', '20');
$objPHPExcel->getActiveSheet()->setCellValue('D4', '1');
$objPHPExcel->getActiveSheet()->setCellValue('E4', '=IF(D4<>"",C4*D4,"")');
$objPHPExcel->getActiveSheet()->setCellValue('A5', '1012');
$objPHPExcel->getActiveSheet()->setCellValue('B5', 'OpenXML for dummies');
$objPHPExcel->getActiveSheet()->setCellValue('C5', '22');
Beispiel #5
0
 /**
  * EOMONTH
  *
  * Returns the date value for the last day of the month that is the indicated number of months
  * before or after start_date.
  * Use EOMONTH to calculate maturity dates or due dates that fall on the last day of the month.
  *
  * Excel Function:
  *        EOMONTH(dateValue,adjustmentMonths)
  *
  * @param    mixed    $dateValue            Excel date serial value (float), PHP date timestamp (integer),
  *                                        PHP DateTime object, or a standard date string
  * @param    int        $adjustmentMonths    The number of months before or after start_date.
  *                                        A positive value for months yields a future date;
  *                                        a negative value yields a past date.
  * @return    mixed    Excel date/time serial value, PHP date/time serial value or PHP date/time object,
  *                        depending on the value of the ReturnDateType flag
  */
 public static function EOMONTH($dateValue = 1, $adjustmentMonths = 0)
 {
     $dateValue = Functions::flattenSingleValue($dateValue);
     $adjustmentMonths = Functions::flattenSingleValue($adjustmentMonths);
     if (!is_numeric($adjustmentMonths)) {
         return Functions::VALUE();
     }
     $adjustmentMonths = floor($adjustmentMonths);
     if (is_string($dateValue = self::getDateValue($dateValue))) {
         return Functions::VALUE();
     }
     // Execute function
     $PHPDateObject = self::adjustDateByMonths($dateValue, $adjustmentMonths + 1);
     $adjustDays = (int) $PHPDateObject->format('d');
     $adjustDaysString = '-' . $adjustDays . ' days';
     $PHPDateObject->modify($adjustDaysString);
     switch (Functions::getReturnDateType()) {
         case Functions::RETURNDATE_EXCEL:
             return (double) \PHPExcel\Shared\Date::PHPToExcel($PHPDateObject);
         case Functions::RETURNDATE_PHP_NUMERIC:
             return (int) \PHPExcel\Shared\Date::excelToPHP(\PHPExcel\Shared\Date::PHPToExcel($PHPDateObject));
         case Functions::RETURNDATE_PHP_OBJECT:
             return $PHPDateObject;
     }
 }
Beispiel #6
0
 /**
  * Loads PHPExcel from file into PHPExcel instance
  *
  * @param     string         $pFilename
  * @param    \PHPExcel\Spreadsheet    $objPHPExcel
  * @return     \PHPExcel\Spreadsheet
  * @throws     Exception
  */
 public function loadIntoExisting($pFilename, PHPExcel $objPHPExcel)
 {
     // Check if file exists
     if (!file_exists($pFilename)) {
         throw new Exception("Could not open " . $pFilename . " for reading! File does not exist.");
     }
     $timezoneObj = new DateTimeZone('Europe/London');
     $GMT = new \DateTimeZone('UTC');
     $zipClass = \PHPExcel\Settings::getZipClass();
     $zip = new $zipClass();
     if (!$zip->open($pFilename)) {
         throw new Exception("Could not open " . $pFilename . " for reading! Error opening file.");
     }
     //        echo '<h1>Meta Information</h1>';
     $xml = simplexml_load_string($this->securityScan($zip->getFromName("meta.xml")), 'SimpleXMLElement', \PHPExcel\Settings::getLibXmlLoaderOptions());
     $namespacesMeta = $xml->getNamespaces(true);
     //        echo '<pre>';
     //        print_r($namespacesMeta);
     //        echo '</pre><hr />';
     $docProps = $objPHPExcel->getProperties();
     $officeProperty = $xml->children($namespacesMeta['office']);
     foreach ($officeProperty as $officePropertyData) {
         $officePropertyDC = array();
         if (isset($namespacesMeta['dc'])) {
             $officePropertyDC = $officePropertyData->children($namespacesMeta['dc']);
         }
         foreach ($officePropertyDC as $propertyName => $propertyValue) {
             $propertyValue = (string) $propertyValue;
             switch ($propertyName) {
                 case 'title':
                     $docProps->setTitle($propertyValue);
                     break;
                 case 'subject':
                     $docProps->setSubject($propertyValue);
                     break;
                 case 'creator':
                     $docProps->setCreator($propertyValue);
                     $docProps->setLastModifiedBy($propertyValue);
                     break;
                 case 'date':
                     $creationDate = strtotime($propertyValue);
                     $docProps->setCreated($creationDate);
                     $docProps->setModified($creationDate);
                     break;
                 case 'description':
                     $docProps->setDescription($propertyValue);
                     break;
             }
         }
         $officePropertyMeta = array();
         if (isset($namespacesMeta['dc'])) {
             $officePropertyMeta = $officePropertyData->children($namespacesMeta['meta']);
         }
         foreach ($officePropertyMeta as $propertyName => $propertyValue) {
             $propertyValueAttributes = $propertyValue->attributes($namespacesMeta['meta']);
             $propertyValue = (string) $propertyValue;
             switch ($propertyName) {
                 case 'initial-creator':
                     $docProps->setCreator($propertyValue);
                     break;
                 case 'keyword':
                     $docProps->setKeywords($propertyValue);
                     break;
                 case 'creation-date':
                     $creationDate = strtotime($propertyValue);
                     $docProps->setCreated($creationDate);
                     break;
                 case 'user-defined':
                     $propertyValueType = \PHPExcel\Document\Properties::PROPERTY_TYPE_STRING;
                     foreach ($propertyValueAttributes as $key => $value) {
                         if ($key == 'name') {
                             $propertyValueName = (string) $value;
                         } elseif ($key == 'value-type') {
                             switch ($value) {
                                 case 'date':
                                     $propertyValue = \PHPExcel\Document\Properties::convertProperty($propertyValue, 'date');
                                     $propertyValueType = \PHPExcel\Document\Properties::PROPERTY_TYPE_DATE;
                                     break;
                                 case 'boolean':
                                     $propertyValue = \PHPExcel\Document\Properties::convertProperty($propertyValue, 'bool');
                                     $propertyValueType = \PHPExcel\Document\Properties::PROPERTY_TYPE_BOOLEAN;
                                     break;
                                 case 'float':
                                     $propertyValue = \PHPExcel\Document\Properties::convertProperty($propertyValue, 'r4');
                                     $propertyValueType = \PHPExcel\Document\Properties::PROPERTY_TYPE_FLOAT;
                                     break;
                                 default:
                                     $propertyValueType = \PHPExcel\Document\Properties::PROPERTY_TYPE_STRING;
                             }
                         }
                     }
                     $docProps->setCustomProperty($propertyValueName, $propertyValue, $propertyValueType);
                     break;
             }
         }
     }
     //        echo '<h1>Workbook Content</h1>';
     $xml = simplexml_load_string($this->securityScan($zip->getFromName("content.xml")), 'SimpleXMLElement', \PHPExcel\Settings::getLibXmlLoaderOptions());
     $namespacesContent = $xml->getNamespaces(true);
     //        echo '<pre>';
     //        print_r($namespacesContent);
     //        echo '</pre><hr />';
     $workbook = $xml->children($namespacesContent['office']);
     foreach ($workbook->body->spreadsheet as $workbookData) {
         $workbookData = $workbookData->children($namespacesContent['table']);
         $worksheetID = 0;
         foreach ($workbookData->table as $worksheetDataSet) {
             $worksheetData = $worksheetDataSet->children($namespacesContent['table']);
             //                print_r($worksheetData);
             //                echo '<br />';
             $worksheetDataAttributes = $worksheetDataSet->attributes($namespacesContent['table']);
             //                print_r($worksheetDataAttributes);
             //                echo '<br />';
             if (isset($this->loadSheetsOnly) && isset($worksheetDataAttributes['name']) && !in_array($worksheetDataAttributes['name'], $this->loadSheetsOnly)) {
                 continue;
             }
             //                echo '<h2>Worksheet '.$worksheetDataAttributes['name'].'</h2>';
             // Create new Worksheet
             $objPHPExcel->createSheet();
             $objPHPExcel->setActiveSheetIndex($worksheetID);
             if (isset($worksheetDataAttributes['name'])) {
                 $worksheetName = (string) $worksheetDataAttributes['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
                 $objPHPExcel->getActiveSheet()->setTitle($worksheetName, false);
             }
             $rowID = 1;
             foreach ($worksheetData as $key => $rowData) {
                 //                    echo '<b>'.$key.'</b><br />';
                 switch ($key) {
                     case 'table-header-rows':
                         foreach ($rowData as $keyRowData => $cellData) {
                             $rowData = $cellData;
                             break;
                         }
                         break;
                     case 'table-row':
                         $rowDataTableAttributes = $rowData->attributes($namespacesContent['table']);
                         $rowRepeats = isset($rowDataTableAttributes['number-rows-repeated']) ? $rowDataTableAttributes['number-rows-repeated'] : 1;
                         $columnID = 'A';
                         foreach ($rowData as $key => $cellData) {
                             if ($this->getReadFilter() !== null) {
                                 if (!$this->getReadFilter()->readCell($columnID, $rowID, $worksheetName)) {
                                     continue;
                                 }
                             }
                             //                                echo '<b>'.$columnID.$rowID.'</b><br />';
                             $cellDataText = isset($namespacesContent['text']) ? $cellData->children($namespacesContent['text']) : '';
                             $cellDataOffice = $cellData->children($namespacesContent['office']);
                             $cellDataOfficeAttributes = $cellData->attributes($namespacesContent['office']);
                             $cellDataTableAttributes = $cellData->attributes($namespacesContent['table']);
                             //                                echo 'Office Attributes: ';
                             //                                print_r($cellDataOfficeAttributes);
                             //                                echo '<br />Table Attributes: ';
                             //                                print_r($cellDataTableAttributes);
                             //                                echo '<br />Cell Data Text';
                             //                                print_r($cellDataText);
                             //                                echo '<br />';
                             //
                             $type = $formatting = $hyperlink = null;
                             $hasCalculatedValue = false;
                             $cellDataFormula = '';
                             if (isset($cellDataTableAttributes['formula'])) {
                                 $cellDataFormula = $cellDataTableAttributes['formula'];
                                 $hasCalculatedValue = true;
                             }
                             if (isset($cellDataOffice->annotation)) {
                                 //                                    echo 'Cell has comment<br />';
                                 $annotationText = $cellDataOffice->annotation->children($namespacesContent['text']);
                                 $textArray = array();
                                 foreach ($annotationText as $t) {
                                     if (isset($t->span)) {
                                         foreach ($t->span as $text) {
                                             $textArray[] = (string) $text;
                                         }
                                     } else {
                                         $textArray[] = (string) $t;
                                     }
                                 }
                                 $text = implode("\n", $textArray);
                                 //                                    echo $text, '<br />';
                                 $objPHPExcel->getActiveSheet()->getComment($columnID . $rowID)->setText($this->parseRichText($text));
                                 //                                                                    ->setAuthor( $author )
                             }
                             if (isset($cellDataText->p)) {
                                 // Consolidate if there are multiple p records (maybe with spans as well)
                                 $dataArray = array();
                                 // Text can have multiple text:p and within those, multiple text:span.
                                 // text:p newlines, but text:span does not.
                                 // Also, here we assume there is no text data is span fields are specified, since
                                 // we have no way of knowing proper positioning anyway.
                                 foreach ($cellDataText->p as $pData) {
                                     if (isset($pData->span)) {
                                         // span sections do not newline, so we just create one large string here
                                         $spanSection = "";
                                         foreach ($pData->span as $spanData) {
                                             $spanSection .= $spanData;
                                         }
                                         array_push($dataArray, $spanSection);
                                     } else {
                                         array_push($dataArray, $pData);
                                     }
                                 }
                                 $allCellDataText = implode($dataArray, "\n");
                                 //                                    echo 'Value Type is '.$cellDataOfficeAttributes['value-type'].'<br />';
                                 switch ($cellDataOfficeAttributes['value-type']) {
                                     case 'string':
                                         $type = \PHPExcel\Cell\DataType::TYPE_STRING;
                                         $dataValue = $allCellDataText;
                                         if (isset($dataValue->a)) {
                                             $dataValue = $dataValue->a;
                                             $cellXLinkAttributes = $dataValue->attributes($namespacesContent['xlink']);
                                             $hyperlink = $cellXLinkAttributes['href'];
                                         }
                                         break;
                                     case 'boolean':
                                         $type = \PHPExcel\Cell\DataType::TYPE_BOOL;
                                         $dataValue = $allCellDataText == 'TRUE' ? true : false;
                                         break;
                                     case 'percentage':
                                         $type = \PHPExcel\Cell\DataType::TYPE_NUMERIC;
                                         $dataValue = (double) $cellDataOfficeAttributes['value'];
                                         if (floor($dataValue) == $dataValue) {
                                             $dataValue = (int) $dataValue;
                                         }
                                         $formatting = \PHPExcel\Style\NumberFormat::FORMAT_PERCENTAGE_00;
                                         break;
                                     case 'currency':
                                         $type = \PHPExcel\Cell\DataType::TYPE_NUMERIC;
                                         $dataValue = (double) $cellDataOfficeAttributes['value'];
                                         if (floor($dataValue) == $dataValue) {
                                             $dataValue = (int) $dataValue;
                                         }
                                         $formatting = \PHPExcel\Style\NumberFormat::FORMAT_CURRENCY_USD_SIMPLE;
                                         break;
                                     case 'float':
                                         $type = \PHPExcel\Cell\DataType::TYPE_NUMERIC;
                                         $dataValue = (double) $cellDataOfficeAttributes['value'];
                                         if (floor($dataValue) == $dataValue) {
                                             if ($dataValue == (int) $dataValue) {
                                                 $dataValue = (int) $dataValue;
                                             } else {
                                                 $dataValue = (double) $dataValue;
                                             }
                                         }
                                         break;
                                     case 'date':
                                         $type = \PHPExcel\Cell\DataType::TYPE_NUMERIC;
                                         $dateObj = new DateTime($cellDataOfficeAttributes['date-value'], $GMT);
                                         $dateObj->setTimeZone($timezoneObj);
                                         list($year, $month, $day, $hour, $minute, $second) = explode(' ', $dateObj->format('Y m d H i s'));
                                         $dataValue = \PHPExcel\Shared\Date::formattedPHPToExcel($year, $month, $day, $hour, $minute, $second);
                                         if ($dataValue != floor($dataValue)) {
                                             $formatting = \PHPExcel\Style\NumberFormat::FORMAT_DATE_XLSX15 . ' ' . \PHPExcel\Style\NumberFormat::FORMAT_DATE_TIME4;
                                         } else {
                                             $formatting = \PHPExcel\Style\NumberFormat::FORMAT_DATE_XLSX15;
                                         }
                                         break;
                                     case 'time':
                                         $type = \PHPExcel\Cell\DataType::TYPE_NUMERIC;
                                         $dataValue = \PHPExcel\Shared\Date::PHPToExcel(strtotime('01-01-1970 ' . implode(':', sscanf($cellDataOfficeAttributes['time-value'], 'PT%dH%dM%dS'))));
                                         $formatting = \PHPExcel\Style\NumberFormat::FORMAT_DATE_TIME4;
                                         break;
                                 }
                                 //                                    echo 'Data value is '.$dataValue.'<br />';
                                 //                                    if ($hyperlink !== null) {
                                 //                                        echo 'Hyperlink is '.$hyperlink.'<br />';
                                 //                                    }
                             } else {
                                 $type = \PHPExcel\Cell\DataType::TYPE_NULL;
                                 $dataValue = null;
                             }
                             if ($hasCalculatedValue) {
                                 $type = \PHPExcel\Cell\DataType::TYPE_FORMULA;
                                 //                                    echo 'Formula: ', $cellDataFormula, PHP_EOL;
                                 $cellDataFormula = substr($cellDataFormula, strpos($cellDataFormula, ':=') + 1);
                                 $temp = explode('"', $cellDataFormula);
                                 $tKey = false;
                                 foreach ($temp as &$value) {
                                     //    Only replace in alternate array entries (i.e. non-quoted blocks)
                                     if ($tKey = !$tKey) {
                                         $value = preg_replace('/\\[([^\\.]+)\\.([^\\.]+):\\.([^\\.]+)\\]/Ui', '$1!$2:$3', $value);
                                         //  Cell range reference in another sheet
                                         $value = preg_replace('/\\[([^\\.]+)\\.([^\\.]+)\\]/Ui', '$1!$2', $value);
                                         //  Cell reference in another sheet
                                         $value = preg_replace('/\\[\\.([^\\.]+):\\.([^\\.]+)\\]/Ui', '$1:$2', $value);
                                         //  Cell range reference
                                         $value = preg_replace('/\\[\\.([^\\.]+)\\]/Ui', '$1', $value);
                                         //  Simple cell reference
                                         $value = \PHPExcel\Calculation::translateSeparator(';', ',', $value, $inBraces);
                                     }
                                 }
                                 unset($value);
                                 //    Then rebuild the formula string
                                 $cellDataFormula = implode('"', $temp);
                                 //                                    echo 'Adjusted Formula: ', $cellDataFormula, PHP_EOL;
                             }
                             $colRepeats = isset($cellDataTableAttributes['number-columns-repeated']) ? $cellDataTableAttributes['number-columns-repeated'] : 1;
                             if ($type !== null) {
                                 for ($i = 0; $i < $colRepeats; ++$i) {
                                     if ($i > 0) {
                                         ++$columnID;
                                     }
                                     if ($type !== \PHPExcel\Cell\DataType::TYPE_NULL) {
                                         for ($rowAdjust = 0; $rowAdjust < $rowRepeats; ++$rowAdjust) {
                                             $rID = $rowID + $rowAdjust;
                                             $objPHPExcel->getActiveSheet()->getCell($columnID . $rID)->setValueExplicit($hasCalculatedValue ? $cellDataFormula : $dataValue, $type);
                                             if ($hasCalculatedValue) {
                                                 //                                                    echo 'Forumla result is '.$dataValue.'<br />';
                                                 $objPHPExcel->getActiveSheet()->getCell($columnID . $rID)->setCalculatedValue($dataValue);
                                             }
                                             if ($formatting !== null) {
                                                 $objPHPExcel->getActiveSheet()->getStyle($columnID . $rID)->getNumberFormat()->setFormatCode($formatting);
                                             } else {
                                                 $objPHPExcel->getActiveSheet()->getStyle($columnID . $rID)->getNumberFormat()->setFormatCode(\PHPExcel\Style\NumberFormat::FORMAT_GENERAL);
                                             }
                                             if ($hyperlink !== null) {
                                                 $objPHPExcel->getActiveSheet()->getCell($columnID . $rID)->getHyperlink()->setUrl($hyperlink);
                                             }
                                         }
                                     }
                                 }
                             }
                             //    Merged cells
                             if (isset($cellDataTableAttributes['number-columns-spanned']) || isset($cellDataTableAttributes['number-rows-spanned'])) {
                                 if ($type !== \PHPExcel\Cell\DataType::TYPE_NULL || !$this->readDataOnly) {
                                     $columnTo = $columnID;
                                     if (isset($cellDataTableAttributes['number-columns-spanned'])) {
                                         $columnTo = \PHPExcel\Cell::stringFromColumnIndex(\PHPExcel\Cell::columnIndexFromString($columnID) + $cellDataTableAttributes['number-columns-spanned'] - 2);
                                     }
                                     $rowTo = $rowID;
                                     if (isset($cellDataTableAttributes['number-rows-spanned'])) {
                                         $rowTo = $rowTo + $cellDataTableAttributes['number-rows-spanned'] - 1;
                                     }
                                     $cellRange = $columnID . $rowID . ':' . $columnTo . $rowTo;
                                     $objPHPExcel->getActiveSheet()->mergeCells($cellRange);
                                 }
                             }
                             ++$columnID;
                         }
                         $rowID += $rowRepeats;
                         break;
                 }
             }
             ++$worksheetID;
         }
     }
     // Return
     return $objPHPExcel;
 }
// Add some data, resembling some different data types
echo date('H:i:s'), " Add some data", EOL;
$objPHPExcel->getActiveSheet()->setCellValue('A1', 'String')->setCellValue('B1', 'Simple')->setCellValue('C1', 'PHPExcel');
$objPHPExcel->getActiveSheet()->setCellValue('A2', 'String')->setCellValue('B2', 'Symbols')->setCellValue('C2', '!+&=()~§±æþ');
$objPHPExcel->getActiveSheet()->setCellValue('A3', 'String')->setCellValue('B3', 'UTF-8')->setCellValue('C3', 'Создать MS Excel Книги из PHP скриптов');
$objPHPExcel->getActiveSheet()->setCellValue('A4', 'Number')->setCellValue('B4', 'Integer')->setCellValue('C4', 12);
$objPHPExcel->getActiveSheet()->setCellValue('A5', 'Number')->setCellValue('B5', 'Float')->setCellValue('C5', 34.56);
$objPHPExcel->getActiveSheet()->setCellValue('A6', 'Number')->setCellValue('B6', 'Negative')->setCellValue('C6', -7.89);
$objPHPExcel->getActiveSheet()->setCellValue('A7', 'Boolean')->setCellValue('B7', 'True')->setCellValue('C7', true);
$objPHPExcel->getActiveSheet()->setCellValue('A8', 'Boolean')->setCellValue('B8', 'False')->setCellValue('C8', false);
$dateTimeNow = time();
$objPHPExcel->getActiveSheet()->setCellValue('A9', 'Date/Time')->setCellValue('B9', 'Date')->setCellValue('C9', \PHPExcel\Shared\Date::PHPToExcel($dateTimeNow));
$objPHPExcel->getActiveSheet()->getStyle('C9')->getNumberFormat()->setFormatCode(\PHPExcel\Style\NumberFormat::FORMAT_DATE_YYYYMMDD2);
$objPHPExcel->getActiveSheet()->setCellValue('A10', 'Date/Time')->setCellValue('B10', 'Time')->setCellValue('C10', \PHPExcel\Shared\Date::PHPToExcel($dateTimeNow));
$objPHPExcel->getActiveSheet()->getStyle('C10')->getNumberFormat()->setFormatCode(\PHPExcel\Style\NumberFormat::FORMAT_DATE_TIME4);
$objPHPExcel->getActiveSheet()->setCellValue('A11', 'Date/Time')->setCellValue('B11', 'Date and Time')->setCellValue('C11', \PHPExcel\Shared\Date::PHPToExcel($dateTimeNow));
$objPHPExcel->getActiveSheet()->getStyle('C11')->getNumberFormat()->setFormatCode(\PHPExcel\Style\NumberFormat::FORMAT_DATE_DATETIME);
$objPHPExcel->getActiveSheet()->setCellValue('A12', 'NULL')->setCellValue('C12', NULL);
$objRichText = new \PHPExcel\RichText();
$objRichText->createText('你好 ');
$objPayable = $objRichText->createTextRun('你 好 吗?');
$objPayable->getFont()->setBold(true);
$objPayable->getFont()->setItalic(true);
$objPayable->getFont()->setColor(new \PHPExcel\Style\Color(\PHPExcel\Style\Color::COLOR_DARKGREEN));
$objRichText->createText(', unless specified otherwise on the invoice.');
$objPHPExcel->getActiveSheet()->setCellValue('A13', 'Rich Text')->setCellValue('C13', $objRichText);
$objRichText2 = new \PHPExcel\RichText();
$objRichText2->createText("black text\n");
$objRed = $objRichText2->createTextRun("red text");
$objRed->getFont()->setColor(new \PHPExcel\Style\Color(\PHPExcel\Style\Color::COLOR_RED));
$objPHPExcel->getActiveSheet()->getCell("C14")->setValue($objRichText2);
Beispiel #8
0
 * @version    ##VERSION##, ##DATE##
 */
/** Error reporting */
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
define('EOL', PHP_SAPI == 'cli' ? PHP_EOL : '<br />');
date_default_timezone_set('Europe/London');
/** Include PHPExcel */
require_once dirname(__FILE__) . '/../src/Bootstrap.php';
echo date('H:i:s'), " Load from Excel5 template", EOL;
$objReader = \PHPExcel\IOFactory::createReader('Excel5');
$objPHPExcel = $objReader->load("templates/30template.xls");
echo date('H:i:s'), " Add new data to the template", EOL;
$data = array(array('title' => 'Excel for dummies', 'price' => 17.99, 'quantity' => 2), array('title' => 'PHP for dummies', 'price' => 15.99, 'quantity' => 1), array('title' => 'Inside OOP', 'price' => 12.95, 'quantity' => 1));
$objPHPExcel->getActiveSheet()->setCellValue('D1', \PHPExcel\Shared\Date::PHPToExcel(time()));
$baseRow = 5;
foreach ($data as $r => $dataRow) {
    $row = $baseRow + $r;
    $objPHPExcel->getActiveSheet()->insertNewRowBefore($row, 1);
    $objPHPExcel->getActiveSheet()->setCellValue('A' . $row, $r + 1)->setCellValue('B' . $row, $dataRow['title'])->setCellValue('C' . $row, $dataRow['price'])->setCellValue('D' . $row, $dataRow['quantity'])->setCellValue('E' . $row, '=C' . $row . '*D' . $row);
}
$objPHPExcel->getActiveSheet()->removeRow($baseRow - 1, 1);
echo date('H:i:s'), " Write to Excel5 format", EOL;
$objWriter = \PHPExcel\IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save(str_replace('.php', '.xls', __FILE__));
echo date('H:i:s'), " File written to ", str_replace('.php', '.xls', pathinfo(__FILE__, PATHINFO_BASENAME)), EOL;
// Echo memory peak usage
echo date('H:i:s'), " Peak memory usage: ", memory_get_peak_usage(true) / 1024 / 1024, " MB", EOL;
// Echo done
echo date('H:i:s'), " Done writing file", EOL;