


How to import and export data in php with Excel graphics and text code sharing in xml format
1 Introduction
1.1 Export
In actual work projects, it is often necessary to export data stored in some important databases into Excel, such as exporting attendance reports and exporting financial statements. Export performance reports, export sales reports, etc. CleverCode used PHPExcel for two years to create Excel export data, but found that it was too troublesome to use PHPExcel to generate Excel, especially controlling the color of cells, merging cells, setting lengths for cells, etc. It usually takes a day to design one of these in Excel. Later, CleverCode discovered a simple method to export Excel in xml format using PHP. It used to take a day's work, but now it can be done in half an hour. It's really twice the result with half the effort!
1.2 Import
At the same time, some projects also need to import some Excel data into the database. For example, the bank statements provided by the bank and the sales reports are imported into the database. The usual approach is to use PHPExcel.
Although you can use Xml parser, SimpleXML, XMLReader, DOMDocument and other methods to read Excel in xml format, CleverCode has tried to use these methods and found that they are too complicated and laborious, and are not as useful as PHPExcel.
So when you need to read Excel (including xml format), CleverCode recommends using the PHPExcel library.
2 Requirement
A certain group needs the person in charge of each region to import the orders and sales of the city stations they are responsible for into the database.
1) The website provides an imported sales report template.
2) Each person in charge can only upload and download data for the city they are responsible for (permission check).
3) Only upload to generate all quarters owned by the current year and that day. For example, today is 2015-05-26. Then only the first quarter and second quarter of 2015 are generated.
If it is 2015-12-01. You need to generate the first, second, third and fourth quarter of 2015.
4) Display the data of previous quarters of this quarter.
5) The data for this quarter are all 0 by default.
6) Only the data for this quarter can be modified.
3 Programming source code download
4 Design website page
4.1 Display
4.2 display.php code
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gbk" /> <title>PHP导入与导出xml格式的Excel</title> <style type="text/css"> body{ font-size:14px;} input{ vertical-align:middle; margin:0; padding:0} .file-box{ position:relative;width:340px} .txt{ height:22px; border:1px solid #cdcdcd; width:180px;} .btn{ background-color:#FFF; border:1px solid #CDCDCD;height:24px; width:70px;} .file{ position:absolute; top:0; right:80px; height:24px; filter:alpha(opacity:0); opacity: 0;width:260px } </style> </head> <body> <p class="file-box"> <form action="" method="post" enctype="multipart/form-data"> <input type='text' name='textfield' id='textfield' class='txt' /> <input type='button' class='btn' value='浏览...' /> <input type="file" name="fileField" class="file" id="fileField" size="28" onchange="document.getElementById('textfield').value=this.value" /> <input type="submit" name="submit" class="btn" value="上传" /> </form> <a href="export.php">下载销售报表模板</a> </p> </body> </html>
5 PHP exports Excel in xml format (export sales report template)
1) Create a new [sales report.xlsx]. The design is as follows.
2) Save the [Sales Report.xlsx] file as [Sales Report.xml]
#3) Open [Sales Report.xml] to see the data in xml format.
4) Find table information. Delete ss:ExpandedColumnCount="5" ss:ExpandedRowCount="6". This restriction limits the length and width of the table, so it must be removed.
<Table ss:ExpandedColumnCount="5" ss:ExpandedRowCount="6" x:FullColumns="1" x:FullRows="1" ss:StyleID="s23" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="18.75">
Change to
<Table x:FullColumns="1" x:FullRows="1" ss:StyleID="s23" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="18.75">
<?php /** * Excel.php * * Excel操作 * * Copyright (c) 2015 http://blog.csdn.net/CleverCode * * modification history: * -------------------- * 2015/5/14, by CleverCode, Create * */ class Excel{ /** * 导出excel * * @param int $userid 用户编号 * @return string $xmlStr */ public static function export($userid){ // 根据不同用户的权限,获取不同的数据 $data = self::getExportData($personid); // 获取字符串,如果excel的列是固定的可以通过Smarty方式获取 // 但是如果excel的列需要通过动态生成,则可以通过php组合字符串。 // $xmlStr = self::getXmlStrBySmarty($data); // 这个需要根据当前日期动态的生成有几个季度 $xmlStr = self::getXmlStrByPHP($data); return $xmlStr; } /** * 生成excel数据 * * @param int $userid 用户编号 * @return array 结果数据 */ public static function getExportData($userid){ if (!is_int($userid)) { return array(); } $infoBJ = array( 'city' => '北京', 'order_1' => 100, 'money_1' => 10000, 'order_2' => 200, 'money_2' => 40000 ); $infoTJ = array( 'city' => '天津', 'order_1' => 50, 'money_1' => 1000, 'order_2' => 100, 'money_2' => 2000 ); $infoGZ = array( 'city' => '广州', 'order_1' => 50, 'money_1' => 1000, 'order_2' => 100, 'money_2' => 2000 ); // 根据不同用户的权限,获取不同的数据 if (is_admin($userid)) { $data[] = $infoBJ; $data[] = $infoTJ; $data[] = $infoGZ; } else { $data[] = $infoBJ; } return $data; } /** * 通过Smarty方式获取xml字符串 * * @param array $data 结果集 * @return string $xmlStr */ public static function getXmlStrBySmarty($data){ require_once 'Smarty.class.php'; $smarty = new Smarty(); $tpl = 'file/export.tpl'; $smarty->assign('list', $data); // capture the output // 捕获输出 $xml = $smarty->fetch($tpl); return $xml; } /** * 通过PHP组合字符串方式获取xml字符串(可以动态扩展列) * * @param array $data 结果集 * @return string $xmlStr */ public static function getXmlStrByPHP($data){ $xml = ' <?xml version="1.0"?> <?mso-application progid="Excel.Sheet"?> <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" ............ </Style> </Styles> <Worksheet ss:Name="Sheet1"> <Table x:FullColumns="1" x:FullRows="1" ss:StyleID="s16" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="18.75"> '; //可以根据季度的多少动态扩展列,这里不做说明,请自行尝试。 $xml. = ' <Row ss:AutoFitHeight="0"> <Cell ss:MergeDown="1" ss:StyleID="m42513364"><Data ss:Type="String">城市</Data></Cell> <Cell ss:MergeAcross="1" ss:StyleID="s25"><Data ss:Type="String">2015一季度</Data></Cell> <Cell ss:MergeAcross="1" ss:StyleID="m42513344"><Data ss:Type="String">2015二季度</Data></Cell> </Row> <Row ss:AutoFitHeight="0"> <Cell ss:Index="2" ss:StyleID="s17"><Data ss:Type="String">订单</Data></Cell> <Cell ss:StyleID="s17"><Data ss:Type="String">销售额</Data></Cell> <Cell ss:StyleID="s17"><Data ss:Type="String">订单</Data></Cell> <Cell ss:StyleID="s17"><Data ss:Type="String">销售额</Data></Cell> </Row> '; // 输出数据 foreach ( $data as $row ) { $xml .= ' <Row ss:AutoFitHeight="0"> <Cell ss:StyleID="s18"><Data ss:Type="String">' . $row['city'] . '</Data></Cell> <Cell ss:StyleID="s19"><Data ss:Type="Number">' . $row['order_1'] . '</Data></Cell> <Cell ss:StyleID="s19"><Data ss:Type="Number">' . $row['money_1'] . '</Data></Cell> <Cell ss:StyleID="s19"><Data ss:Type="Number">' . $row['order_2'] . '</Data></Cell> <Cell ss:StyleID="s19"><Data ss:Type="Number">' . $row['money_2'] . '</Data></Cell> </Row> '; } $xml .= ' <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel"> ........... </Workbook> '; return $xml; } }6 PHP export Excel client code (export.php)
<?php /** * export.php * * 导出excel * * Copyright (c) 2015 http://blog.csdn.net/CleverCode * * modification history: * -------------------- * 2015/5/14, by CleverCode, Create * */ // Excel类 include_once ('Excel.php'); /* * 客户端类 * 让客户端和业务逻辑尽可能的分离,降低客户端和业务逻辑算法的耦合, * 使业务逻辑的算法更具有可移植性 */ class Client{ public function main(){ // 获取xml格式字符串 $xmlStr = Excel::export(1); // 头部 $filename = '销售报表模板'; header("Content-Type: application/vnd.ms-excel; charset=UTF-8"); header("Content-Disposition: inline; filename=\"$filename.xls\""); header("Content-Transfer-Encoding: binary"); header("Pragma: public"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); // 输出字符串 echo $xmlStr; exit(); } } /** * 程序入口 */ function start(){ $client = new Client(); $client->main(); } start(); ?>6 PHP import Excel in xml format1) After downloading the sales template, fill in the data and click on the page Click the upload button to upload Excel data.
<?php /** * Excel.php * * Excel操作 * * Copyright (c) 2015 http://blog.csdn.net/CleverCode * * modification history: * -------------------- * 2015/5/14, by CleverCode, Create * */ class Excel{ /* * 读取Excel格式的数据(可以读取xml格式数据) * * @param string $filename excel文件 * @param string $startRow 开始行 * @param string $endRow 结束行 * @param string $startColumn 开始列 * @param string $endColumn 结束列 * @return array excel结果集数据 */ public static function read($filename, $startRow = 1, $endRow = null, $startColumn = 0, $endColumn = null){ $excelData = array(); if (!file_exists($filename)) { return $excelData; } require_once 'PHPExcel/PHPExcel.php'; require_once 'PHPExcel/PHPExcel/IOFactory.php'; // 加载excel文件 $objPHPExcel = PHPExcel_IOFactory::load($filename); // 获取焦点Sheet $objWorksheet = $objPHPExcel->getActiveSheet(); // 获取总行 $totalRows = $objWorksheet->getHighestRow(); // 获取总行数 // 获取总列 $highestColumn = $objWorksheet->getHighestColumn(); $totalColumns = PHPExcel_Cell::columnIndexFromString($highestColumn); // 开始行 if (!is_int($startRow) || $startRow < 1) { $startRow = 1; } // 结束行 if ($endRow == null || !is_int($endRow) || $endRow > $totalRows) { $endRow = $totalRows; } // 开始列 if (!is_int($startColumn) || $startColumn < 0) { $startColumn = 0; } // 结束列 if ($endColumn == null || !is_int($endColumn) || $endColumn > $totalColumns) { $endColumn = $totalColumns; } // 读取数据 for($rowNum = $startRow; $rowNum <= $endRow; $rowNum++) { for($colNum = $startColumn; $colNum < $endColumn; $colNum++) { $item = $objWorksheet->getCellByColumnAndRow($colNum, $rowNum); $exValue = trim($item->getValue()); $excelData[$rowNum][$colNum] = $exValue; } } return $excelData; } }
3) PHP imported Excel client code (import.php)
<?php /** * import.php * * 导入excel * * Copyright (c) 2015 http://blog.csdn.net/CleverCode * * modification history: * -------------------- * 2015/5/14, by CleverCode, Create * */ // Excel类 include_once ('Excel.php'); /* * 客户端类 * 让客户端和业务逻辑尽可能的分离,降低客户端和业务逻辑算法的耦合, * 使业务逻辑的算法更具有可移植性 */ class Client{ public function main(){ if (!$_FILES['file']) { exit(); } // 从第3行开始读取Excel数据 $datas = Excel::read($_FILES['file']['tmp_name'], 3); // 将$datas保存到数据库 // .... } } /** * 程序入口 */ function start(){ $client = new Client(); $client->main(); } start(); ?
The above is the detailed content of How to import and export data in php with Excel graphics and text code sharing in xml format. For more information, please follow other related articles on the PHP Chinese website!

To protect the application from session-related XSS attacks, the following measures are required: 1. Set the HttpOnly and Secure flags to protect the session cookies. 2. Export codes for all user inputs. 3. Implement content security policy (CSP) to limit script sources. Through these policies, session-related XSS attacks can be effectively protected and user data can be ensured.

Methods to optimize PHP session performance include: 1. Delay session start, 2. Use database to store sessions, 3. Compress session data, 4. Manage session life cycle, and 5. Implement session sharing. These strategies can significantly improve the efficiency of applications in high concurrency environments.

Thesession.gc_maxlifetimesettinginPHPdeterminesthelifespanofsessiondata,setinseconds.1)It'sconfiguredinphp.iniorviaini_set().2)Abalanceisneededtoavoidperformanceissuesandunexpectedlogouts.3)PHP'sgarbagecollectionisprobabilistic,influencedbygc_probabi

In PHP, you can use the session_name() function to configure the session name. The specific steps are as follows: 1. Use the session_name() function to set the session name, such as session_name("my_session"). 2. After setting the session name, call session_start() to start the session. Configuring session names can avoid session data conflicts between multiple applications and enhance security, but pay attention to the uniqueness, security, length and setting timing of session names.

The session ID should be regenerated regularly at login, before sensitive operations, and every 30 minutes. 1. Regenerate the session ID when logging in to prevent session fixed attacks. 2. Regenerate before sensitive operations to improve safety. 3. Regular regeneration reduces long-term utilization risks, but the user experience needs to be weighed.

Setting session cookie parameters in PHP can be achieved through the session_set_cookie_params() function. 1) Use this function to set parameters, such as expiration time, path, domain name, security flag, etc.; 2) Call session_start() to make the parameters take effect; 3) Dynamically adjust parameters according to needs, such as user login status; 4) Pay attention to setting secure and httponly flags to improve security.

The main purpose of using sessions in PHP is to maintain the status of the user between different pages. 1) The session is started through the session_start() function, creating a unique session ID and storing it in the user cookie. 2) Session data is saved on the server, allowing data to be passed between different requests, such as login status and shopping cart content.

How to share a session between subdomains? Implemented by setting session cookies for common domain names. 1. Set the domain of the session cookie to .example.com on the server side. 2. Choose the appropriate session storage method, such as memory, database or distributed cache. 3. Pass the session ID through cookies, and the server retrieves and updates the session data based on the ID.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

mPDF
mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

SublimeText3 English version
Recommended: Win version, supports code prompts!

WebStorm Mac version
Useful JavaScript development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

SublimeText3 Linux new version
SublimeText3 Linux latest version