phpexcel導入導出(輕量) 淘寶導入

excel單元格數字變成字符串方法 '1001010002400000,數值前加單引號

當excel文件中的數據設置過,導入的數據和excel顯示的不同,單個修改數據個單元格格式又很麻煩,這時把excel另存爲csv格式即可,用文本方式打開看數據

導入$data->sheets

使用PHP-ExcelReader,下載地址: http://sourceforge.net/projects/phpexcelreader

<?php
//$data_header_var = array(1=>'$incrementId',2=>'$price');
function Excel2Db($fileName, $data_header_var=array()){
	require_once 'Excel/reader.php';
	$data = new Spreadsheet_Excel_Reader();
	$data->setOutputEncoding('utf-8'); //gbk
	$data->read($fileName);
	
	$numRows = $data->sheets["0"]['numRows'];
	for ($i = 2; $i <= $numRows; $i++) {
		foreach ($data_header_var as $j => $var){
			eval($var.'= $data->sheets["0"]["cells"][$i][$j];');
		}
		//save2Db
	}
}
/*$data2 = $data->sheets["0"]["cells"];
unset($data2['1']);
foreach ($data2 as $i=> $v) {
	foreach ($data_header_var as $j => $var){
		eval($var.'= $v[$j];');				
	}*/
	
function Excel2Array($fileName, $data_header_var=array()){
	require_once 'Excel/reader.php';
	$data = new Spreadsheet_Excel_Reader();
	$data->setOutputEncoding('utf-8'); //gbk
	$data->read($fileName);
	$dataRows = $lineData = array();

	$numRows = $data->sheets["0"]['numRows'];
	for ($i = 2; $i <= $numRows; $i++) {
		foreach ($data_header_var as $j => $var){
			$lineData[$var] = $data->sheets["0"]["cells"][$i][$j];
		}
		$dataRows[] = $lineData;
	}
	return $dataRows;
}
 導出
<?php
/*$excel = new Excel();
//$excel->setEncode("utf-8","gb2312"); //設置編碼

$titleData = array("name","price","content","total");//設置標題欄
$data      = array(
    array("ab","ac","ad","ae"), 
    array("abc","acc","adc","aec"), 
    array("abd","acd","add","aed"), 
    't'=>array("abe","ace","ade","aee"), 
);

$excel->getExcel($titleData, $data, "demo");
*/
class Excel {
	var $inEncode  = "utf-8"; //一般是頁面編碼
	var $outEncode = "utf-8"; //一般是Excel文件的編碼
	var $content   = '';
	
	/**
	*設置編碼
	*/
	public function setEncode($incode, $outcode){
		$this->inEncode  = $incode;
		$this->outEncode = $outcode;
	}
	/**
	*設置Excel的行記錄
	*/
	public function setRow($lineData){
		$title = "";
		foreach($lineData as $v){
			if($this->inEncode != $this->outEncode){
				$title .= iconv($this->inEncode,$this->outEncode,$v)."\t";
			}else{
				$title .= $v."\t";
			}
		}
		$title .= "\n";
		return $title;
	}
	/**
	*設置Excel內容
	*/
	public function setRows($array){
		$content = "";
		foreach($array as $k => $v){
			$content .= $this->setRow($v);
		}
		return $content;
	}
	/**
	*生成並自動下載Excel
	* $titleData 標題欄數組 
	* $array 內容數組
	* $filename 文件名稱 (爲空,已當前日期爲名稱)
	*/
	public function getExcel($titleData, $array, $filename = ''){
		if($filename==''){
			$filename = date("Y-m-d");
		}
		$title   = $this->setRow($titleData);
		$content = $this->setRows($array);
		header("Content-type:application/vnd.ms-excel");
		header("Content-Disposition:filename=".$filename.".xls");
		echo $title;
		echo $content;
	}
}
  php讀取淘寶數據包csv文件  unicode
public static function fopen_utf8($filename)
{
    $encoding = '';
    $handle = fopen($filename, 'r');
    $bom = fread($handle, 2);
    rewind($handle);
    if ($bom === chr(0xff) . chr(0xfe) || $bom === chr(0xfe) . chr(0xff)) {
        // UTF16 Byte Order Mark present
        $encoding = 'UTF-16';
    } else {
        $file_sample = fread($handle, 1000) + 'e'; //read first 1000 bytes
        rewind($handle);

        $encoding = mb_detect_encoding($file_sample, 'UTF-8, UTF-7, ASCII, EUC-JP,SJIS, eucJP-win, SJIS-win, JIS, ISO-2022-JP');
    }

    if ($encoding) {
        stream_filter_append($handle, 'convert.iconv.' . $encoding . '/UTF-8');
    }
    return ($handle);
}
//得到csv data
public function getCsvFileData($filename)
{
    $handle = Helper::fopen_utf8($filename, "r");
    
    $csvData = array();
    for ($j = 1; !feof($handle); $j++) {
        $line = fgets($handle);
        $val = explode("\t", $line);
        if ($j > 1) {
            $line = array(
                'title' => $val[0],
                //'cate' => $val[1],
                'price' => $val[2], //價格
                'inventory' => trim($val [3]), //數量
                'descript' => trim($val [4]), //描述
                'import_images' => trim($val[5]), //圖片
                'sku' => trim($val[6]), //商家編碼
                'weight' => trim($val[7]), //重量
            );

            $csvData[] = $line;
        }
    }
    return $csvData;
}

//校驗數據
public function checkProductImportData($adminId, $csvData)
{
    $checkArray = array();
    foreach ($csvData as $product) {
        $checkArray[] = $product['sku'];
    }
    $list = 'db中的sku列表在文件sku中的'
    $result = array('status' => 10000, 'msg' => '');
    if (count($list) == count($checkArray)) {
        $result['status'] = 2;
        $result['msg'] = '文件裏的商品已經導入過';
    } elseif (count($list) > 0) {
        $dbhasskulist = array();
        $alllist = self::model()->findAllSkuFromDb();
        foreach ($alllist as $info) {
            if ($info->sku && in_array($info->sku, $checkArray)) {
                $dbhasskulist[] = $info->sku;
            }
        }
        $result['status'] = 1;
        $result['msg'] = "商品貨號重複:" . implode(",", array_unique($dbhasskulist));
    }
    return $result;
}
 
 
 
 
 
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章