1 简介
1.1 导出
在实际的工作项目中,经常需要将一些重要的数据库中存的数据导出成Excel,比如导出考勤报表,导出财务报表,导出业绩报表,导出销售报表等。CleverCode以前使用了两年的PHPExcel来制作Excel导出数据,但发现用PHPExcel生成Excel实在是太麻烦了,特别是控制单元格的颜色,合并单元格,给单元格设置长度等。这些设计一个Excel通常会需要花费一天的时间。后来CleverCode发现了一个简便的方法PHP导出xml格式的Excel,以前需要一天的工作量,现在半小时就搞定了,实在是事半功倍!
1.2 导入
同时有的项目也需要,将一些Excel数据导入到数据库中。比如银行给的银行流水,销售报表导入的数据库中。这个通常的做法都是使用PHPExcel。
虽然读取xml格式的Excel可以使用Xml parser, SimpleXML, XMLReader, DOMDocument等方式,但是CleverCode尝试过使用这些方式,发现太复杂,太费劲,没有PHPExcel好使。
所以当需要读取Excel的时候(包括xml格式的),CleverCode推荐使用PHPExcel库。
2 需求
某个集团需要各个地区的负责人将其负责的城市站的订单和销售额导入到数据库。 1)网站提供一个导入的销售报表模板。 2)每个负责人只能上传与下载各自负责城市的数据(权限检查)。 3)只用上传生成当年,当日的拥有的所有季度。比如今天是2015-05-26。那么只有生成2015一季度,与二季度。 如果是2015-12-01。则需要生成2015一,二,三,四季度。 4)显示本季度以前季度的数据。 5)本季度的数据默认全是0。 6)只能修改本季度的数据。
3 程序设计源码下载
4 设计网站页面
4.1 显示
4.2 display.php代码
PHP导入与导出xml格式的Excel
下载销售报表模板
Copier après la connexion
5 PHP导出xml格式的Excel(导出销售报表模板)
1)新建一个【销售报表.xlsx】。设计如下。
2)将【销售报表.xlsx】文件另存为【销售报表.xml】
3)打开【销售报表.xml】可以看到xml格式的数据。
4)找到table信息。删除掉ss:ExpandedColumnCount="5" ss:ExpandedRowCount="6"。这个限制死了表格的长度和宽度,所以必须去掉。
Copier après la connexion
改成
Copier après la connexion
5 PHP导出Excel业务逻辑代码(Excel.php)
'北京', '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. = ' 城市 | 2015一季度 | 2015二季度 |
订单 | 销售额 | 订单 | 销售额 |
'; // 输出数据 foreach ( $data as $row ) { $xml .= ' ' . $row['city'] . ' | ' . $row['order_1'] . ' | ' . $row['money_1'] . ' | ' . $row['order_2'] . ' | ' . $row['money_2'] . ' |
'; } $xml .= ' ........... '; return $xml; } }
Copier après la connexion
6 PHP导出Excel客户端代码(export.php)
main(); } start(); ?>
Copier après la connexion
6 PHP导入xml格式的Excel
1)下载销售模板后,填写其中的数据,然后点击页面中的上传按钮,上传Excel数据。
2) PHP导入的Excel业务逻辑代码(Excel.php)。这里使用了PHPExcel库。
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; } }
Copier après la connexion
3) PHP导入的Excel客户端代码(import.php)
main(); } start(); ?
Copier après la connexion
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
2023-03-15 16:54:01
2023-03-15 12:26:02
2023-03-14 18:58:01
2023-03-14 11:30:01
1970-01-01 08:00:00
2023-03-16 15:20:01
1970-01-01 08:00:00
1970-01-01 08:00:00
1970-01-01 08:00:00
1970-01-01 08:00:00
Recommandations populaires
Tutoriels populaires
Plus>
Recommandations populaires
Derniers téléchargements
Plus>