php匯入到excel亂碼是因為utf8編碼在xp系統不支援所有utf8編碼轉碼一下就完美解決了
utf-8編碼案例
Php代碼
<?php header("Content-Type: application/vnd.ms-excel; charset=UTF-8"); header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Content-Type: application/force-download"); header("Content-Type: application/octet-stream"); header("Content-Type: application/download"); header("Content-Disposition: attachment;filename=11.xls "); header("Content-Transfer-Encoding: binary "); ?>
Php代碼
<? $filename="php匯入到excel-utf-8編碼"; $filename=iconv("utf-8", "gb2312", $filename); echo $filename; ?>
gbk編碼案例
Php代碼
<?php header("Content-Type: application/vnd.ms-excel; charset=UTF-8"); header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Content-Type: application/force-download"); header("Content-Type: application/octet-stream"); header("Content-Type: application/download"); header("Content-Disposition: attachment;filename=11.xls "); header("Content-Transfer-Encoding: binary "); ?>
Php代碼
0.<? 0.$filename="php匯入到excel-utf-8編碼"; 0.echo $filename; 0.?>
訪問網站的時候就下載到excel裡面
要弄儲存格區別的話
用table表格做網頁的就可以了
====================== 其他方法 =============================
1、製作簡單 Excel
0.<?php 0.header("Content-type:application/vnd.ms-excel"); 0.header("Content-Disposition:filename=php2excel.xls"); 0. 0.echo "A1/t B1/t C1/n"; 0.echo "A2/t B2/t C2/n"; 0.echo "A3/t B3/t C3/n"; 0.echo "A4/t B4/t C4/n"; 0.?>
2、製作簡單 CSV
<?php$action =$_GET['action'];if ($action=='make'){ $fp = fopen("demo_csv.csv","a"); //開啟csv檔案,如果不存在則建立 $title = array("First_Name","Last_Name","Contact_Email","Telephone"); //第一行資料 $data_1 = array("42343","423432","4234","4234"); $data_2 = array("4234","Last_Name","Contact_Email","Telephone"); $title = implode(",",$title); //用 ' 分割成字串 $data_1 = implode(",",$data_1); // 用 ' 分割成字串 $data_2 = implode(",",$data_2); // 用 ' 分割成字串 $data_str =$title."/r/n".$data_1."/r/n".$data_2."/r/n"; //加入分行符號 fwrite($fp,$data_str); // 寫入資料 fclose($fp); //關閉檔案控制代碼 echo "產生成功";}echo "<br>";echo "<a href='?action=make'>產生csv檔案</a>";?>
也可以做一個封閉函數:
封閉函數一:
function exportToCsv($csv_data, $filename = 'export.csv') { $csv_terminated = "/n"; $csv_separator = ","; $csv_enclosed = '"'; $csv_escaped = "//"; // Gets the data from the database $schema_insert = ''; $out = ''; // Format the data foreach ($csv_data as $row) { $schema_insert = ''; $fields_cnt = count($row); //printr($row); $tmp_str = ''; foreach($row as $v) { $tmp_str .= $csv_enclosed.str_replace($csv_enclosed, $csv_escaped . $csv_enclosed, $v).$csv_enclosed.$csv_separator; } // end for $tmp_str = substr($tmp_str, 0, -1); $schema_insert .= $tmp_str; $out .= $schema_insert; $out .= $csv_terminated; } // end while header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Content-Length: " . strlen($out)); header("Content-type: text/x-csv"); header("Content-Disposition:filename=$filename"); echo $out;}/*$csv_data = array(array('Name', 'Address'));array_push($csv_data, array($row['name'],$row['address']));...exportToCsv($csv_data,'new_file.csv');*/
封閉函數二:
<?/** * Simple class to properly output CSV data to clients. PHP 5 has a built * in method to do the same for writing to files (fputcsv()), but many times * going right to the client is beneficial. * * @author Jon Gales */class CSV_Writer { public $data = array(); public $deliminator; /** * Loads data and optionally a deliminator. Data is assumed to be an array * of associative arrays. * * @param array $data * @param string $deliminator */ function __construct($data, $deliminator = ",") { if (!is_array($data)) { throw new Exception('CSV_Writer only accepts data as arrays'); } $this->data = $data; $this->deliminator = $deliminator; } private function wrap_with_quotes($data) { $data = preg_replace('/"(.+)"/', '""$1""', $data); return sprintf('"%s"', $data); } /** * Echos the escaped CSV file with chosen delimeter * * @return void */ public function output() { foreach ($this->data as $row) { $quoted_data = array_map(array('CSV_Writer', 'wrap_with_quotes'), $row); echo sprintf("%s/n", implode($this->deliminator, $quoted_data)); } } /** * Sets proper Content-Type header and attachment for the CSV outpu * * @param string $name * @return void */ public function headers($name) { header('Content-Type: application/csv'); header("Content-disposition: attachment; filename={$name}.csv"); }}/*//$data = array(array("one","two","three"), array(4,5,6));$data[] = array("one","two","three");$data[] = array(4,5,6);$csv = new CSV_Writer($data);$csv->headers('test');$csv->output();*/
3. 使用excel類
<?phprequire_once 'Spreadsheet/Writer.php';$workbook = new Spreadsheet_Excel_Writer();/* 產生 CSV$filename = date('YmdHis').'.csv';$workbook->send($filename); // 發送 Excel 檔案名稱供下載*/// 產生 Excel$filename = date('YmdHis').'.xls';$workbook->send($filename); // 發送 Excel 檔案名稱供下載$workbook->setVersion(8);$workbook->setBIFF8InputEncoding('UTF-8');$worksheet =& $workbook->addWorksheet("Sheet-1");$data[]= array('id','username','company','email','mob','daytime','intent');$data[] = array(1,'老梁','**工作室','jb51.net','1363137966*',time(),'y');$total_row = count($data);$total_col = count($data[0]);for ($row = 0; $row < $total_row; $row ++) { for ($col = 0; $col < $total_col; $col ++) { $worksheet->writeString($row, $col, $data[$row][$col]); // 在 sheet-1 中寫入資料 }}/*$worksheet =& $workbook->addWorksheet("Sheet-2");$data[]= array('id','username','company','email','mob','daytime','intent');$data[] = array(1,'老梁','**工作室','jb51.net','1363137966*',time(),'y');$total_row = count($data);$total_col = count($data[0]);for ($row = 0; $row < $total_row; $row ++) { for ($col = 0; $col < $total_col; $col ++) { $worksheet->writeString($row, $col, $data[$row][$col]); // 在 sheet-2 中寫入資料 }}*/$workbook->close(); // 完成下載?>
類二
-----函數說明
讀取Excel檔案
function Read_Excel_File($ExcelFile,$Result)
$ExcelFile Excel檔案名稱
$Result 返回的結果
函數傳回值 正常返回0,否則返回錯誤資訊
返回的值數組
$result[sheet名][行][列] 的值為相應Excel Cell的值
建立Excel檔案
function Create_Excel_File($ExcelFile,$Data)
$ExcelFile Excel檔案名稱
$Data Excel表格式資料
請把函數寫在PHP指令碼的開頭
例1:
<?require "excel_class.php";Read_Excel_File("Book1.xls",$return);for ($i=0;$i<count($return[Sheet1]);$i++){ for ($j=0;$j<count($return[Sheet1][$i]);$j++) { echo $return[Sheet1][$i][$j]."|"; } echo "<br>";}?>
例2:
<?require "excel_class.php";Read_Excel_File("Book1.xls",$return);Create_Excel_File("ddd.xls",$return[Sheet1]);?>