ILIAS  Release_4_0_x_branch Revision 61816
 All Data Structures Namespaces Files Functions Variables Groups Pages
AdvancedValueBinder.php
Go to the documentation of this file.
1 <?php
30 if (!defined('PHPEXCEL_ROOT')) {
34  define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../');
35 }
36 
38 require_once PHPEXCEL_ROOT . 'PHPExcel/Cell.php';
39 
41 require_once PHPEXCEL_ROOT . 'PHPExcel/Cell/IValueBinder.php';
42 
44 require_once PHPEXCEL_ROOT . 'PHPExcel/Cell/DefaultValueBinder.php';
45 
47 require_once PHPEXCEL_ROOT . 'PHPExcel/Style/NumberFormat.php';
48 
50 require_once PHPEXCEL_ROOT . 'PHPExcel/Shared/Date.php';
51 
53 require_once PHPEXCEL_ROOT . 'PHPExcel/Shared/String.php';
54 
55 
64 {
72  public function bindValue(PHPExcel_Cell $cell, $value = null)
73  {
74  // sanitize UTF-8 strings
75  if (is_string($value)) {
76  $value = PHPExcel_Shared_String::SanitizeUTF8($value);
77  }
78 
79  // Find out data type
80  $dataType = parent::dataTypeForValue($value);
81 
82  // Style logic - strings
83  if ($dataType === PHPExcel_Cell_DataType::TYPE_STRING && !$value instanceof PHPExcel_RichText) {
84  // Check for percentage
85  if (preg_match('/^\-?[0-9]*\.?[0-9]*\s?\%$/', $value)) {
86  // Convert value to number
87  $cell->setValueExplicit( (float)str_replace('%', '', $value) / 100, PHPExcel_Cell_DataType::TYPE_NUMERIC);
88 
89  // Set style
90  $cell->getParent()->getStyle( $cell->getCoordinate() )->getNumberFormat()->setFormatCode( PHPExcel_Style_NumberFormat::FORMAT_PERCENTAGE );
91 
92  return true;
93  }
94 
95  // Check for time e.g. '9:45', '09:45'
96  if (preg_match('/^(\d|[0-1]\d|2[0-3]):[0-5]\d$/', $value)) {
97  list($h, $m) = explode(':', $value);
98  $days = $h / 24 + $m / 1440;
99 
100  // Convert value to number
102 
103  // Set style
104  $cell->getParent()->getStyle( $cell->getCoordinate() )->getNumberFormat()->setFormatCode( PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME3 );
105 
106  return true;
107  }
108 
109  // Check for date
110  if (strtotime($value) !== false) {
111  // make sure we have UTC for the sake of strtotime
112  $saveTimeZone = date_default_timezone_get();
113  date_default_timezone_set('UTC');
114 
115  // Convert value to Excel date
117 
118  // Set style
119  $cell->getParent()->getStyle( $cell->getCoordinate() )->getNumberFormat()->setFormatCode( PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDD2 );
120 
121  // restore original value for timezone
122  date_default_timezone_set($saveTimeZone);
123 
124  return true;
125  }
126  }
127 
128  // Style logic - Numbers
129  if ($dataType === PHPExcel_Cell_DataType::TYPE_NUMERIC) {
130  // Leading zeroes?
131  if (preg_match('/^\-?[0]+[0-9]*\.?[0-9]*$/', $value)) {
132  // Convert value to string
134 
135  // Set style
136  $cell->getParent()->getStyle( $cell->getCoordinate() )->getNumberFormat()->setFormatCode( PHPExcel_Style_NumberFormat::FORMAT_TEXT );
137 
138  return true;
139  }
140  }
141 
142  // Not bound yet? Use parent...
143  return parent::bindValue($cell, $value);
144  }
145 }