本文目錄一覽:
利用php導入excel文件
【步驟1】在前台html頁面進行上傳文件
form method=”post” action=”php文件” enctype=”multipart/form-data”
h3導入Excel表:/h3input type=”file” name=”file_stu” /
input type=”submit” value=”導入” /
/form
【步驟2】在對應的php文件進行文件的處理
if (! empty ( $_FILES [‘file_stu’] [‘name’] ))
{ $tmp_file = $_FILES [‘file_stu’] [‘tmp_name’]; $file_types = explode ( “.”, $_FILES [‘file_stu’] [‘name’] ); $file_type = $file_types [count ( $file_types ) – 1];
/*判別是不是.xls文件,判別是不是excel文件*/ if (strtolower ( $file_type ) != “xls”) { $this-error ( ‘不是Excel文件,重新上傳’ ); }
/*設置上傳路徑*/ $savePath = SITE_PATH . ‘/public/upfile/Excel/’;
/*以時間來命名上傳的文件*/ $str = date ( ‘Ymdhis’ ); $file_name = $str . “.” . $file_type;
/*是否上傳成功*/ if (! copy ( $tmp_file, $savePath . $file_name )) { $this-error ( ‘上傳失敗’ ); }
/*
*對上傳的Excel數據進行處理生成編程數據,這個函數會在下面第三步的ExcelToArray類中
注意:這裡調用執行了第三步類裡面的read函數,把Excel轉化為數組並返回給$res,再進行數據庫寫入
*/ $res = Service ( ‘ExcelToArray’ )-read ( $savePath . $file_name );
/*
重要代碼 解決Thinkphp M、D方法不能調用的問題
如果在thinkphp中遇到M 、D方法失效時就加入下面一句代碼
*/
//spl_autoload_register ( array (‘Think’, ‘autoload’ ) );
/*對生成的數組進行數據庫的寫入*/
foreach ( $res as $k = $v ) { if ($k != 0) { $data [‘uid’] = $v [0]; $data [‘password’] = sha1 ( ‘111111’ ); $data [’email’] = $v [1];
$data [‘uname’] = $v [3];
$data [‘institute’] = $v [4]; $result = M ( ‘user’ )-add ( $data ); if (! $result) { $this-error ( ‘導入數據庫失敗’ ); } } }
}
【步驟3】ExcelToArrary類,用來引用phpExcel並處理Excel數據的
class ExcelToArrary extends Service{
public function __construct() {
/*導入phpExcel核心類 注意 :你的路徑跟我不一樣就不能直接複製*/ include_once(‘./Excel/PHPExcel.php’); }
/**
* 讀取excel $filename 路徑文件名 $encode 返回數據的編碼 默認為utf8
*以下基本都不要修改
*/
public function read($filename,$encode=’utf-8′){
$objReader = PHPExcel_IOFactory::createReader(‘Excel5’);
$objReader-setReadDataOnly(true);
$objPHPExcel = $objReader-load($filename);
$objWorksheet = $objPHPExcel-getActiveSheet();
$highestRow = $objWorksheet-getHighestRow(); $highestColumn = $objWorksheet-getHighestColumn(); $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn); $excelData = array(); for ($row = 1; $row = $highestRow; $row++) { for ($col = 0; $col $highestColumnIndex; $col++) { $excelData[$row][] =(string)$objWorksheet-getCellByColumnAndRow($col, $row)-getValue(); } } return $excelData;
}
}
php 上傳excel 表格 PHPExcel類,出現錯
ZipArchive library is not enabled:出現這個錯誤說明是程序在調用’ZipArchive’ 這個類的時候沒有成功,原因是由於在安裝php的時候沒有增加php zip的支持(非zlib)。
請在php.ini找到extension=php_zip.dll並把前面的分號去掉(如果沒有,請添加extension=php_zip.dll此行並確保php_zip.dll文件存在相應的目錄),保存後重啟php即可。
在Unix/Linux下的解決辦法:
1、在Linux下沒有php_zip.dll這個文件(有也不會起作用的),所以需要重新編譯一下php的zip模塊。具體安裝方法如下:
cd /usr/src
wget
tar -zxvf zip
cd zip-1.x.x
phpize
./configure
make
sudo make instal
其中, 在最後使用make install命令的時候,可能需要用到root的權限,所以建議使用sudo來運行。安裝完之後,屏幕上會提示zip.so的位置。然後將其記錄下來,如:/usr/local/lib/php/extensions/zip.so。
2、使用root權限修改php.ini(通常可能會在/usr/local/lib/文件夾下,不過視當初安裝php而定,可以通過phpinfo()來查看):
增加extension = /usr/local/lib/php/extensions/zip.so,然後同樣在php.ini文件中,將 zlib.output_compression = Off 改為 zlib.output_compression = On ;
3、最後別忘了重啟一下Apache:apachectl restart;
這個針對php的zip模塊就安裝完成了,能夠在php中使用ZipArchive類了。
求PHP上傳文件夾的三種解決方案
1 壓縮上傳(用戶把文件夾壓縮後上傳),
2 input里加這個屬性webkitdirectory就是默認可以上傳文件夾了。谷歌瀏覽器可以。其他瀏覽器好像不行
3 業務上進行優化 如:(上傳時還是上傳文件,但是需要填寫文件夾得名稱,上傳之後,後台根據文件夾名稱,自動創建文件夾)
php導入xls格式的文件,需要注意什麼?
1. 以.csv格式讀取
將.xls轉換成.csv的文本格式,然後再用PHP分析這個文件,和PHP分析文本沒有什麼區別。
優點:跨平台,效率比較高、可以讀寫。
缺點:只能直接使用.csv的文件,如果經常接受.xls二進制文件的話需要手工轉換,不能自動化。一個文件只有一個SHEET。
PHP有自帶的分析.csv函數:fgetcsv
2. ODBC鏈接數據源
優點:支持多種格式,cvs, xls等。支持讀寫,使用標準SQL語言,和SQLSERVER、MYSQL數據庫幾乎完全一樣。
缺點:值支持windows服務器
3. PHP自定義類
優點:跨平台。某些類支持寫操作。支持.xls二進制文件
常用的類有phpExcelReader、PHPExcel。其中後者支持讀寫,但是需要php5.2以上版本。
phpExcelReader是專門用來讀取文件的。返回一個數組,包含表格的所有內容。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/293079.html