PHP处理CSV表格文件的常用操作方法总结


Posted in PHP onJuly 01, 2016

要做在线Excel表格编辑功能,Excel的xls文件格式的解析就是个问题,毕竟这是微软Office的私有专利格式.
所以要做的话还是用通用的csv(Comma Separated Value,逗号分隔值)格式吧.
各种办公软件都能识别csv表格,其实就是以特定分隔符(比如逗号)分隔单元格的表格.
拿PHP来说,fgetcsv读入csv表格,返回一个数组,
然后foreach输出成HTML的<table>,这步操作几行代码就能实现,非常简单.
工作量主要还在于浏览器前端,建议你用jQuery进行DOM和AJAX操作,
要实现phpMyAdmin那样细粒度双击单元格编辑,然后AJAX提交也不难,
或者整个表格写好后一次性$("form").serialize();然后AJAX提交也可以.

CSV表格的几条规则:
1.每一行的单元格内容之间用逗号分隔.
2.如果单元格的内容本身有逗号,这个单元格的内容将会用引号包含.
3.如果单元格的内容本身有引号:
(1)引号不在首或尾,这个单元格内容不会被引号包含.
(2)引号在首或尾,这个单元格内容会被引号包含,并且原来首尾的引号会被转义.

读写CSV

<?php
header('Content-Type: text/plain; charset=utf-8');

//导出CSV表格:数组转CSV
$arr = array (
  array('ab', 'cd'),
  array('"a,b"', '"c,d"'),
);
$fp = fopen('file.csv', 'w');
foreach ($arr as $row) {
  //将一行格式化为CSV并写入文件指针
  fputcsv($fp, $row);
}
fclose($fp);
unset($arr);

//导入CSV表格:CSV转数组
$fp = fopen('file.csv', 'r');
while ( ($row = fgetcsv($fp)) !== FALSE ) {
  //从文件指针中读入一行并解析CSV
  $arr[] = $row;
}
fclose($fp);
var_export($arr);

另存为一个独立文件
download.php:

<?php
$list = array (
  'aaa,bbb,ccc,dddd',
  '123,456,789',
  '"aaa","bbb"'
);
session_start();
$_SESSION['outputArray']=$list;
?>
<a href="test.php" target="_blank">下载csv文件</a>



test.php:


<?php
session_start();
$outputArray=$_SESSION['outputArray'];
header('Content-Type: application/csv');
header('Content-Disposition: attachment;filename="sales.csv"');
$output=fopen('php://output','w') or die("can not open");
foreach ($outputArray as $line) {
  fputcsv($output, split(',', $line));
}
fclose($output) or die("can not close");
?>



自动保存csv文件到指定地点
<?php

$list = array (
  'aaa,bbb,ccc,dddd',
  '123,456,789',
  '"aaa","bbb"'
);

$fp = fopen('file.csv', 'w');

foreach ($list as $line) {
  fputcsv($fp, split(',', $line));
}

fclose($fp);
?>
PHP 相关文章推荐
php array_slice函数的使用以及参数详解
Aug 30 PHP
mayfish 数据入库验证代码
Apr 30 PHP
php 大数据量及海量数据处理算法总结
May 07 PHP
解析php中call_user_func_array的作用
Jun 07 PHP
解决php接收shell返回的结果中文乱码问题
Jan 23 PHP
简单的php新闻发布系统教程
May 09 PHP
PHP读取txt文本文件并分页显示的方法
Mar 11 PHP
PHP将进程作为守护进程的方法
Mar 19 PHP
Smarty分页实现方法完整实例
May 11 PHP
php查找字符串中第一个非0的位置截取
Feb 27 PHP
PHP封装的验证码工具类定义与用法示例
Aug 22 PHP
基于PHP实现生成随机水印图片
Dec 09 PHP
PHP读书笔记整理_结构语句详解
Jul 01 #PHP
PHP安装GeoIP扩展根据IP获取地理位置及计算距离的方法
Jul 01 #PHP
php投票系统之增加与删除投票(管理员篇)
Jul 01 #PHP
PHP读书笔记_运算符详解
Jul 01 #PHP
php+MySql实现登录系统与输出浏览者信息功能
Jul 01 #PHP
php无法连接mysql数据库的正确解决方法
Jul 01 #PHP
Apache无法自动跳转却显示目录的解决方法
Nov 30 #PHP
You might like
PHP使用curl制作简易百度搜索
2016/11/03 PHP
php实现微信企业转账功能
2018/10/02 PHP
PHP PDOStatement::fetch讲解
2019/01/31 PHP
PHP连续签到功能实现方法详解
2019/12/04 PHP
Ext面向对象开发实践(续)
2008/11/18 Javascript
dropdownlist之间的互相联动实现(显示与隐藏)
2009/11/24 Javascript
Draggable Elements 元素拖拽功能实现代码
2011/03/30 Javascript
CSS鼠标响应事件经过、移动、点击示例介绍
2013/09/04 Javascript
html5+javascript制作简易画板附图
2014/04/25 Javascript
JavaScript实现生成GUID(全局统一标识符)
2014/09/05 Javascript
点评js异步加载的4种方式
2015/12/22 Javascript
浅析AngularJs HTTP响应拦截器
2015/12/28 Javascript
JavaScript头像上传插件源码分享
2016/03/29 Javascript
JavaScript常用正则验证函数实例小结【年龄,数字,Email,手机,URL,日期等】
2017/01/23 Javascript
BootStrap点击保存后实现模态框自动关闭的思路(模态框)
2017/09/26 Javascript
js 客户端打印html 并且去掉页眉、页脚的实例
2017/11/03 Javascript
Bootstrap 树控件使用经验分享(图文解说)
2017/11/06 Javascript
jQuery 操作 HTML 元素和属性的方法
2018/11/12 jQuery
Jquery高级应用Deferred对象原理及使用实例
2020/05/28 jQuery
JS如何在不同平台实现多语言方式
2020/07/16 Javascript
[46:12]完美世界DOTA2联赛循环赛 DM vs Matador BO2第一场 11.04
2020/11/04 DOTA
Python 第一步 hello world
2009/09/25 Python
python解析文件示例
2014/01/23 Python
详解Python验证码识别
2016/01/25 Python
使用Python的Flask框架来搭建第一个Web应用程序
2016/06/04 Python
对python判断是否回文数的实例详解
2019/02/08 Python
Python Pandas分组聚合的实现方法
2019/07/02 Python
Python 的 __str__ 和 __repr__ 方法对比
2020/09/02 Python
python 使用openpyxl读取excel数据
2021/02/18 Python
Python爬虫分析微博热搜关键词的实现代码
2021/02/22 Python
LN-CC英国:伦敦时尚生活的缩影
2019/09/01 全球购物
Java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
2012/05/30 面试题
后勤岗位职责
2013/11/26 职场文书
销售总监岗位职责
2014/01/04 职场文书
植物生产学专业求职信
2014/08/08 职场文书
如何让你的Nginx支持分布式追踪详解
2022/07/07 Servers