php读取excel,以及php打包文件夹为zip文件
1.把文件下载到本地,放在在Apache环境下
2.d.xlsx是某游戏的服务器名和玩家列表,本程序只适合此种xlsx文件结构,其他结构请修改index.php源码
3.访问zip.php的功能是把生成的files文件夹打包成files.zip
4.访问index.php即可生成files文件夹,里面0.js---n.js 分别存放各个服务器人名,server_name_list.js存放服务器列表。
5.Classes 存放的是php读取excel的功能模块,具体任务逻辑都在index.php A.PHP读取excel支持excel2007 demo逻辑代码:其中的(arrayRecursive,JSON方法是json数据处理功能,可兼容汉字)
主要借助了:PHPExcel插件,附件中有Classes文件夹,官网:http://www.codeplex.com/PHPExcel
index.php
<?php
/** Error reporting */
error_reporting(0);
header("Content-type: text/html; charset=utf-8");
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>标题</title>
</head> <body>
<?php
/**************************************************************
*
* 使用特定function对数组中所有元素做处理
* @param string &$array 要处理的字符串
* @param string $function 要执行的函数
* @return boolean $apply_to_keys_also 是否也应用到key上
* @access public
*
*************************************************************/
function arrayRecursive(&$array, $function, $apply_to_keys_also = false)
{
static $recursive_counter = 0;
if (++$recursive_counter > 1000) {
die('possible deep recursion attack');
}
foreach ($array as $key => $value) {
if (is_array($value)) {
arrayRecursive($array[$key], $function, $apply_to_keys_also);
} else {
$array[$key] = $function($value);
} if ($apply_to_keys_also && is_string($key)) {
$new_key = $function($key);
if ($new_key != $key) {
$array[$new_key] = $array[$key];
unset($array[$key]);
}
}
}
$recursive_counter--;
} /**************************************************************
*
* 将数组转换为JSON字符串(兼容中文)
* @param array $array 要转换的数组
* @return string 转换得到的json字符串
* @access public
*
*************************************************************/
function JSON($array) {
arrayRecursive($array, 'urlencode', true);
$json = json_encode($array);
return urldecode($json);
} require_once 'Classes\PHPExcel.php';
require_once 'Classes\PHPExcel\IOFactory.php';
require_once 'Classes\PHPExcel\Reader\Excel2007.php';
$uploadfile='d.xlsx'; $objReader = PHPExcel_IOFactory::createReader('Excel2007');/*Excel5 for 2003 excel2007 for 2007*/
$objPHPExcel = PHPExcel_IOFactory::load($uploadfile);
$sheet = $objPHPExcel->getSheet(0);
$highestRow = $sheet->getHighestRow(); // 取得总行数
$highestColumn = $sheet->getHighestColumn(); // 取得总列数 /*方法【推荐】*/
$objWorksheet = $objPHPExcel->getActiveSheet();
$highestRow = $objWorksheet->getHighestRow(); // 取得总行数
$highestColumn = $objWorksheet->getHighestColumn();
$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);//总列数
$list = array();
for ($row = 1;$row <= $highestRow;$row++) {
$strs=array();
//注意highestColumnIndex的列数索引从0开始
for ($col = 0;$col < $highestColumnIndex;$col++) {
$strs[$col] =$objWorksheet->getCellByColumnAndRow($col, $row)->getValue();
}
array_push($list, $strs);
}
//读取完毕 $list
//处理数据,生成新的结构
$n = 0;
$ser = array();
for($i = 0 ; $i < count($list); $i++ ){
$ser[$n][0] = $list[$i][0];
if(!is_array(@$ser[$n][1])){
$ser[$n][1] = array();
}
array_push($ser[$n][1], $list[$i][1]);
if($i != count($list) -1){
if($list[$i][0] != $list[$i+1][0]){
$n++;
}
}
}
/*输出文件*/
$sname = array();
$f = 'files/';//存放目录
if (! file_exists ( $f )) {
mkdir ( $f );
}
for($j = 0;$j < count($ser); $j++){
$file = $f.$j.'.js';
echo $file."<br />";
$fp=fopen("$file", "w+"); //打开文件指针,创建文件
if ( !is_writable($file) ){
die("文件:" .$file. "不可写,请检查!");
}
if (is_writable($file) == false) {
die('我是鸡毛,我不能');
}
$data = $ser[$j][1];
array_push($sname, $ser[$j][0]);
file_put_contents ($file, JSON($data));
fclose($fp); //关闭指针
}
$file = $f.'server_name_list.js';
echo $file."<br />";;
$fp=fopen("$file", "w+"); //打开文件指针,创建文件
if ( !is_writable($file) ){
die("文件:" .$file. "不可写,请检查!");
}
if (is_writable($file) == false) {
die('我是鸡毛,我不能');
}
file_put_contents ($file, JSON($sname));
echo "生成完毕!";
echo '<a href="zip.php">打包生成文件</a>'
?>
</body>
</html>
B.PHP打包文件夹为zip文件
zip.php
<?php
/** Error reporting */
error_reporting(0);
header("Content-type: text/html; charset=utf-8");
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>标题</title>
</head> <body>
<?php
function addFileToZip($path,$zip){
$handler=opendir($path); //打开当前文件夹由$path指定。
while(($filename=readdir($handler))!==false){
if($filename != "." && $filename != ".."){//文件夹文件名字为'.'和‘..’,不要对他们进行操作
if(is_dir($path."/".$filename)){// 如果读取的某个对象是文件夹,则递归
addFileToZip($path."/".$filename, $zip);
}else{ //将文件加入zip对象
$zip->addFile($path."/".$filename);
}
}
}
@closedir($path);
} $zip=new ZipArchive();
if($zip->open('files.zip', ZipArchive::OVERWRITE)=== TRUE){
addFileToZip('files', $zip); //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法
$zip->close(); //关闭处理的zip文件
}
echo '打包完毕!'."<br />";
echo "<a href='files.zip'>下载files.zip</a>"
?>
</body>
</html>
代码下载:php-read-excel
http://files.cnblogs.com/zhidong123/php-read-excel.zip
php读取excel,以及php打包文件夹为zip文件的更多相关文章
- php打包文件夹成zip文件
function addFileToZip($path,$zip){ $handler=opendir($path); //打开当前文件夹由$path指定. while(($filenam ...
- java打包文件夹为zip文件
//待压缩的文件目录 String sourceFile=sourceFilePath+"\\"+userName; //存放压缩文件的目录 String zipFilePath ...
- 批量压缩文件夹到Zip文件
实现效果: 实现代码:
- Unity 从StreamingAssets文件夹和PersistentData文件夹 保存读取AssetBundle资源
项目中的资源一般我们打包成AssetBundle格式 方便我们加载和热更 而AssetBundle文件 一般保存在StreamingAssets文件夹或则PersistentData文件夹 首先我们看 ...
- python pandas合并多个excel(xls和xlsx)文件(弹窗选择文件夹和保存文件)
# python pandas合并多个excel(xls和xlsx)文件(弹窗选择文件夹和保存文件) import tkinter as tk from tkinter import filedial ...
- java读取文件夹下所有文件并替换文件每一行中指定的字符串
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.I ...
- 下面的程序段创建了BufferedReader类的对象in,以便读取本机c盘my文件夹下的文件1.txt。File构造函数中正确的路径和文件名的表示是( )。
下面的程序段创建了BufferedReader类的对象in,以便读取本机c盘my文件夹下的文件1.txt.File构造函数中正确的路径和文件名的表示是( ). ./表示当前项目的路径../表示当 ...
- C# 读取指定文件夹下所有文件
#region 读取文件 //返回指定目录中的文件的名称(绝对路径) string[] files = System.IO.Directory.GetFiles(@"D:\Test" ...
- HALCON初步:文件夹遍历,文件筛选,文件名拆分,图片读取及保存
[1]文件夹遍历 list_image_files ( : : ImageDirectory, Extensions, Options : ImageFiles) ImageDirectory: 文件 ...
随机推荐
- weekend110(Hadoop)的 第二天笔记
(2015年1月11日) 课程目录 01-NN元数据管理机制 02-NN工作机制2 03-DN工作原理 04-HDFS的JAVA客户端编写 05-filesystem设计思想总结 06-hadoop中 ...
- innerHTML和innerText
document 对象中有innerHTML和innerText 两个属性, 这两个属性都是获取document对象的文本内容的,这两个属性间有哪些区别呢?通过几个例子来看一下. 示例1 <ht ...
- 【原创】javascript——prototype与__proto__
一定要注意这个概念:javascript世界里,万物皆对象, function是对象,prototyp也是对象. 新建构造函数,并实例 var Person = function(){} var ...
- Peterson算法与Dekker算法解析
进来Bear正在学习巩固并行的基础知识,所以写下这篇基础的有关并行算法的文章. 在讲述两个算法之前,需要明确一些概念性的问题, Race Condition(竞争条件),Situations lik ...
- Java程序猿学习C++之字符串
#include <iostream> #include <string.h> using namespace std; int my_len(const char *str) ...
- QT实现多语言切换
功能需求: 网盘客户端要能够实现多国语言的切换,第一版要支持中.英文的切换.在实现过程中感觉QT对多国语言的支持还是很不错的,制作多语言包很方便,切换的逻辑也很简单.下面就来看一下QT中如何制作多语言 ...
- 两款Mac下的视频下载利器
1 iSkysoft iTube Studio 2.jaksta mac
- ATL 工程下添加右击菜单
首先在dllmain.cpp中添加如下声明 HINSTANCE g_hInstance; g_hInstance = hInstance; 源码如下: CPoint point; ::GetCur ...
- 购买SSD固态硬盘须当心,你知道什么是SLC、 MLC、TLC闪存芯片颗粒吗?
固态硬盘凭借其存取速率超快等自身优势,被越来越多的电脑爱好者所青睐,并迅速普及到了广大用户的电脑中,因为固态硬盘与传统机械硬盘相比,确实在运行效率等方面有了质的提升,但是亦是美网络小编要提醒大家的是, ...
- SqlServer循环读取配置
USE [DB_JP_BaseInfo00] GO /****** Object: StoredProcedure [dbo].[sp_wx_getAppointmentInfo_Str] Scrip ...