Переглянути джерело

fixed labels in export to XSL and XLSX; + date and datetime format in export XLSX

Piotr Labudda 5 роки тому
батько
коміт
10362808a1
1 змінених файлів з 46 додано та 6 видалено
  1. 46 6
      SE/se-lib/Route/ExportTableAjax.php

+ 46 - 6
SE/se-lib/Route/ExportTableAjax.php

@@ -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;
 		}