diff --git a/README.md b/README.md index 26de6ae5a..1dee4a110 100644 --- a/README.md +++ b/README.md @@ -83,15 +83,17 @@ Simple cell formats map to more advanced cell formats Basic cell styles have been available since version 0.30 -| style | allowed values | -| ---------- | ---- | -| font | Arial, Times New Roman, Courier New, Comic Sans MS | -| font-size | 8,9,10,11,12 ... | -| font-style | bold, italic, underline, strikethrough or multiple ie: 'bold,italic' | -| border | left, right, top, bottom, or multiple ie: 'top,left' | -| color | #RRGGBB, ie: #ff99cc or #f9c | -| fill | #RRGGBB, ie: #eeffee or #efe | -| halign | general, left, right, justify, center | -| valign | bottom, center, distributed | +| style | allowed values | +| ------------ | ---- | +| font | Arial, Times New Roman, Courier New, Comic Sans MS | +| font-size | 8,9,10,11,12 ... | +| font-style | bold, italic, underline, strikethrough or multiple ie: 'bold,italic' | +| border | left, right, top, bottom, or multiple ie: 'top,left' | +| border-style | thin, medium, thick, dashDot, dashDotDot, dashed, dotted, double, hair, mediumDashDot, mediumDashDotDot, mediumDashed, slantDashDot | +| border-color | #RRGGBB, ie: #ff99cc or #f9c | +| color | #RRGGBB, ie: #ff99cc or #f9c | +| fill | #RRGGBB, ie: #eeffee or #efe | +| halign | general, left, right, justify, center | +| valign | bottom, center, distributed | diff --git a/example-cli.php b/example-cli.php index 2f0ca344d..e3245422e 100644 --- a/example-cli.php +++ b/example-cli.php @@ -10,8 +10,9 @@ array('2003','1','-50.5','2010-01-01 23:00:00','2012-12-31 23:00:00'), array('2003','=B1', '23.5','2010-01-01 00:00:00','2012-12-31 00:00:00'), ); + $writer = new XLSXWriter(); -$writer->setAuthor('Some Author'); +$writer->setAuthor('Some Author'); foreach($rows as $row) $writer->writeSheetRow('Sheet1', $row); diff --git a/example.php b/example.php index d76a8dc07..38831aea7 100644 --- a/example.php +++ b/example.php @@ -15,8 +15,9 @@ array('2003','1','-50.5','2010-01-01 23:00:00','2012-12-31 23:00:00'), array('2003','=B1', '23.5','2010-01-01 00:00:00','2012-12-31 00:00:00'), ); + $writer = new XLSXWriter(); -$writer->setAuthor('Some Author'); +$writer->setAuthor('Some Author'); foreach($rows as $row) $writer->writeSheetRow('Sheet1', $row); $writer->writeToStdOut(); diff --git a/examples/ex08-advanced.php b/examples/ex08-advanced.php index 33ed7c3eb..d7c358cb3 100644 --- a/examples/ex08-advanced.php +++ b/examples/ex08-advanced.php @@ -3,7 +3,14 @@ include_once("xlsxwriter.class.php"); $writer = new XLSXWriter(); +$keywords = array('some','interesting','keywords'); + +$writer->setTitle('Some Title'); +$writer->setSubject('Some Subject'); $writer->setAuthor('Some Author'); +$writer->setCompany('Some Company'); +$writer->setKeywords($keywords); +$writer->setDescription('Some interesting description'); $writer->setTempDir(sys_get_temp_dir());//set custom tempdir //---- diff --git a/examples/ex09-autofilter.php b/examples/ex09-autofilter.php new file mode 100644 index 000000000..c415e05a9 --- /dev/null +++ b/examples/ex09-autofilter.php @@ -0,0 +1,18 @@ +writeSheetHeader('Sheet1', array('col-string'=>'string','col-numbers'=>'integer','col-timestamps'=>'datetime'), ['auto_filter'=>true, 'widths'=>[15,15,30]] ); +for($i=0; $i<1000; $i++) +{ + $writer->writeSheetRow('Sheet1', array( + str_shuffle($chars), + rand()%10000, + date('Y-m-d H:i:s',time()-(rand()%31536000)) + )); +} +$writer->writeToFile('xlsx-autofilter.xlsx'); +echo '#'.floor((memory_get_peak_usage())/1024/1024)."MB"."\n"; diff --git a/examples/ex10-freeze-rows-columns.php b/examples/ex10-freeze-rows-columns.php new file mode 100644 index 000000000..196c78091 --- /dev/null +++ b/examples/ex10-freeze-rows-columns.php @@ -0,0 +1,20 @@ +writeSheetHeader('Sheet1', array('c1'=>'string','c2'=>'integer','c3'=>'integer','c4'=>'integer','c5'=>'integer'), ['freeze_rows'=>1, 'freeze_columns'=>1] ); +for($i=0; $i<250; $i++) +{ + $writer->writeSheetRow('Sheet1', array( + str_shuffle($chars), + rand()%10000, + rand()%10000, + rand()%10000, + rand()%10000 + )); +} +$writer->writeToFile('xlsx-freeze-rows-columns.xlsx'); +echo '#'.floor((memory_get_peak_usage())/1024/1024)."MB"."\n"; diff --git a/testbench/pairs/formats.php b/testbench/pairs/formats.php index e39e42052..697c7bca6 100644 --- a/testbench/pairs/formats.php +++ b/testbench/pairs/formats.php @@ -2,7 +2,14 @@ include_once("../../xlsxwriter.class.php"); $writer = new XLSXWriter(); +$keywords = array('some','interesting','keywords'); + +$writer->setTitle('Some Title'); +$writer->setSubject('Some Subject'); $writer->setAuthor('Some Author'); +$writer->setCompany('Some Company'); +$writer->setKeywords($keywords); +$writer->setDescription('Some interesting description'); $header = array( 'General'=>'string', diff --git a/testbench/pairs/test.php b/testbench/pairs/test.php index ab2c494fa..34b7befc4 100644 --- a/testbench/pairs/test.php +++ b/testbench/pairs/test.php @@ -2,7 +2,14 @@ include_once("../../xlsxwriter.class.php"); $writer = new XLSXWriter(); +$keywords = array('some','interesting','keywords'); + +$writer->setTitle('Some Title'); +$writer->setSubject('Some Subject'); $writer->setAuthor('Some Author'); +$writer->setCompany('Some Company'); +$writer->setKeywords($keywords); +$writer->setDescription('Some interesting description'); $header = array( 'General'=>'string', diff --git a/testbench/test.php b/testbench/test.php index ba7ca4c4d..088bd20fe 100644 --- a/testbench/test.php +++ b/testbench/test.php @@ -17,7 +17,14 @@ array('2003','02','345.12'), ); $writer = new XLSXWriter(); +$keywords = array('some','interesting','keywords'); + +$writer->setTitle('Some Title'); +$writer->setSubject('Some Subject'); $writer->setAuthor('Some Author'); +$writer->setCompany('Some Company'); +$writer->setKeywords($keywords); +$writer->setDescription('Some interesting description'); $writer->writeSheet($data1,'Sheet1',$header); $writer->writeSheet($data2,'Sheet2'); $writer->writeToFile('test.xlsx'); diff --git a/xlsxwriter.class.php b/xlsxwriter.class.php index b1e8d04d0..a987735f8 100644 --- a/xlsxwriter.class.php +++ b/xlsxwriter.class.php @@ -12,15 +12,19 @@ class XLSXWriter const EXCEL_2007_MAX_ROW=1048576; const EXCEL_2007_MAX_COL=16384; //------------------------------------------------------------------ - protected $title ='Doc Title'; - protected $author ='Doc Author'; + protected $title; + protected $subject; + protected $author; + protected $company; + protected $description; + protected $keywords = array(); + + protected $current_sheet; protected $sheets = array(); protected $temp_files = array(); protected $cell_styles = array(); protected $number_formats = array(); - protected $current_sheet = ''; - public function __construct() { if(!ini_get('date.timezone')) @@ -35,7 +39,11 @@ public function __construct() } public function setTitle($title='') { $this->title=$title; } + public function setSubject($subject='') { $this->subject=$subject; } public function setAuthor($author='') { $this->author=$author; } + public function setCompany($company='') { $this->company=$company; } + public function setKeywords($keywords='') { $this->keywords=$keywords; } + public function setDescription($description='') { $this->description=$description; } public function setTempDir($tempdir='') { $this->tempdir=$tempdir; } public function __destruct() @@ -108,7 +116,7 @@ public function writeToFile($filename) $zip->close(); } - protected function initializeSheet($sheet_name, $col_widths=array() ) + protected function initializeSheet($sheet_name, $col_widths=array(), $auto_filter=false, $freeze_rows=false, $freeze_columns=false ) { //if already initialized if ($this->current_sheet==$sheet_name || isset($this->sheets[$sheet_name])) @@ -126,6 +134,9 @@ protected function initializeSheet($sheet_name, $col_widths=array() ) 'merge_cells' => array(), 'max_cell_tag_start' => 0, 'max_cell_tag_end' => 0, + 'auto_filter' => $auto_filter, + 'freeze_rows' => $freeze_rows, + 'freeze_columns' => $freeze_columns, 'finalized' => false, ); $sheet = &$this->sheets[$sheet_name]; @@ -141,18 +152,34 @@ protected function initializeSheet($sheet_name, $col_widths=array() ) $sheet->max_cell_tag_end = $sheet->file_writer->ftell(); $sheet->file_writer->write( ''); $sheet->file_writer->write( ''); - $sheet->file_writer->write( ''); + if ($sheet->freeze_rows && $sheet->freeze_columns) { + $sheet->file_writer->write( ''); + $sheet->file_writer->write( ''); + $sheet->file_writer->write( ''); + $sheet->file_writer->write( ''); + } + elseif ($sheet->freeze_rows) { + $sheet->file_writer->write( ''); + $sheet->file_writer->write( ''); + } + elseif ($sheet->freeze_columns) { + $sheet->file_writer->write( ''); + $sheet->file_writer->write( ''); + } + else { // not frozen + $sheet->file_writer->write( ''); + } $sheet->file_writer->write( ''); $sheet->file_writer->write( ''); $sheet->file_writer->write( ''); $i=0; if (!empty($col_widths)) { foreach($col_widths as $column_width) { - $sheet->file_writer->write( ''); + $sheet->file_writer->write( ''); $i++; } } - $sheet->file_writer->write( ''); + $sheet->file_writer->write( ''); $sheet->file_writer->write( ''); $sheet->file_writer->write( ''); } @@ -195,7 +222,10 @@ public function writeSheetHeader($sheet_name, array $header_types, $col_options $style = &$col_options; $col_widths = isset($col_options['widths']) ? (array)$col_options['widths'] : array(); - self::initializeSheet($sheet_name, $col_widths); + $auto_filter = isset($col_options['auto_filter']) ? intval($col_options['auto_filter']) : false; + $freeze_rows = isset($col_options['freeze_rows']) ? intval($col_options['freeze_rows']) : false; + $freeze_columns = isset($col_options['freeze_columns']) ? intval($col_options['freeze_columns']) : false; + self::initializeSheet($sheet_name, $col_widths, $auto_filter, $freeze_rows, $freeze_columns); $sheet = &$this->sheets[$sheet_name]; $sheet->columns = $this->initializeColumnTypes($header_types); if (!$suppress_row) @@ -229,8 +259,8 @@ public function writeSheetRow($sheet_name, array $row, $row_options=null) { $ht = isset($row_options['height']) ? floatval($row_options['height']) : 12.1; $customHt = isset($row_options['height']) ? true : false; - $hidden = isset($row_options['hidden']) ? boolval($row_options['hidden']) : false; - $collapsed = isset($row_options['collapsed']) ? boolval($row_options['collapsed']) : false; + $hidden = isset($row_options['hidden']) ? (bool)($row_options['hidden']) : false; + $collapsed = isset($row_options['collapsed']) ? (bool)($row_options['collapsed']) : false; $sheet->file_writer->write('