PHPExcel 通過 PHPExcel_Shared_OLERead 類的 read 方法讀取文件
從策劃到設(shè)計制作,每一步都追求做到細膩,制作可持續(xù)發(fā)展的企業(yè)網(wǎng)站。為客戶提供成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)、網(wǎng)站策劃、網(wǎng)頁設(shè)計、域名注冊、虛擬空間、網(wǎng)絡(luò)營銷、VI設(shè)計、 網(wǎng)站改版、漏洞修補等服務(wù)。為客戶提供更好的一站式互聯(lián)網(wǎng)解決方案,以客戶的口碑塑造優(yōu)易品牌,攜手廣大客戶,共同發(fā)展進步。
但 read 方法里使用了 is_readable 函數(shù)來確認文件是否存在,而 is_readable 不能作用于 url
所以不可直接遠程讀取
但若繞過 is_readable 函數(shù)的話,就是可以的
public function read($sFileName)
{
// Check if file exists and is readable
if(!is_readable($sFileName)) {
throw new Exception("Could not open " . $sFileName . " for reading! File does not exist, or it is not readable.");
}
// Get the file data
$this-data = file_get_contents($sFileName);
用php讀取excel,并將結(jié)果寫入mysql
?php
$workbook
=
"D:\\www\\xtwh\\B01\\mysingle.xls";
$sheet
=
"list";
#實例化一個組件的對象
$ex
=
new
COM("Excel.sheet")
or
Die
("Did
not
connect");
#打開工作本使我們可使用它
$wkb
=
$ex-application-Workbooks-Open($workbook)
or
Die
("Did
not
open");
#讀單元格數(shù)據(jù)
$sheets
=
$wkb-Worksheets($sheet);
#Select
the
sheet
$sheets-activate;
#Activate
it
//$cell-activate;
#Activate
the
cell
.If
this,
you
can
modify
the
cell
data.
for($i=2;$i=2501;$i++)
{
$a=$sheets-Cells($i,A);
if($a-value
==
"last")
break;
$b=$sheets-Cells($i,B);
$bp[]=$b-value;
$c=$sheets-Cells($i,C);
$cp[]=$c-value;
$d=$sheets-Cells($i,D);
$dp[]=$d-value;
$e=$sheets-Cells($i,E);
$ep[]=$e-value;
$f=$sheets-Cells($i,F);
$fp[]=$f-value;
$g=$sheets-Cells($i,G);
$gp[]=$g-value;
$h=$sheets-Cells($i,H);
$hp[]=$h-value;
}
$ex-application-ActiveWorkbook-Close("False");
unset
($ex);
require_once("../../conn.php");
$sql0="DELETE
FROM
`newyonghu`";
$result0=mysql_query($sql0,$mylink);
mysql_free_result($result0);
for($i=0;$icount($bp);$i++)
{
$sql="INSERT
INTO
`newyonghu`
(`name`,
`dept`,
`team`,
`group01`,
`position`,
`mingzi`,
`single`,
`info`)
VALUES
('".$bp[$i]."',
'".$fp[$i]."',
'".$dp[$i]."',
'".$ep[$i]."',
'".$gp[$i]."',
'".$cp[$i]."',
'".$hp[$i]."',
'single');";
$result=mysql_query($sql,$mylink);
}
echo
"script
language=\"Javascript\"";
echo
"window.close()";
echo
"/script";
mysql_free_result($result);
//釋放結(jié)果內(nèi)存資源
mysql_close($mylink);
//
斷開連接
?
if($result){????????//如果上傳成功了
import("Org.Util.PHPExcel.Reader.Excel5");??//引入PHPExcel類,這是在thinkphp中使用
import("Org.Util.PHPExcel.IOFactory");
import("Org.Util.PHPExcel.Worksheet.MemoryDrawing");
import("Org.Util.PHPExcel");????????????????
$fileType?=?\PHPExcel_IOFactory::identify($result);?//文件名自動判斷文件類型
$objReader?=?\PHPExcel_IOFactory::createReader($fileType);
$objPHPExcel?=?$objReader-load($result);
$currentSheet?=?$objPHPExcel-getActiveSheet();
$highestRow?=?$currentSheet-getHighestRow();
$highestColumn?=?$currentSheet-getHighestColumn();
$objWorksheet?=?$objPHPExcel-getActiveSheet();
$highestRow?=?$objWorksheet-getHighestRow();
$time?=?time();
//先處理圖片
$date?=?date("YmdH",time());
$TmpPath?=?UPLOAD_DIR.$date.'/';
if(!mkDirs($TmpPath)){
echo?'mkdir?error';exit;
}
$Allnewpic=?$currentSheet-getDrawingCollection();??//獲取文檔中所有圖片
foreach?($Allnewpic?as?$k?=?$drawing)?{????//文檔中圖處理方法
$image?=?$drawing-getImageResource();
$filename=$drawing-getIndexedFilename();
$XY=$drawing-getCoordinates();
//把圖片存起來
imagepng($image,?$TmpPath.$filename);
/*這里后續(xù)要做圖片壓縮處理*/
//把圖片的單元格的值設(shè)置為圖片名稱
$cell?=?$currentSheet-getCell($XY);
$cell-setValue("Upload/image/".$date.'/'.$filename);
}
$goodMsArr?=?array();
$errorArr?=?array();
for?($row?=?3;$row?=?$highestRow;++$row){
$bn?=$objWorksheet-getCellByColumnAndRow(4,?$row)-getValue();?//E?品牌
$link?=$objWorksheet-getCellByColumnAndRow(5,?$row)-getValue();?//?F鏈接
$img?=$objWorksheet-getCellByColumnAndRow(6,?$row)-getValue();?//?G圖片?
$color?=preg_replace(array('/\\s+/','/\\n/'),array('|','|'),trim($objWorksheet-getCellByColumnAndRow(7,?$row)-getValue()));?//H顏色串
$size?=str_replace(array('?',',',',','-'),array('|','|','|','|'),trim($objWorksheet-getCellByColumnAndRow(9,?$row)-getValue()));//J?尺寸串
$price?=trim($objWorksheet-getCellByColumnAndRow(12,?$row)-getValue());?//?H價格
//--------------是不是重復(fù)導(dǎo)入相同的編號,,網(wǎng)站編號是唯一的
if($m-query("SELECT?goodsId?FROM?__PREFIX__goods?WHERE?goodsBn='".$bn."'")){
$errorArr[]?=?"第".$row."行的編號【".$bn."】導(dǎo)入重復(fù)";continue;
}
if($bn==""){
$errorArr[]?=?"第".$row."行的編號為空";continue;
}
if($img==""){
$errorArr[]?=?"第".$row."行的圖片為空";continue;
}
if($color==""){
$errorArr[]?=?"第".$row."行的顏色為空";continue;
}
if($price==""){
$errorArr[]?=?"第".$row."行的價格為空";continue;
}
$sql?=?"INSERT?INTO?__PREFIX__goods(`goodsBn`,`goodsLink`,`goodsImg`,`color`,`size`,`marketPrice`,`createTime`)?
VALUES('".$bn."','".$link."','".$img."','".$color."','".$size."','".$price."',".time().")";
if(!$m-execute($sql)){
$errorArr[]?=?"第".$row."行的數(shù)據(jù)導(dǎo)入錯誤";continue;
}
}
unlink($result);
}else{
echo?'file?upload?error';exit;
}
PHPExcel
PHPExcel?是用來操作Office Excel 文檔的一個PHP類庫,它基于微軟的OpenXML標準和PHP語言。可以使用它來讀取、寫入不同格式的電子表格,如 Excel (BIFF) .xls, Excel 2007 (OfficeOpenXML) .xlsx, CSV, Libre/OpenOffice Calc .ods, Gnumeric, PDF, HTML等等。
PHP讀取示例代碼
//獲取上傳的excel臨時文件
$path?=?$_FILES["file"]["tmp_name"];
//將臨時文件移動當前目錄,可自定義存儲位置
move_uploaded_file($_FILES["file"]["tmp_name"],$_FILES["file"]["name"]);
//將獲取在服務(wù)器中的Excel文件,此處為上傳文件名
$path?=?$_FILES["file"]["name"];
//調(diào)用readExcel函數(shù)返回一個
二維數(shù)組
$exceArray?=?readExcel($path);
//創(chuàng)建一個讀取
excel函數(shù)
function?readExcel($path){
//引入PHPExcel類庫
include?'Classes/PHPExcel.php';????????????
include?'Classes/PHPExcel/IOFactory.php';
$type?=?'Excel5';//設(shè)置為Excel5代表支持2003或以下版本,
Excel2007代表2007版
$xlsReader?=?\PHPExcel_IOFactory::createReader($type);??
$xlsReader-setReadDataOnly(true);
$xlsReader-setLoadSheetsOnly(true);
$Sheets?=?$xlsReader-load($path);
//開始讀取上傳到服務(wù)器中的Excel文件,返回一個
二維數(shù)組
$dataArray?=?$Sheets-getSheet(0)-
toArray();
return?$dataArray;
}
php有個PHPExcel擴展,是可以實現(xiàn)你的要求的。
我這里有個可以讀取多個工作薄的自定義excel類,試試看:
?php
/**
*excel.class.php
*/
class Excel
{
/**
* 從excel文件中取得所有數(shù)據(jù)。并轉(zhuǎn)換成指定編碼格式。
* $toCode 表示需要轉(zhuǎn)換成的編碼格式,目前擴充了utf8,gbk2312,html三種格式。
* @return 返回二維數(shù)組。
*/
static function getDataFromExl($filePath,$toCode = "utf8")
{
$fh = @fopen($filePath,'rb');
if( !$fh || filesize($filePath)==0 )
{
return -1; //文件不可讀或者為空
}
$fc = fread( $fh, filesize($filePath) );
@fclose($fh);
if( strlen($fc) filesize($filePath) )
{
return -2; //讀取錯誤
}
$exc = new ExcelFileParser();
$res = $exc-ParseFromString($fc);
$ws_number = count($exc-worksheet['name']);//取得工作薄數(shù)量
if( $ws_number 1 )
{
return -3;
}
for ($ws_n = 0; $ws_n $ws_number; $ws_n++)
{
$ws = $exc - worksheet['data'][$ws_n];
$data = $ws['cell'];
foreach($data as $k=$v) //一行數(shù)據(jù)
{
$row = null;
foreach($v as $a=$d) //一行數(shù)據(jù)的一個字節(jié)
{
$value = null;
if(count($d) == 1)
{
continue;
}
if($d['type'] == 0) //如果是字符類型則轉(zhuǎn)換成為指定編碼格式
{
$ind = $d['data'];
if( $exc-sst['unicode'][$ind] ) //返回數(shù)據(jù)編碼格式
{
switch($toCode)
{
case "utf8":
$s = Strings::uc2utf8($exc-sst['data'][$ind]);
break;
case "gbk":
$s = Strings::uc2gbk($exc-sst['data'][$ind]);
break;
case "html":
$s = Strings::uc2html($exc-sst['data'][$ind]);
break;
default:
$s = Strings::uc2utf8($exc-sst['data'][$ind]);
break;
}
}
else
{
$s = $exc-sst['data'][$ind];
}
if( strlen(trim($s))==0 || $s === null )
{
$value = '';
}
else
{
$value = $s;
}
}
elseif($d['type'] == 3)
{
$time_list = explode('.', $d['data']);
$time_format = $time_list[2].'-'.$time_list[0].'-'.$time_list[1];
$timestamp = strtotime($time_format);
$value = date("Y-m-d H:i:s", $timestamp);
}
else
{
$value = $d['data'];
}
$row[$a] = $value;
}
$recordList[] = $row;
}
}
return $recordList;
}
}
require_once('./excel.class.php');
$emailData = Excel::getDataFromExl($_FILES['file_name']['tmp_name']);