lvhao пре 2 часа
родитељ
комит
668bc032ed
1 измењених фајлова са 22 додато и 6 уклоњено
  1. 22 6
      core/CoreApp/controllers/Whlabel.php

+ 22 - 6
core/CoreApp/controllers/Whlabel.php

@@ -7397,12 +7397,19 @@ class Whlabel extends Start_Controller
 	//用XML(SpreadsheetML)格式导出excel,逻辑与_whlabelexcelzh一致,仅输出格式不同
 	//用XML(SpreadsheetML)格式导出excel,逻辑与_whlabelexcelzh一致,仅输出格式不同
 	public function _whlabelexcelzh()
 	public function _whlabelexcelzh()
 	{
 	{
-		$excelxml = function ($info_list, $headers, $numkeys, $filename) {
+		//$colwidths:按表头顺序设置各列宽度(单位≈字符数);$wrapcols:需要自动换行的列下标(从0开始)
+		$excelxml = function ($info_list, $headers, $numkeys, $filename, $colwidths = array(), $wrapcols = array()) {
 			$str = '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
 			$str = '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
 			$str .= '<?mso-application progid="Excel.Sheet"?>' . "\n";
 			$str .= '<?mso-application progid="Excel.Sheet"?>' . "\n";
 			$str .= '<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel">' . "\n";
 			$str .= '<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel">' . "\n";
+			$str .= '<Styles>' . "\n";
+			$str .= '<Style ss:ID="wrap"><Alignment ss:Vertical="Center" ss:WrapText="1"/></Style>' . "\n";
+			$str .= '</Styles>' . "\n";
 			$str .= '<Worksheet ss:Name="Sheet1">' . "\n";
 			$str .= '<Worksheet ss:Name="Sheet1">' . "\n";
 			$str .= '<Table>' . "\n";
 			$str .= '<Table>' . "\n";
+			foreach ($colwidths as $w) {
+				$str .= '<Column ss:Width="' . $w . '"/>' . "\n";
+			}
 			$str .= '<Row>' . "\n";
 			$str .= '<Row>' . "\n";
 			foreach ($headers as $h) {
 			foreach ($headers as $h) {
 				$str .= '<Cell><Data ss:Type="String">' . htmlspecialchars($h, ENT_QUOTES, 'UTF-8') . '</Data></Cell>' . "\n";
 				$str .= '<Cell><Data ss:Type="String">' . htmlspecialchars($h, ENT_QUOTES, 'UTF-8') . '</Data></Cell>' . "\n";
@@ -7410,16 +7417,19 @@ class Whlabel extends Start_Controller
 			$str .= '</Row>' . "\n";
 			$str .= '</Row>' . "\n";
 			foreach ($info_list as $row) {
 			foreach ($info_list as $row) {
 				$str .= '<Row>' . "\n";
 				$str .= '<Row>' . "\n";
+				$j = 0;
 				foreach ($row as $ke => $va) {
 				foreach ($row as $ke => $va) {
 					$va = (string)$va;
 					$va = (string)$va;
 					$va = str_replace('<br>', "\n", $va);
 					$va = str_replace('<br>', "\n", $va);
+					$wrapattr = in_array($j, $wrapcols) ? ' ss:StyleID="wrap"' : '';
 					if ($va === '') {
 					if ($va === '') {
-						$str .= '<Cell><Data ss:Type="String"></Data></Cell>' . "\n";
+						$str .= '<Cell' . $wrapattr . '><Data ss:Type="String"></Data></Cell>' . "\n";
 					} else if (in_array($ke, $numkeys) && is_numeric($va)) {
 					} else if (in_array($ke, $numkeys) && is_numeric($va)) {
-						$str .= '<Cell><Data ss:Type="Number">' . $va . '</Data></Cell>' . "\n";
+						$str .= '<Cell' . $wrapattr . '><Data ss:Type="Number">' . $va . '</Data></Cell>' . "\n";
 					} else {
 					} else {
-						$str .= '<Cell><Data ss:Type="String">' . htmlspecialchars($va, ENT_QUOTES, 'UTF-8') . '</Data></Cell>' . "\n";
+						$str .= '<Cell' . $wrapattr . '><Data ss:Type="String">' . htmlspecialchars($va, ENT_QUOTES, 'UTF-8') . '</Data></Cell>' . "\n";
 					}
 					}
+					$j++;
 				}
 				}
 				$str .= '</Row>' . "\n";
 				$str .= '</Row>' . "\n";
 			}
 			}
@@ -7492,7 +7502,10 @@ class Whlabel extends Start_Controller
 			$filename = $title . ".xls";
 			$filename = $title . ".xls";
 			$headers = array('仓库', 'SKU', '产品', '库存数量', '在途数量及预达日期', '在途+库存数量');
 			$headers = array('仓库', 'SKU', '产品', '库存数量', '在途数量及预达日期', '在途+库存数量');
 			$numkeys = array('number', 'hb');
 			$numkeys = array('number', 'hb');
-			$excelxml($rows, $headers, $numkeys, $filename);
+			//列宽与表头一一对应(单位≈字符数);SKU(1)、产品(2)、在途列(4)超宽自动换行
+			$colwidths = array(80, 300,450, 50, 120, 80);
+			$wrapcols = array(1, 2, 4);
+			$excelxml($rows, $headers, $numkeys, $filename, $colwidths, $wrapcols);
 		}
 		}
 		if (isset($_GET['excel'])) {
 		if (isset($_GET['excel'])) {
 			$warehouse = $this->input->get('warehouse', true);
 			$warehouse = $this->input->get('warehouse', true);
@@ -7542,7 +7555,10 @@ class Whlabel extends Start_Controller
 			$filename = $title . ".xls";
 			$filename = $title . ".xls";
 			$headers = array('仓库', 'SKU', '名称', '在途数量', '库存数量', '添加在途日期', '预达日期', '备注');
 			$headers = array('仓库', 'SKU', '名称', '在途数量', '库存数量', '添加在途日期', '预达日期', '备注');
 			$numkeys = array('num', 'features');
 			$numkeys = array('num', 'features');
-			$excelxml($zh, $headers, $numkeys, $filename);
+			//列宽与表头一一对应(单位≈字符数);SKU(1)、名称(2)、备注(7)超宽自动换行
+			$colwidths = array(18, 20, 50, 12, 12, 20, 12, 40);
+			$wrapcols = array(1, 2, 7);
+			$excelxml($zh, $headers, $numkeys, $filename, $colwidths, $wrapcols);
 		}
 		}
 	}
 	}