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 301转向实现代码
Sep 18 PHP
PHP isset()与empty()的使用区别详解
Aug 29 PHP
7个超级实用的PHP代码片段
Jul 11 PHP
php笔记之:php函数range() round()和list()的使用说明
Apr 26 PHP
编写php应用程序实现摘要式身份验证的方法详解
Jun 08 PHP
利用php+mcDropdown实现文件路径可在下拉框选择
Aug 07 PHP
destoon在360浏览器下出现用户被强行注销的解决方法
Jun 26 PHP
Laravel 5框架学习之Eloquent 关系
Apr 09 PHP
php 问卷调查结果统计
Oct 08 PHP
thinkphp中AJAX返回ajaxReturn()方法分析
Dec 06 PHP
php基于PDO实现功能强大的MYSQL封装类实例
Feb 27 PHP
php上传后台无法收到数据解决方法
Oct 28 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 Coding Tips(php小技巧)[2011/04/02最后更新]
2011/05/02 PHP
joomla jce editor 解决上传中文名文件失败问题
2013/06/09 PHP
php之static静态属性与静态方法实例分析
2015/07/30 PHP
PHP读书笔记整理_结构语句详解
2016/07/01 PHP
用php和jQuery来实现“顶”和“踩”的投票功能
2016/10/13 PHP
使用正则去除php代码中的注释方法
2016/11/03 PHP
php获取ajax的headers方法与内容实例
2017/12/27 PHP
laravel 修改记住我功能的cookie保存时间的方法
2019/10/14 PHP
laravel ORM关联关系中的 with和whereHas用法
2019/10/16 PHP
两个DIV等高的JS的实现代码
2007/12/23 Javascript
Javascript 遍历对象中的子对象
2009/07/03 Javascript
用原生JavaScript实现jQuery的$.getJSON的解决方法
2013/05/03 Javascript
JavaScript访问字符串中单个字符的两种方法
2015/07/03 Javascript
浅谈JQ中mouseover和mouseenter的区别
2016/09/13 Javascript
Javascript中click与blur事件的顺序详析
2017/04/25 Javascript
Vue简单实现原理详解
2020/05/07 Javascript
vue-cli4.0多环境配置变量与模式详解
2020/12/30 Vue.js
Python THREADING模块中的JOIN()方法深入理解
2015/02/18 Python
Python使用urllib2模块抓取HTML页面资源的实例分享
2016/05/03 Python
Python多进程multiprocessing用法实例分析
2017/08/18 Python
让Python更加充分的使用Sqlite3
2017/12/11 Python
使用python批量化音乐文件格式转换的实例
2019/01/09 Python
python计算n的阶乘的方法代码
2019/10/25 Python
Html5新标签解释及用法
2012/02/17 HTML / CSS
PatPat阿根廷:妈妈们的购物平台
2019/05/30 全球购物
介绍一下linux的文件系统
2015/10/06 面试题
你的创业计划书怎样才能打动风投
2014/02/06 职场文书
食品销售计划书
2014/04/26 职场文书
社区两委对照检查材料
2014/08/23 职场文书
机关作风建设心得体会
2014/10/22 职场文书
基层干部个人对照检查及整改措施
2014/10/28 职场文书
房屋租房协议书范本
2014/12/04 职场文书
小平您好观后感
2015/06/09 职场文书
中学生打架检讨书之500字
2019/08/06 职场文书
个人销售励志奋斗口号
2019/12/05 职场文书
Python基础学习之奇异的GUI对话框
2021/05/27 Python