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 相关文章推荐
搜索引擎技术核心揭密
Oct 09 PHP
基于数据库的在线人数,日访问量等统计
Oct 09 PHP
PHP Error与Logging函数的深入理解
Jun 03 PHP
用 Composer构建自己的 PHP 框架之使用 ORM
Oct 30 PHP
php判断文件上传类型及过滤不安全数据的方法
Dec 17 PHP
PHP中的闭包(匿名函数)浅析
Feb 07 PHP
PHP实现批量检测网站是否能够正常打开的方法
Aug 23 PHP
php根据数据id自动生成编号的实现方法
Oct 16 PHP
PHP 二级子目录(后台目录)设置二级域名
Mar 02 PHP
PHP 中TP5 Request 请求对象的实例详解
Jul 31 PHP
PHP通过get方法获得form表单数据方法总结
Sep 12 PHP
safari下载文件自动加了html后缀问题
Nov 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
不用数据库的多用户文件自由上传投票系统(3)
2006/10/09 PHP
PHP IN_ARRAY 函数使用注意事项
2010/07/24 PHP
有关php运算符的知识大全
2011/11/03 PHP
php反射应用示例
2014/02/25 PHP
yii实现创建验证码实例解析
2014/07/31 PHP
ecshop适应在PHP7的修改方法解决报错的实现
2016/11/01 PHP
AJAX架构之Dojo篇
2007/04/10 Javascript
Ext面向对象开发实践(续)
2008/11/18 Javascript
jquery nth-child()选择器的简单应用
2010/07/10 Javascript
让你的博文自动带上缩址的实现代码,方便发到微博客上
2010/12/28 Javascript
jQuery用unbind方法去掉hover事件及其他方法介绍
2013/03/18 Javascript
javascript 实现键盘上下左右功能的小例子
2013/09/15 Javascript
JavaScript动态插入script的基本思路及实现函数
2013/11/11 Javascript
jQuery scrollFix滚动定位插件
2015/04/01 Javascript
jQuery插件ajaxfileupload.js实现上传文件
2020/10/23 Javascript
jQuery 判断是否包含在数组中Array[]的方法
2016/08/03 Javascript
详解vue.js全局组件和局部组件
2017/04/10 Javascript
gulp安装以及打包合并的方法教程
2017/11/19 Javascript
基于JavaScript实现抽奖系统
2018/01/16 Javascript
小程序异步问题之多个网络请求依次执行并依次收集请求结果
2019/05/05 Javascript
Using Django with GAE Python 后台抓取多个网站的页面全文
2016/02/17 Python
wxpython布局的实现方法
2019/11/01 Python
Python semaphore evevt生产者消费者模型原理解析
2020/03/18 Python
基于Django快速集成Echarts代码示例
2020/12/01 Python
python接口自动化框架实战
2020/12/23 Python
纯CSS实现聊天框小尖角、气泡效果
2014/04/04 HTML / CSS
Mio Skincare美国官网:身体紧致及孕期身体护理
2017/03/05 全球购物
巴西购物网站:Onofre Agora
2020/06/08 全球购物
顶碗少年教学反思
2014/02/21 职场文书
男女朋友协议书
2014/04/23 职场文书
2015年世界艾滋病日活动总结
2015/03/24 职场文书
趣味运动会新闻稿
2015/07/17 职场文书
家长会感言
2015/08/01 职场文书
JavaScript 事件捕获冒泡与捕获详情
2021/11/11 Javascript
浅谈mysql哪些情况会导致索引失效
2021/11/20 MySQL
Android Rxjava3 使用场景详解
2022/04/07 Java/Android