|
|
@@ -152,16 +152,21 @@ class Route_ExportTableAjax extends RouteBase {
|
|
|
// https://en.wikipedia.org/wiki/Microsoft_Excel#XML_Spreadsheet
|
|
|
|
|
|
$DBG_OUTPUT = 0;
|
|
|
- if ($DBG_OUTPUT) {
|
|
|
- $items = array_slice($items, 0, 10);
|
|
|
- DBG::nicePrint($acl, '$acl');
|
|
|
- }
|
|
|
|
|
|
$csvFileName = "Tabela-" . $acl->getName() . "-" . date("Y-m-d_H_s");
|
|
|
$labels = array();
|
|
|
foreach ($toExportFields as $fieldName) {
|
|
|
- $labels[ $fieldName ] = $acl->getFieldLabel($fieldName);
|
|
|
+ $label = $acl->getFieldLabel($fieldName);
|
|
|
+ $labels[ $fieldName ] = ($label) ? $label : $fieldName;
|
|
|
}
|
|
|
+
|
|
|
+ if ($DBG_OUTPUT) {
|
|
|
+ $items = array_slice($items, 0, 10);
|
|
|
+ DBG::nicePrint($acl, '$acl');
|
|
|
+ DBG::nicePrint($labels, '$labels');
|
|
|
+ DBG::nicePrint($toExportFields, '$toExportFields');
|
|
|
+ }
|
|
|
+
|
|
|
$xw = new XMLWriter();
|
|
|
$xw->openMemory();
|
|
|
if ($DBG_OUTPUT) $xw->setIndent(true); //set the indentation to true (if false all the xml will be written on one line)
|
|
|
@@ -173,6 +178,21 @@ class Route_ExportTableAjax extends RouteBase {
|
|
|
$xw->writeAttribute("xmlns:ss", "urn:schemas-microsoft-com:office:spreadsheet");
|
|
|
$xw->writeAttribute("xmlns:html", "http://www.w3.org/TR/REC-html40");
|
|
|
{
|
|
|
+ // TODO: format date 'Y-m-d' - not working in LibreOffice
|
|
|
+ // <Styles>
|
|
|
+ // <Style ss:ID="p5FieldType_Date">
|
|
|
+ // <NumberFormat ss:Format="yyyy\-mm\-dd"/>
|
|
|
+ // </Style>
|
|
|
+ // <Style ss:ID="p5FieldType_Date2">
|
|
|
+ // <!-- <NumberFormat ss:Format="YYYY\-MM\-DD"/> -->
|
|
|
+ // <NumberFormat ss:Format="YYYY\-MM\-DD"/>
|
|
|
+ // </Style>
|
|
|
+ // <Style ss:ID="p5FieldType_Date3">
|
|
|
+ // <!-- <NumberFormat ss:Format="YYYY\-MM\-DD"/> -->
|
|
|
+ // <DateFormat ss:Format="YYYY\-MM\-DD"/>
|
|
|
+ // </Style>
|
|
|
+ // </Styles>
|
|
|
+
|
|
|
$xw->startElement("Worksheet");
|
|
|
$xw->writeAttribute("ss:Name", "Sheet1");
|
|
|
{
|
|
|
@@ -200,6 +220,14 @@ class Route_ExportTableAjax extends RouteBase {
|
|
|
$xw->startElement('Cell');
|
|
|
{
|
|
|
$xw->startElement('Data');
|
|
|
+
|
|
|
+ // ss:Type:
|
|
|
+ // - <xsd:enumeration value="Number" />
|
|
|
+ // - <xsd:enumeration value="DateTime" />
|
|
|
+ // - <xsd:enumeration value="Boolean" />
|
|
|
+ // - <xsd:enumeration value="String" />
|
|
|
+ // - <xsd:enumeration value="Error" />
|
|
|
+
|
|
|
$xsdType = $acl->getXsdFieldType($fieldName);
|
|
|
switch ($xsdType) {
|
|
|
case 'xsd:double':
|
|
|
@@ -211,6 +239,15 @@ class Route_ExportTableAjax extends RouteBase {
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
+ // case 'xsd:date':
|
|
|
+ // {
|
|
|
+ // if (!empty($item[$fieldName])) {
|
|
|
+ // $xw->writeAttribute("ss:Type", "Date");
|
|
|
+ // } else {
|
|
|
+ // $xw->writeAttribute("ss:Type", "String");
|
|
|
+ // }
|
|
|
+ // break;
|
|
|
+ // }
|
|
|
default: $xw->writeAttribute("ss:Type", "String");
|
|
|
}
|
|
|
$xw->text($item[$fieldName]);
|
|
|
@@ -256,12 +293,15 @@ class Route_ExportTableAjax extends RouteBase {
|
|
|
// dollar [$$-1009]#,##0.00;[RED]-[$$-1009]#,##0.00
|
|
|
// euro #,##0.00 [$€-407];[RED]-#,##0.00 [$€-407]
|
|
|
foreach ($toExportFields as $fieldName) {
|
|
|
- $labels[ $fieldName ] = $acl->getFieldLabel($fieldName);
|
|
|
+ $label = $acl->getFieldLabel($fieldName);
|
|
|
+ $labels[ $fieldName ] = ($label) ? $label : $fieldName;
|
|
|
|
|
|
$typeXLSL = 'string';
|
|
|
$xsdType = $acl->getXsdFieldType($fieldName);
|
|
|
switch ($xsdType) {
|
|
|
case 'xsd:double': $typeXLSL = 'price'; break;
|
|
|
+ case 'xsd:date': $typeXLSL = 'date'; break;
|
|
|
+ case 'xsd:dateTime': $typeXLSL = 'datetime'; break;
|
|
|
}
|
|
|
$columnTypes[ $fieldName ] = $typeXLSL;
|
|
|
}
|