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 相关文章推荐
改进的IP计数器
Oct 09 PHP
PHP 木马攻击防御技巧
Jun 13 PHP
php学习之 数组声明
Jun 09 PHP
php在项目中寻找代码的坏味道(综艺命名)
Jul 19 PHP
PHP HTML JavaScript MySQL代码如何互相传值的方法分享
Sep 30 PHP
PHP函数eval()介绍和使用示例
Aug 20 PHP
php创建桌面快捷方式实现方法
Dec 31 PHP
PHP实现简易blog的制作
Oct 24 PHP
关于PHP中字符串与多进制转换函数的实例代码
Nov 03 PHP
Laravel 批量更新多条数据的示例
Nov 27 PHP
Laravel 6.2 中添加了可调用容器对象的方法
Oct 22 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
Feb 21 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 和 MySQL 基础教程(四)
2006/10/09 PHP
php sybase_fetch_array使用方法
2014/04/15 PHP
建立良好体验度的Web注册系统ajax
2007/07/09 Javascript
匹配任意字符的正则表达式写法
2010/04/29 Javascript
jQuery的实现原理的模拟代码 -4 重要的扩展函数 extend
2010/08/03 Javascript
Javascript base64编码实现代码
2011/12/02 Javascript
举例说明JavaScript中的实例对象与原型对象
2016/03/11 Javascript
基于JS代码实现当鼠标悬停表格上显示这一格的全部内容
2016/06/12 Javascript
Node.js Addons翻译(C/C++扩展)
2016/06/12 Javascript
引用jquery框架后出错的解决方法
2016/08/09 Javascript
js 自带的sort() 方法全面了解
2016/08/16 Javascript
详解JavaScript跨域总结与解决办法
2016/10/31 Javascript
微信小程序 MD5加密登录密码详解及实例代码
2017/01/12 Javascript
BootStrap导航栏问题记录
2017/07/31 Javascript
jQuery封装animate.css的实例
2018/01/04 jQuery
Javascript作用域和作用域链原理解析
2020/03/03 Javascript
python使用PyV8执行javascript代码示例分享
2013/12/04 Python
python+mysql实现简单的web程序
2014/09/11 Python
插入排序_Python与PHP的实现版(推荐)
2017/05/11 Python
利用python获取Ping结果示例代码
2017/07/06 Python
用Python写一段用户登录的程序代码
2018/04/22 Python
pycharm 解除默认unittest模式的方法
2018/11/30 Python
python读取有密码的zip压缩文件实例
2019/02/08 Python
Python按钮的响应事件详解
2019/03/04 Python
Python面向对象程序设计多继承和多态用法示例
2019/04/08 Python
使用Python完成15位18位身份证的互转功能
2019/11/06 Python
基于python traceback实现异常的获取与处理
2019/12/13 Python
美国最大的宠物药店:1-800-PetMeds
2016/10/02 全球购物
印尼极简主义和实惠的在线家具店:Fabelio
2019/03/27 全球购物
网站设计师的岗位职责
2013/11/21 职场文书
任课老师推荐信范文
2013/11/24 职场文书
大学毕业典礼演讲稿
2014/09/09 职场文书
文明家庭事迹材料
2014/12/20 职场文书
创业计划书之宠物店
2019/09/19 职场文书
Python+Appium自动化测试的实战
2021/06/30 Python
Ruby使用Mysql2连接操作MySQL
2022/04/19 Ruby