Разбил файл exceltable на классы
This commit is contained in:
parent
b26e521657
commit
7ce493414e
5 changed files with 135 additions and 132 deletions
|
|
@ -1,7 +1,5 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
require_once 'tools/string.php';
|
|
||||||
|
|
||||||
class Database_PDOStatement extends PDOStatement implements IteratorAggregate
|
class Database_PDOStatement extends PDOStatement implements IteratorAggregate
|
||||||
{
|
{
|
||||||
protected $cursorPos = 0;
|
protected $cursorPos = 0;
|
||||||
|
|
@ -88,7 +86,7 @@ class Database_PDOStatement extends PDOStatement implements IteratorAggregate
|
||||||
}
|
}
|
||||||
|
|
||||||
function getArray($name) {
|
function getArray($name) {
|
||||||
return strToArray($this->fields[$name]);
|
return Tools_String::strToArray($this->fields[$name]);
|
||||||
}
|
}
|
||||||
|
|
||||||
function getRecordCount() {
|
function getRecordCount() {
|
||||||
|
|
|
||||||
16
src/Excel/DataTime.php
Normal file
16
src/Excel/DataTime.php
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
class Excel_DateTime
|
||||||
|
{
|
||||||
|
public $value;
|
||||||
|
|
||||||
|
function __construct($value)
|
||||||
|
{
|
||||||
|
$this->value = intval($value);
|
||||||
|
}
|
||||||
|
|
||||||
|
function getString()
|
||||||
|
{
|
||||||
|
return date('Y-m-d\TH:i:s.u', $this->value);
|
||||||
|
}
|
||||||
|
}
|
||||||
100
src/Excel/Document.php
Normal file
100
src/Excel/Document.php
Normal file
|
|
@ -0,0 +1,100 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Документ
|
||||||
|
*/
|
||||||
|
class Excel_Document {
|
||||||
|
static $ns = "urn:schemas-microsoft-com:office:spreadsheet";
|
||||||
|
private $table = array ();
|
||||||
|
protected $styles = array();
|
||||||
|
|
||||||
|
function addTable($table) {
|
||||||
|
$this->table [] = $table;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Добавление стиля к документу
|
||||||
|
* @param $name string Имя стиля
|
||||||
|
* @param $values array Параметры стиля
|
||||||
|
* @param $type Тип стиля
|
||||||
|
*/
|
||||||
|
function setStyle ($name, array $values, $type = 'Interior')
|
||||||
|
{
|
||||||
|
if(!isset($this->styles[$name])) {
|
||||||
|
$this->styles[$name] = array();
|
||||||
|
}
|
||||||
|
$this->styles[$name][$type] = $values;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Генерация стилей
|
||||||
|
*/
|
||||||
|
private function createStyles (XMLWriter $doc) {
|
||||||
|
$doc->startElement('Styles');
|
||||||
|
foreach ($this->styles as $name => $sn) {
|
||||||
|
$doc->startElement('Style');
|
||||||
|
$doc->writeAttribute('ss:ID', $name);
|
||||||
|
foreach ($sn as $type => $s) {
|
||||||
|
// Стиль Borders - составной
|
||||||
|
if ($type == 'Borders') {
|
||||||
|
$doc->startElement('Borders');
|
||||||
|
foreach ($s as $border) {
|
||||||
|
/*.array.*/$border = $border;
|
||||||
|
$doc->startElement('Border');
|
||||||
|
foreach ($border as $key => $value) {
|
||||||
|
$doc->writeAttribute('ss:' . $key, $value);
|
||||||
|
}
|
||||||
|
$doc->endElement();
|
||||||
|
}
|
||||||
|
$doc->endElement();
|
||||||
|
} else {
|
||||||
|
$doc->startElement($type);
|
||||||
|
foreach ($s as $key => $value) {
|
||||||
|
$doc->writeAttribute('ss:' . $key, $value);
|
||||||
|
}
|
||||||
|
$doc->endElement();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$doc->endElement();
|
||||||
|
}
|
||||||
|
$doc->endElement();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Преобразует переводы строки в спец символы
|
||||||
|
*/
|
||||||
|
function clean ($s) {
|
||||||
|
assert(is_string($s));
|
||||||
|
|
||||||
|
return strtr($s, array ("\n" => " "));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Сохраняет таблицу в формате Office 2003 XML
|
||||||
|
* http://en.wikipedia.org/wiki/Microsoft_Office_XML_formats
|
||||||
|
*/
|
||||||
|
function save($filename)
|
||||||
|
{
|
||||||
|
$doc = new XMLWriter();
|
||||||
|
$doc->openURI($filename);
|
||||||
|
$doc->setIndent(false);
|
||||||
|
$doc->startDocument('1.0','utf-8');
|
||||||
|
$doc->startElement('Workbook');
|
||||||
|
$doc->writeAttribute('xmlns', self::$ns);
|
||||||
|
$doc->writeAttribute('xmlns:ss', self::$ns);
|
||||||
|
|
||||||
|
$this->createStyles($doc);
|
||||||
|
|
||||||
|
foreach ($this->table as $table) {
|
||||||
|
if ($table instanceof Excel_Table) {
|
||||||
|
$table->createTable($doc);
|
||||||
|
} else {
|
||||||
|
$table_data = call_user_func($table);
|
||||||
|
$table_data->createTable($doc);
|
||||||
|
unset($table_data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$doc->endElement();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
17
src/Excel/Number.php
Normal file
17
src/Excel/Number.php
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
class Excel_Number
|
||||||
|
{
|
||||||
|
public $value;
|
||||||
|
|
||||||
|
function __construct($value)
|
||||||
|
{
|
||||||
|
$this->value = intval($value);
|
||||||
|
}
|
||||||
|
|
||||||
|
function getString()
|
||||||
|
{
|
||||||
|
return $this->value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -1,35 +1,5 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
class Excel_Number
|
|
||||||
{
|
|
||||||
public $value;
|
|
||||||
|
|
||||||
function __construct($value)
|
|
||||||
{
|
|
||||||
$this->value = intval($value);
|
|
||||||
}
|
|
||||||
|
|
||||||
function getString()
|
|
||||||
{
|
|
||||||
return $this->value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class Excel_DateTime
|
|
||||||
{
|
|
||||||
public $value;
|
|
||||||
|
|
||||||
function __construct($value)
|
|
||||||
{
|
|
||||||
$this->value = intval($value);
|
|
||||||
}
|
|
||||||
|
|
||||||
function getString()
|
|
||||||
{
|
|
||||||
return date('Y-m-d\TH:i:s.u', $this->value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Клетка таблицы
|
* Клетка таблицы
|
||||||
*/
|
*/
|
||||||
|
|
@ -68,7 +38,7 @@ class TableRow
|
||||||
/**
|
/**
|
||||||
* Таблица
|
* Таблица
|
||||||
*/
|
*/
|
||||||
class ExcelTable
|
class Excel_Table
|
||||||
{
|
{
|
||||||
static $index;
|
static $index;
|
||||||
private $name;
|
private $name;
|
||||||
|
|
@ -339,101 +309,3 @@ class ExcelTable
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Документ
|
|
||||||
*/
|
|
||||||
class ExcelDocument {
|
|
||||||
static $ns = "urn:schemas-microsoft-com:office:spreadsheet";
|
|
||||||
private $table = array ();
|
|
||||||
protected $styles = array();
|
|
||||||
|
|
||||||
function addTable($table) {
|
|
||||||
$this->table [] = $table;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Добавление стиля к документу
|
|
||||||
* @param $name string Имя стиля
|
|
||||||
* @param $values array Параметры стиля
|
|
||||||
* @param $type Тип стиля
|
|
||||||
*/
|
|
||||||
function setStyle ($name, array $values, $type = 'Interior')
|
|
||||||
{
|
|
||||||
if(!isset($this->styles[$name])) {
|
|
||||||
$this->styles[$name] = array();
|
|
||||||
}
|
|
||||||
$this->styles[$name][$type] = $values;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Генерация стилей
|
|
||||||
*/
|
|
||||||
private function createStyles (XMLWriter $doc) {
|
|
||||||
$doc->startElement('Styles');
|
|
||||||
foreach ($this->styles as $name => $sn) {
|
|
||||||
$doc->startElement('Style');
|
|
||||||
$doc->writeAttribute('ss:ID', $name);
|
|
||||||
foreach ($sn as $type => $s) {
|
|
||||||
// Стиль Borders - составной
|
|
||||||
if ($type == 'Borders') {
|
|
||||||
$doc->startElement('Borders');
|
|
||||||
foreach ($s as $border) {
|
|
||||||
/*.array.*/$border = $border;
|
|
||||||
$doc->startElement('Border');
|
|
||||||
foreach ($border as $key => $value) {
|
|
||||||
$doc->writeAttribute('ss:' . $key, $value);
|
|
||||||
}
|
|
||||||
$doc->endElement();
|
|
||||||
}
|
|
||||||
$doc->endElement();
|
|
||||||
} else {
|
|
||||||
$doc->startElement($type);
|
|
||||||
foreach ($s as $key => $value) {
|
|
||||||
$doc->writeAttribute('ss:' . $key, $value);
|
|
||||||
}
|
|
||||||
$doc->endElement();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$doc->endElement();
|
|
||||||
}
|
|
||||||
$doc->endElement();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Преобразует переводы строки в спец символы
|
|
||||||
*/
|
|
||||||
function clean ($s) {
|
|
||||||
assert(is_string($s));
|
|
||||||
|
|
||||||
return strtr($s, array ("\n" => " "));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Сохраняет таблицу в формате Office 2003 XML
|
|
||||||
* http://en.wikipedia.org/wiki/Microsoft_Office_XML_formats
|
|
||||||
*/
|
|
||||||
function save($filename)
|
|
||||||
{
|
|
||||||
$doc = new XMLWriter();
|
|
||||||
$doc->openURI($filename);
|
|
||||||
$doc->setIndent(false);
|
|
||||||
$doc->startDocument('1.0','utf-8');
|
|
||||||
$doc->startElement('Workbook');
|
|
||||||
$doc->writeAttribute('xmlns', self::$ns);
|
|
||||||
$doc->writeAttribute('xmlns:ss', self::$ns);
|
|
||||||
|
|
||||||
$this->createStyles($doc);
|
|
||||||
|
|
||||||
foreach ($this->table as $table) {
|
|
||||||
if ($table instanceof ExcelTable) {
|
|
||||||
$table->createTable($doc);
|
|
||||||
} else {
|
|
||||||
$table_data = call_user_func($table);
|
|
||||||
$table_data->createTable($doc);
|
|
||||||
unset($table_data);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$doc->endElement();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue