php Excel/CSVへの読み込みまたはエクスポート(utf 8、gbk符号化変換付)


リンク:CSV mysqlデータベースのインポート
 
phpをexcelにインポート-utf 8とgbkの2つの符号化をサポート
 
phpがexcel乱符号化に導入されたのは、utf 8符号化がxpシステムでutf 8符号化のすべてのトランスコードをサポートしていないため、完璧に解決されたからである.
utf-8符号化事例
 
 
<?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 "); 
?>  
 
<? 
$filename="php   excel-utf-8  "; 
$filename=iconv("utf-8", "gb2312", $filename); 
echo $filename; 
?> 
 
gbk符号化事例
 
 
<?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 "); 
?>  
 
<? 
$filename="php   excel-utf-8  "; 
echo $filename; 
?> 
 
サイトにアクセスするとexcelにダウンロードします
セルを区別するなら
table表でウェブページを作ればいいです
例:
 
 
<?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 "); 

$filename="<table>
			<tr>
				<th>left_1</th>
				<td>right_1</td>
			</tr> 
			<tr>
				<th>left_2</th>
				<td>right_2</td>
			</tr>
		</table>"; 

echo $filename; 
?> 

 
===========================================
 
 
1、簡単エクセルを作る
 
 
<?php
header("Content-type:application/vnd.ms-excel");
header("Content-Disposition:filename=php2excel.xls");

echo "A1\t B1\t C1
"; echo "A2\t B2\t C2
"; echo "A3\t B3\t C3
"; echo "A4\t B4\t C4
"; ?>
 
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
".$data_1."\r
".$data_2."\r
"; // fwrite($fp,$data_str); // fclose($fp); // echo " "; } echo "<br>"; echo "<a href='?action=make'> csv </a>"; ?>

 
閉じた関数を作成することもできます.
 
閉じた関数1:
 
function exportToCsv($csv_data, $filename = 'export.csv') {
    $csv_terminated = "
"; $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'); */
 
 
閉じた関数2:
 
<?
/**
 * 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
", 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クラスの使用
 
<?php
require_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,'  ','**   ','[email protected]','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,'  ','**   ','[email protected]','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]);
?>