浏览代码

+ type price for fields double in exportXLSX

Piotr Labudda 5 年之前
父节点
当前提交
6cf7c831e0
共有 1 个文件被更改,包括 29 次插入4 次删除
  1. 29 4
      SE/se-lib/Route/ExportTableAjax.php

+ 29 - 4
SE/se-lib/Route/ExportTableAjax.php

@@ -157,7 +157,6 @@ class Route_ExportTableAjax extends RouteBase {
 			DBG::nicePrint($acl, '$acl');
 		}
 
-
 		$csvFileName = "Tabela-" . $acl->getName() . "-" . date("Y-m-d_H_s");
 		$labels = array();
 		foreach ($toExportFields as $fieldName) {
@@ -237,16 +236,40 @@ class Route_ExportTableAjax extends RouteBase {
 	}
 	function _exportToXLSX($acl, $items, $toExportFields, $format = 'xlsx') {
 		// https://github.com/mk-j/PHP_XLSXWriter
+
+		$DBG_OUTPUT = 0;
+		if ($DBG_OUTPUT) {
+			$items = array_slice($items, 0, 10);
+			DBG::nicePrint($acl, '$acl');
+		}
+
 		Lib::loadClass('Vendor_XLSXWriter');
 		$csvFileName = "Tabela-" . $acl->getName() . "-" . date("Y-m-d_H_s");
 		$labels = array();
+		$columnTypes = array();
+		// string	@
+		// integer	0
+		// date		YYYY-MM-DD
+		// datetime	YYYY-MM-DD HH:MM:SS
+		// time		HH:MM:SS
+		// price	#,##0.00
+		// 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);
+
+			$typeXLSL = 'string';
+			$xsdType = $acl->getXsdFieldType($fieldName);
+			switch ($xsdType) {
+				case 'xsd:double': $typeXLSL = 'price'; break;
+			}
+			$columnTypes[ $fieldName ] = $typeXLSL;
 		}
 		$xlsx = new Vendor_XLSXWriter();
 		$xlsx->writeSheetHeader('Sheet1', array_combine(
 			array_values($labels),
-			array_map(function ($label) { return 'string'; }, $labels)
+			// array_map(function ($label) { return 'string'; }, $labels)
+			array_values($columnTypes)
 		));
 		foreach ($items as $item) {
 			$row = array_map(function ($fieldName) use ($item) {
@@ -255,8 +278,10 @@ class Route_ExportTableAjax extends RouteBase {
 			$xlsx->writeSheetRow('Sheet1', $row);
 		}
 
-		header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=utf-8");
-		header("Content-Disposition: attachment; filename={$csvFileName}.xlsx");
+		if (!$DBG_OUTPUT) {
+			header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=utf-8");
+			header("Content-Disposition: attachment; filename={$csvFileName}.xlsx");
+		}
 		$xlsx->writeToStdOut();
 	}