❶ php怎麼讀取excel 文件數據並輸出
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"]);
//將獲取在伺服器中的Excel文件,此處為上傳文件名
$path=$_FILES["file"]["name"];
//調用readExcel函數返回一個
二維數組
$exceArray=readExcel($path);
//創建一個讀取
excel函數
functionreadExcel($path){
//引入PHPExcel類庫
include'Classes/PHPExcel.php';
include'Classes/PHPExcel/IOFactory.php';
$type='Excel5';//設置為Excel5代表支持2003或以下版本,
Excel2007代表2007版
$xlsReader=PHPExcel_IOFactory::createReader($type);
$xlsReader->setReadDataOnly(true);
$xlsReader->setLoadSheetsOnly(true);
$Sheets=$xlsReader->load($path);
//開始讀取上傳到伺服器中的Excel文件,返回一個
二維數組
$dataArray=$Sheets->getSheet(0)->
toArray();
return$dataArray;
}
❷ PHPexcel 文件關聯讀取數據問題
主要有兩個選擇,第一個是PHPExcelReader,另外一個是PHPExcel。
PHPExcelReader比較輕量級,僅支持Excel的讀取,實際上就是一個Reader。但是可惜的是不能夠支持Excel 2007的格式(.xlsx)。
PHPExcel比較強大,能夠將內存中的數據輸出成Excel文件,同時還能夠對Excel做各種操作,下面主要介紹下如何使用PHPExcel進行Excel 2007格式(.xlsx)文件的讀取。
❸ php 5.4 如何讀取excel中的列名跟值,導入到資料庫中形成「列1,值1,列2,值2......」這種樣式
下載PHPExcel後保存到自己的類文件目錄中,然後使用以下代碼可以打開Excel 2007(xlsx)格式的文件:
require_once'/libs/PHPExcel-1.8.0/Classes/PHPExcel.php';//修改為自己的目錄
echo'<p>TESTPHPExcel1.8.0:readxlsxfile</p>';
$objReader=PHPExcel_IOFactory::createReaderForFile($filename);
$objPHPExcel=$objReader->load($filename);
$objPHPExcel->setActiveSheetIndex(1);
$date=$objPHPExcel->getActiveSheet()->getCell('A16')->getValue();
讀出以後再根據內容寫入資料庫
❹ phpexcel讀取不到xlsx的文件!
可以讀取到的, 你先用file_exists()判斷文件是否存在, 如果存在再讀取
❺ php讀取excel文件示例分享(更新修改excel)
復制代碼
代碼如下:
//模板存放目錄
$dir
=
$DOCUMENT_ROOT.'/backoffice/admin/oemcheck/';
$templateName
=
'1.xlsx';
$outputFileName
=
'模板.xlsx';
$txt='test';
//實例化Excel讀取類
$PHPReader
=
new
PHPExcel_Reader_Excel2007();
if(!$PHPReader->canRead($dir.$templateName)){
$PHPReader
=
new
PHPExcel_Reader_Excel5();
if(!$PHPReader->canRead($dir.$templateName)){
echo
'無法識別的Excel文件!';
return
false;
}
}
//讀取Excel
$PHPExcel
=
$PHPReader->load($dir.$templateName);
//讀取工作表1
$currentSheet
=
$PHPExcel->getSheet(0);
$currentSheet->setCellValue('B13',iconv('gbk','utf-8',$txt));//表頭賦值//
//實例化Excel寫入類
$PHPWriter
=
new
PHPExcel_Writer_Excel2007($PHPExcel);
ob_start();
header("Content-Type:
application/force-download");
header("Content-Type:
application/octet-stream");
header("Content-Type:
application/download");
header('Content-Disposition:attachment;filename="'
.$outputFileName.
'"');//輸出模板名稱
header("Content-Transfer-Encoding:
binary");
header("Last-Modified:".gmdate("D,
d
M
Y
H:i:s")."
GMT");
header('Pragma:
public');
header('Expires:
30');
header('Cache-Control:
public');
$PHPWriter->save('php://output');
❻ 如何用PHPExcel讀取超大excel文件
工作中經常要遇到將xlsx文件中的部分內容導入到資料庫。通常我們都是用PHPExcel來讀取。
通過下面的方法我們可以很容易將一個excel表格讀取成為php數組,之後就可以為所欲為了:
$input_file = "data.xlsx";
$objPHPExcel = PHPExcel_IOFactory::load($input_file);
$sheetData = $objPHPExcel->getSheet(0)->toArray(null, true, true, true);
如果文章到此結束,那價值就不大了。
很不幸的情況總是存在的,當data.xlsx有上萬行,每一行又有很多列,每一列又有很長的字元串,並且有的還有顏色等效果時,用上面的方法經常發生的情況就是內存不足。
好吧,我們還有ini_set來加大內存,還可以用set_time_limit來設置較長的超時,如下:
set_time_limit(90);
ini_set("memory_limit", "1024M");
$input_file = "data.xlsx";
$objPHPExcel = PHPExcel_IOFactory::load($input_file);
$sheetData = $objPHPExcel->getSheet(0)->toArray(null, true, true, true);
但很負責任的說,這些都不是終極的方案。
我曾經試過將內存設置到了2G,超時設置到了90秒,也仍然讀不出一個4000行的花花綠綠的表格。原因都出在toArray這個方法上,它會將處理的結果全保存到數組中,這種方式在處理簡單表格時還是很方便的,但在處理大表格時,真的是很杯具。
我們的解決方案如下:
require 'lib/PHPExcel.php';
set_time_limit(90);
$input_file = "data.xlsx";
$objPHPExcel = PHPExcel_IOFactory::load($input_file);
// 讀取規則
$sheet_read_arr = array();
$sheet_read_arr["sheet1"] = array("A","B","C","D","F");
$sheet_read_arr["sheet2"] = array("A","B","C","D","F");
// 循環所有的頁
foreach ($sheet_read_arr as $key => $val)
{
$currentSheet = $objPHPExcel->getSheetByName($key);// 通過頁名稱取得當前頁
$row_num = $currentSheet->getHighestRow();// 當前頁行數
// 循環從第二行開始,第一行往往是表頭
for ($i = 2; $i <</span>= $row_num; $i++)
{
$cell_values = array();
foreach ($val as $cell_val)
{
$address = $cell_val . $i;// 單元格坐標
// 讀取單元格內容
$cell_values[] = $currentSheet->getCell($address)->getFormattedValue();
}
// 看看數據
print_r($cell_values);
}
}
上面的方式算是較復雜的情況了,如果只是想將所有的單元格全讀出來,用下面的方法就行了:
require 'lib/PHPExcel.php';
set_time_limit(90);
$input_file = "data.xlsx";
$objPHPExcel = PHPExcel_IOFactory::load($input_file);
$sheet_count = $objPHPExcel->getSheetCount();
for ($s = 0; $s <</span> $sheet_count; $s++)
{
$currentSheet = $objPHPExcel->getSheet($s);// 當前頁
$row_num = $currentSheet->getHighestRow();// 當前頁行數
$col_max = $currentSheet->getHighestColumn(); // 當前頁最大列號
// 循環從第二行開始,第一行往往是表頭
for($i = 2; $i <</span>= $row_num; $i++)
{
$cell_values = array();
for($j = 'A'; $j <</span> $col_max; $j++)
{
$address = $j . $i; // 單元格坐標
$cell_values[] = $currentSheet->getCell($address)->getFormattedValue();
}
// 看看數據
print_r($cell_values);
}
}
我們可以將上面的print_r地方改成組拼sql語句並寫入文件,然後用mysql導入,當然也可以直接連接資料庫向表中插入記錄,這就隨意了。
❼ 現在在開發一個PHP程序,需要讀取EXCEL裡面的值,比如我想取出G3的值,如何處理,怎麼寫代碼
<?php
header("Content-Type: text/html; charset=utf-8");
require_once 'db.class.php';
require_once 'Classes/PHPExcel.php';
$objPHPExcel = new PHPExcel();
$filePath = "email.xlsx";
$arr = array();
$temparr = array();
$PHPExcel = new PHPExcel();
$PHPReader = new PHPExcel_Reader_Excel2007();
$PHPExcel = $PHPReader->load($filePath);
$currentSheet = $PHPExcel->getSheet(0);
/*取得一共有多少列*/
$allColumn = $currentSheet->getHighestColumn();
/*取得一共有多少行*/
$allRow = $currentSheet->getHighestRow();
echo $allColumn;
echo '<hr>';
echo $allRow;
echo '<hr>';
for($currentRow = 2;$currentRow<=$allRow;$currentRow++){
$temparr['usernum'] = $currentSheet->getCell('A'.$currentRow)->getValue();
$temparr['price'] = $currentSheet->getCell('B'.$currentRow)->getValue();
$temparr['rongliang'] = $currentSheet->getCell('C'.$currentRow)->getValue();
$temparr['fujian'] = $currentSheet->getCell('D'.$currentRow)->getValue();
$temparr['gerenwangpan'] = $currentSheet->getCell('E'.$currentRow)->getValue();
$temparr['chaodafujian'] = $currentSheet->getCell('F'.$currentRow)->getValue();
$temparr['suishenyou'] = $currentSheet->getCell('G'.$currentRow)->getValue();
$temparr['chuanzhen'] = $currentSheet->getCell('H'.$currentRow)->getValue();
$temparr['qiyewangpan'] = $currentSheet->getCell('I'.$currentRow)->getValue();
//$arr[$currentRow-1] = $temparr;
$sql = "INSERT INTO `netease_price` (`usernum`, `price`, `rongliang`, `fujian`, `gerenwangpan`, `chaodafujian`,`suishenyou`, `chuanzhen`, `qiyewangpan`) VALUES (
'".$temparr['usernum']."',
'".$temparr['price']."',
'".$temparr['rongliang']."',
'".$temparr['fujian']."',
'".$temparr['gerenwangpan']."',
'".$temparr['chaodafujian']."',
'".$temparr['suishenyou']."',
'".$temparr['chuanzhen']."',
'".$temparr['qiyewangpan']."'
)";
mysql_query($sql);
/*
自動讀取
for($currentColumn='A';$currentColumn<=$allColumn;$currentColumn++){
$address = $currentColumn.$currentRow;
echo $currentSheet->getCell($address)->getValue()."\t";
}
echo "<br />";
*/
}
❽ PHP遠程讀取excel文件,怎麼讀取
PHPExcel 通過 PHPExcel_Shared_OLERead 類的 read 方法讀取文件
但 read 方法里使用了 is_readable 函數來確認文件是否存在,而 is_readable 不能作用於 url
所以不可直接遠程讀取
但若繞過 is_readable 函數的話,就是可以的
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,excel下多個個工作表,該怎麼讀取
php有個PHPExcel擴展,是可以實現你的要求的。
我這里有個可以讀取多個工作薄的自定義excel類,試試看:
<?php
/**
*excel.class.php
*/
class Excel
{
/**
* 從excel文件中取得所有數據。並轉換成指定編碼格式。
* $toCode 表示需要轉換成的編碼格式,目前擴充了utf8,gbk2312,html三種格式。
* @return 返回二維數組。
*/
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']);//取得工作薄數量
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) //一行數據
{
$row = null;
foreach($v as $a=>$d) //一行數據的一個位元組
{
$value = null;
if(count($d) == 1)
{
continue;
}
if($d['type'] == 0) //如果是字元類型則轉換成為指定編碼格式
{
$ind = $d['data'];
if( $exc->sst['unicode'][$ind] ) //返回數據編碼格式
{
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']);
❿ php怎樣讀取excel表格內容
常用的用PHP讀取EXCEL的方法有以下三種,各自有各自的優缺點。個人推薦用第三種方法,因為它可以跨平台使用。
1. 以.csv格式讀取
將.xls轉換成.csv的文本格式,然後再用PHP分析這個文件,和PHP分析文本沒有什麼區別。
優點:跨平台,效率比較高、可以讀寫。
缺點:只能直接使用.csv的文件,如果經常接受.xls二進制文件的話需要手工轉換,不能自動化。一個文件只有一個SHEET。
PHP有自帶的分析.csv函數:fgetcsv
array fgetcsv ( int $handle [, int $length [, string $delimiter [, string $enclosure]]] )
handle 一個由 fopen()、popen() 或 fsockopen() 產生的有效文件指針。
length (可選)必須大於 CVS 文件內最長的一行。在 PHP 5 中該參數是可選的。如果忽略(在 PHP 5.0.4 以後的版本中設為 0)該參數的話,那麼長度就沒有限制,不過可能會影響執行效率。
delimiter (可選)設置欄位分界符(只允許一個字元),默認值為逗號。
enclosure (可選)設置欄位環繞符(只允許一個字元),默認值為雙引號。該參數是在 PHP 4.3.0 中添加的。 和 fgets() 類似,只除了 fgetcsv() 解析讀入的行並找出 CSV 格式的欄位然後返回一個包含這些欄位的數組。
fgetcsv() 出錯時返回 FALSE,包括碰到文件結束時。
注意: CSV 文件中的空行將被返回為一個包含有單個 null 欄位的數組,不會被當成錯誤。
當然也可以自己手動分析字元串。
還可以利用fputcsv函數將行格式化為 CSV 並寫入文件指針。
2. ODBC鏈接數據源
優點:支持多種格式,cvs, xls等。支持讀寫,使用標准SQL語言,和SQLSERVER、MYSQL資料庫幾乎完全一樣。
缺點:值支持windows伺服器
3. PHP自定義類
優點:跨平台。某些類支持寫操作。支持.xls二進制文件
常用的類有phpExcelReader、PHPExcel。其中後者支持讀寫,但是需要php5.2以上版本。
phpExcelReader是專門用來讀取文件的。返回一個數組,包含表格的所有內容。
該 class 使用的方法可以參考網站下載回來的壓縮檔中的 example.php。
不過我下載回來的 (版本 2009-03-30),有兩點要注意:
reader.php 中的下面這行要修改
將 require_once 『Spreadsheet/Excel/Reader/OLERead.php』;
改為 require_once 『oleread.inc』;
example.php 中
修改 $data->setOutputEncoding(』CP1251′);
為 $data->setOutputEncoding(』CP936′);
example2.php 中
修改 nl2br(htmlentities($data->sheets[$sheet]['cells'][$row][$col]));
為 $table_output[$sheet] .= nl2br(htmlspecialchars($data->sheets[$sheet]['cells'][$row][$col]));
不然中文會有問題。
繁體的話可以修改為CP950、日文是CP932,具體可參考codepage說明。
修改 $data->read(』jxlrwtest.xls』) 為自己的 excel 文件名,zip 檔中附的 jxlrwtest.xls 應該是壞了。