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