Heim >Backend-Entwicklung >PHP-Tutorial >PHP# Einige Strategien zum Exportieren von Daten nach Excel

PHP# Einige Strategien zum Exportieren von Daten nach Excel

WBOY
WBOYOriginal
2016-08-08 09:30:36954Durchsuche

PHP#DatenExcelEinige Strategien zum Exportieren

Export kann tatsächlich in verwendet werden Unter normalen Umständen sollten die von Excel exportierten Daten eher für Backups und Entwürfe verwendet werden Man kann sich nicht darauf verlassen, Daten aus dem Back-End-Geschäftssystem zu exportieren und dann manuell einzugreifen, aber die Realität sieht sehr dürftig aus. . .

Funktionen wie der Datenexport müssen nach Möglichkeit gekapselt werden. Es gibt nur einen Datenexport, und sein Wert wird sich in späteren Anpassungen und Änderungen der Geschäftsregeln wirklich widerspiegeln. Wenn ein typisches Anwendungssystem verschiedene Datenexportanforderungen hat, bedeutet dies, dass die Geschäftsanalyse dieses Anwendungssystems nicht gut genug oder sehr schlecht ist. Wenn Benutzer das Anwendungssystem nur zum Exportieren von Daten verwenden möchten, um ihre Geschäftsprozesse zu unterstützen, ist dies am erschreckendsten Die Situation ist: Der Abstand zwischen dem Benutzer und der Datenbank ist nur eine Exportschaltfläche. . .

Umgebung

1.PHP5.5.14 (cli) (erstellt: 9. September 2014, 19:09:25)

2.PHP Excel 1.7.8 (http://www.codeplex.com/PHPExcel)

Verarbeitungslogik

Tatsächlich besteht der entscheidende Punkt bei dieser Art von Problem darin, wie die Exportregeln definiert werden und ob sich der definierte Regelsatz an den Geschäftsprozess anpassen kann. Der einfachste Weg ist die Abstraktion Der Datenexportprozess wird in 3 Grundstufen unterteilt, und dann kann jede Stufe schrittweise verfeinert werden:

1. Definition von Exportregeln

2.Anpassung von Geschäftsdaten und Exportregeln

3.Exportregeln Analytische Konstruktion Excel

Beispiel

Dieses Beispiel implementiert die grundlegende Exportfunktion ohne jegliche Kapselung und konzentriert sich nicht auf Leistung oder andere Skalierbarkeitsprobleme.

<?php
namespace org\ybygjy\comp\excel;

/**
 * Excel组件封装
 * <p>1.统一处理工程中针对excel的数据导出</p>
 * @author WangYanCheng
 * @version 2015-1-22
 */
class ExcelComp {
	/**
	 * 构造函数
	 */
	public function __construct() {
		require_once 'org/ybygjy/library/excel/PHPExcel.php';
	}
	/**
	 * 测试入口
	 */
	public function doTest() {
		//构造原始数据
		$dataArray = $this->buildData();
		//导出
		$this->doExportData($dataArray);
	}
	/**
	 * 解析传递的原始数据并导出
	 * @param $dataArr
	 */
	public function doExportData($dataArr) {
		$phpObjExcel = new \PHPExcel();
		$worksSheet = $phpObjExcel->setActiveSheetIndex(0);
		//构造表头数据_Begin
		$tmpColTitles = [];
		$firstDataEntry = $dataArr[0];
		//分配列索引
		$colIndex = 0;
		foreach($firstDataEntry as $key => $val) {
			if (preg_match('/^_/', $key)) {
				continue;
			}
			if (is_array($val)) {
				//取array下的列名称
				$val = $val[0];
				$rowNums = count($val);
				foreach ($val as $innerKey => $innerValue) {
					$tmpColTitles[] = array(
						'parentKey' => $key,
						'key' => $innerKey,
						'colIndex' => $colIndex
					);
					$colIndex++;
				}
			} else {
				$tmpColTitles[] = array(
					'key'=>$key,
					'colIndex'=>$colIndex
				);
				$colIndex++;
			}
		}
		for($i = 0; $i < count($tmpColTitles); $i++) {
			$tmpObj = $tmpColTitles[$i];
			$key = $tmpObj[&#39;key&#39;];
			$colIndex = $tmpObj[&#39;colIndex&#39;];
			$worksSheet->setCellValueByColumnAndRow($colIndex,1,$key);	
		}
		//构造表头数据_End
		//填充单元格数据
		$currRow = 2;
		foreach ($dataArr as $dataEntry) {
			$mergeRow = $dataEntry['_DIMENSION'];
			foreach ($tmpColTitles as $colEntry) {
				$key = $colEntry['key'];
				$colIndex = $colEntry['colIndex'];
				$parentKey = (isset($colEntry['parentKey']) ? $colEntry['parentKey'] : null);
				if (empty($parentKey)) {
					$value = $dataEntry[$key];
					if ($mergeRow == 1) {
						$worksSheet->setCellValueByColumnAndRow($colIndex, $currRow, $value);
					} else {
						$worksSheet->mergeCellsByColumnAndRow($colIndex, $currRow, $colIndex, ($currRow + $mergeRow - 1))->setCellValueByColumnAndRow($colIndex, $currRow, $value);
					}
				} else {
					$tmpDataArr = $dataEntry[$parentKey];
					$innerRow = $currRow;
					for($index = 0; $index < count($tmpDataArr); $index++) {
						$innerDataEntry = $tmpDataArr[$index];
						$value = $innerDataEntry[$key];
						$worksSheet->setCellValueByColumnAndRow($colIndex, $innerRow, $value);
						$innerRow++;
					}
				}
			}
			$currRow += $mergeRow;
		}
		header('Content-Type: application/vnd.ms-excel');
		header('Content-Type: application/force-download');
		header('Content-Type: application/octet-stream');
		header('Content-Type: application/download');
		header('Content-Disposition: attachment;filename="HelloWord.xls"');
		header('Cache-Control: max-age=0');
		header('Cache-Control: max-age=1');
		header('Cache-Control: no-cache, must-revalidate');
		header('Pragma: public');
		$objWriter = \PHPExcel_IOFactory::createWriter($phpObjExcel, 'Excel5');
		$objWriter->save('php://output');
	}
	/**
	 * 构造测试数据
	 * @return multitype:multitype:string number multitype:multitype:string
	 */
	private function buildData() {
		$rtnData = array(
			array(
				'name'=>'YanCheng_01',
				'age'=>'20',
				'addr'=>array(
					array(
						'country'=>'China',
						'province'=>'ShanDong'
					),
					array(
						'country'=>'China',
						'province'=>'BeiJing'
					)
				),
				'_DIMENSION'=>2
			),
			array(
				'name'=>'YanCheng_02',
				'age'=>'21',
				'addr'=>array(
					array(
						'country'=>'China',
						'province'=>'LanZhou'
					),
					array(
						'country'=>'China',
						'province'=>'NingXia'
					)
				),
				'_DIMENSION'=>2
			),
			array(
				'name'=>'YanCheng_03',
				'age'=>'22',
				'addr'=>array(
					array(
						'country'=>'China',
						'province'=>'JiaYuGuan'
					)
				),
				'_DIMENSION'=>1
			)
		);
		return $rtnData;
	}
}

Das Obige stellt einige Strategien zum Exportieren von PHP#-Daten nach Excel vor, einschließlich einiger Aspekte davon. Ich hoffe, dass es für Freunde hilfreich sein wird, die sich für PHP-Tutorials interessieren.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn