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 中的一些经验积累
Oct 09 PHP
PHP 一个比较完善的简单文件上传
Mar 25 PHP
PHP XML操作的各种方法解析(比较详细)
Jun 17 PHP
免费手机号码归属地API查询接口和PHP使用实例分享
Apr 10 PHP
PHP中提问频率最高的11个面试题和答案
Sep 02 PHP
朋友网关于QQ相关的PHP代码(研究QQ的绝佳资料)
Jan 26 PHP
PHP速成大法
Jan 30 PHP
详解PHP+AJAX无刷新分页实现方法
Nov 03 PHP
Yii视图CGridView实现操作按钮定义地址示例
Jul 14 PHP
yii框架搜索分页modle写法
Dec 19 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
Dec 26 PHP
php 函数中静态变量使用的问题实例分析
Mar 05 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+Memcache实现wordpress访问总数统计(非插件)
2014/07/04 PHP
PHP的反射类ReflectionClass、ReflectionMethod使用实例
2014/08/05 PHP
CI框架中类的自动加载问题分析
2016/11/21 PHP
PHP使用ActiveMQ实例
2018/02/05 PHP
jQuery 核心函数以及jQuery对象
2010/03/23 Javascript
js如何获取file控件的完整路径具体实现代码
2013/05/15 Javascript
jquery限定文本框只能输入数字即整数和小数
2013/11/29 Javascript
Javascript随机标签云代码实例
2016/06/21 Javascript
JS中绑定事件顺序(事件冒泡与事件捕获区别)
2017/01/24 Javascript
Vue 项目代理设置的优化
2018/04/17 Javascript
JavaScript轮播停留效果的实现思路
2018/05/24 Javascript
学习React中ref的两个demo示例
2018/08/14 Javascript
初学node.js中实现删除用户路由
2019/05/27 Javascript
js get和post请求实现代码解析
2020/02/06 Javascript
解决vue中的无限循环问题
2020/07/27 Javascript
解决vant-UI库修改样式无效的问题
2020/11/03 Javascript
布同 统计英文单词的个数的python代码
2011/03/13 Python
Python中的作用域规则详解
2015/01/30 Python
使用Python读写文本文件及编写简单的文本编辑器
2016/03/11 Python
ubuntu中配置pyqt4环境教程
2017/12/27 Python
python 寻找list中最大元素对应的索引方法
2018/06/28 Python
python实现超级马里奥
2020/03/18 Python
python 错误处理 assert详解
2020/04/20 Python
is_file和file_exists效率比较
2021/03/14 PHP
可以在一个PHP文件里面include另外一个PHP文件两次吗
2015/05/22 面试题
初三物理教学反思
2014/01/21 职场文书
培训协议书范本
2014/04/22 职场文书
保护环境倡议书300字
2014/05/19 职场文书
运动会入场口号
2014/06/07 职场文书
商场促销活动策划方案
2014/08/18 职场文书
2014年销售人员工作总结
2014/11/27 职场文书
摩登时代观后感
2015/06/03 职场文书
汤姆索亚历险记读书笔记
2015/06/29 职场文书
tensorflow中的数据类型dtype用法说明
2021/05/26 Python
Python数据类型最全知识总结
2021/05/31 Python
python opencv旋转图片的使用方法
2021/06/04 Python