phpexcel を始める

WBOY
リリース: 2016-06-23 13:34:42
オリジナル
1400 人が閲覧しました

私は最近 PHP に触れることができましたが、結局のところ、それは C++ に非常に似ていますが、実際の難しさはごく単純なところにあります。 PHP のさまざまな拡張

ここ数日間、PHPExcel を勉強したことをまとめて説明したのは、主にインターネット上の例を学習の主軸として見てきたからです。公式 PDF ドキュメント付き。

以下は最近の学習の概要です。

1 . 構造:

PHPExcel は、次の学習に非常に重要です。

ワークブック: ワークブックと呼ばれます。公式ドキュメントでは、PHPExcel の PHPExcel クラスに対応しています。

Worksheet は、PHPExcel のシート フォームに対応しています。ただし、getSheet を通じて取得できます。セル。データを保存する最小単位です。

上記の 3 つの概念は上から順に、リレーションシップを含み、ワークブックにはワークシートが含まれます。

もちろん、他にも読み取りと書き込みという 2 つの重要な抽象概念があります。 PHPExcel では、読み取りと書き込みの 2 つのアクションがクラスに抽象化されており、テーブルを読み取る必要がある場合は、リーダー クラスのオブジェクトを使用してファイルを読み込みます。オブジェクトを開くには、ライター クラスを使用するだけです。

2. クラスとメソッド

PHPExcel には、最近いくつかしか使用していません。
PHPExcel_Writer

PHPExcel_Reader

PHPExcel_IOFactory (これは、ライタークラスのオブジェクトまたはリーダークラスのオブジェクトを構築する呼び出しメソッドによる、伝説的なファクトリ設計パターンです。)

私が出会った PHPExcel のメソッド

PHPExcel_IOFactory::load Excel ファイルをロードします。リーダー クラスのメソッドがデフォルトで呼び出され、返されるのは PHPExcel Class オブジェクトです。

PHPExcel_IOFactory::createWriter(PHPExcel, "Excel5")これは、既存の PHPExcel クラス オブジェクトの書き込みクラスを作成するために使用されます。一般的に使用されるパラメータは Excel007 です。

PHPExcel->getActiveSheet デフォルトで現在アクティブ化されているシートを取得します。

PHPExcel->getSheet(index) インデックスに基づいてシートを取得します

PHPExcel->removeSheetByIndex インデックスに基づいてシートを削除します


PHPExcel->addSheet( ) 新しいシートを追加します

PHPExcel->addExternalSheet () 外部テーブルを追加します。このメソッドについて言えば、clone というキーワードも必要になります。このキーワードは、テーブルのコピーを作成することができます。PHPExcel では、列の添え字が計算されることに注意してください。 0 から始まり、行の添え字は 1 から計算されます。

Sheet->getHighestRow() 現在のテーブルの最大行数を取得します

Sheet->getHighestColumn() 現在のテーブルの最大列数を取得しますtable

PHPExcel_Cell::columnIndexFromString() 現在の列数を取得した後、この列は文字の形式で存在するため、非常に使いにくいため、この関数を使用すると、文字の列を数値に変換できます

Sheet->getCell(A1) パラメータはこれに似ています。Cell の内容を取得することもできます。

Sheet->setCellValueByColumnAndRow(column , row, value) 列で参照されるセルの値を更新します。 and row to value

Sheet->getRowIterator() 現在の行のイテレータを取得します

Sheet->insertNewRowBefore($currentRow, $rownum) 現在の行に $rownum 行前に挿入します

PHPExcel_Cell- >setValue() 現在の Cell の値を設定します。

PHPExcel は Excel ファイルを出力するだけでなく、PDF ファイルなども出力できることに注意してください。これまで理解していなかったので、これから説明します。

以下は私が設計して実装した小さな例です。もちろん、実装されているものには厳密な制限はありません。基本的な関数ですが、学生が PHPExcel を理解するのに役立つと思います


Excel のテーブルの形式は次のとおりです:

名前 備考

<html><head><title>  号码管理系统</title><meta http-equiv="Content-Type" Content="text/html; charset=utf-8"/></head><body><center>  <h1>号码管理系统<h1></center><h4>  注意如果需要插入操作,需要姓名和号码都不为空</h4><form method="POST" action="<?php echo $_SERVER["PHP_SELF"]; ?>">  <br>姓名 : <input type="text" name="name"/>   <br>号码 : <input type="text" name="num"/>   <br>备注 : <textarea name="addition" rows="5" cols="20">   </textarea>                             <br><input type="submit" name="search" value="查询"/>        <input type="submit" name="insert" value="插入"/>       <input type="submit" name="delete" value="删除" /><p><?php//设置全局的错误报告error_reporting(E_ALL);//将PHPExcel包含到PHP的include路径中set_include_path(get_include_path().PATH_SEPARATOR."../Classes");//加载PHPExcel的文件require_once("PHPExcel.php");require_once("PHPExcel/IOFactory.php");$filename = "phonelist.xls";//加载Excel文件$phpexcel = PHPExcel_IOFactory::load($filename);$sheet = $phpexcel->getActiveSheet();//获取行数和列数$data_phone = array(array());$row_phone = $sheet->getHighestRow();$column_str = $sheet->getHighestColumn();$column_phone = PHPExcel_Cell::columnIndexFromString($column_str);//建立一个表格用来打印电话号码和用户名function table(){    echo "<br><table border=1 cellpading=20>";    echo "<tr>";    echo "<td width=80>姓名</td>";    echo "<td width=150>号码</td>";    echo "</tr>";}//用来打印有色字体function font($str, $color){    echo "<font color=".$color.">";    echo $str;    echo "</font>";    echo "</br>";}//判断如果是查找if (!empty($_POST["search"])){    for ($i = 1; $i <= $row_phone; $i++)    {        for ($j = 0; $j < $column_phone; $j++)        {            //遍历行列,将获取到的内容添加到一个预先定义好的数组中            $data_phone[$i - 1][$j] = $sheet->getCellByColumnAndRow($j, $i)->getValue();        }    }//    var_dump($data_phone);    table();    for ($i = 1; $i < $row_phone; $i++)    {        //将数组内容整合成一个字符串,然后进行子串比对        $phone_item = implode($data_phone[$i]);        //名字匹配        if (!empty($_POST["name"]))        {            if (0 != substr_count($phone_item, $_POST["name"]))            {                echo "<tr>";                echo "<td>".$data_phone[$i][0]."</td>";                echo "<td>".$data_phone[$i][1]."</td>";                echo "</tr>";            }        }        //号码匹配        else if (!empty($_POST["number"]))        {            if (0 != substr_count($phone_item, $_POST["number"]))            {                echo "<tr>";                echo "<td>".$data_phone[$i][0]."</td>";                echo "<td>".$data_phone[$i][1]."</td>";                echo "</tr>";            }        }    }    echo "</table>";}//如果是插入操作else if (!empty($_POST["insert"])){    if (!empty($_POST["name"]) && !empty($_POST["num"]))    {        $had = FALSE;        $name;        $num;         //确保将要插入的条目当前系统中不存在        for ($i = 2; $i <= $row_phone; $i++)        {            $name = $sheet->getCellByColumnAndRow(0, $i)->getValue();            $num = $sheet->getCellByColumnAndRow(1, $i)->getValue();            if (strcmp($_POST["name"], $name) == 0 &&                strcmp($_POST["num"], $num) == 0)            {                $had = TRUE;                break;            }        }        table();        //如果不存在,则插入        if (FALSE== $had)        {            font("插入成功", "green");            $sheet->insertNewRowBefore($row_phone + 1, 1);            $sheet->setCellValueByColumnAndRow(0, $row_phone + 1, $_POST["name"]);            $sheet->setCellValueByColumnAndRow(1, $row_phone + 1, $_POST["num"]);            //此处纠结了好久,原来就只是用writer把当前对象加载一下,就可以保存了.            $phpwriter = PHPExcel_IOFactory::createWriter($phpexcel, "Excel5");            $phpwriter->save($filename);            echo "<tr>";            echo "<td>".$_POST["name"]."</td>";            echo "<td>".$_POST["num"]."</td>";            echo "</tr>";        }        //如果存在,则不执行任何动作        else         {            font("插入失败,条目已存在", "red");            echo "<tr>";            echo "<td>".$name."</td>";            echo "<td>".$num."</td>";            echo "</tr>";        }        echo "</table>";    }}//删除操作else if (!empty($_POST["delete"])){    $had = FALSE;    if (!empty($_POST["name"]) && !empty($_POST["num"]))    {        for ($i = 2; $i <= $row_phone; $i++)        {            $name = $sheet->getCellByColumnAndRow(0, $i)->getValue();            $num = $sheet->getCellByColumnAndRow(1, $i)->getValue();            if (strcmp($name, $_POST["name"]) == 0 &&                 strcmp($num, $_POST["num"]) ==0)            {                $sheet->removeRow($i, 1);                $objWriter = PHPExcel_IOFactory::createWriter($phpexcel, "Excel5");                $objWriter->save($filename);                $had = TRUE;            }        }    }    //加入用户名和号码有一个是空的,则执行这个分支    if ($had == FALSE)    {        font("请输入正确的姓名和号码", "red");        font("如果不确定,可以通过查找先定位", "red");        font("即将跳转到删除页面,请稍后...", "green");        //延迟3秒显示上面的信息,然后跳转到删除页面        header("Refresh:3;url=del.php");    }    else    {        font("用户删除成功", "green");    }}?></form></body></html>
ログイン後にコピー

If the deleteイオン操作現在のページでは入力条件を満たしていないため、特別な削除ページ del.php にジャンプします。コードは次のとおりです。

<html><head><title>号码删除页面</title><meta http-equiv="Content-Type" content="text/html; charset=utf8"/></head><body><form method="POST" action="<?php $_SERVER["PHP_SELF"] ?>" ><?phperror_reporting(E_ALL);set_include_path(get_include_path().PATH_SEPARATOR."../Classes");require_once("PHPExcel.php");require_once("PHPExcel/IOFactory.php");$filename = "phonelist.xls";$phpexcel = PHPExcel_IOFactory::load($filename);$sheet = $phpexcel->getActiveSheet();$row_phone = $sheet->getHighestRow();$column = $sheet->getHighestColumn();$column_phone = PHPExcel_Cell::columnIndexFromString($column);for ($i = 2; $i <= $row_phone; $i++){    $name = $sheet->getCellByColumnAndRow(0, $i)->getValue();    $num = $sheet->getCellByColumnAndRow(1, $i)->getValue();    //将每一条电话信息用checkbox的方式列出来    if (!empty($name) || !empty($num))    {        echo '<input type="checkbox" name="chk[]" value='.$i."/>".$name." ".$num."<br>";    }}?><input type="submit" value="删除" name="delete"/></form><?phperror_reporting(E_ALL);set_include_path(get_include_path().PATH_SEPARATOR."../Classes");require_once("PHPExcel.php");require_once("PHPExcel/IOFactory.php");function font($str, $color){    echo "<font color=".$color.">";    echo $str;    echo "</font>";    echo "</br>";}$filename = "phonelist.xls";$phpexcel = PHPExcel_IOFactory::load($filename);$sheet = $phpexcel->getActiveSheet();$row_phone = $sheet->getHighestRow();$column = $sheet->getHighestColumn();$column_phone = PHPExcel_Cell::columnIndexFromString($column);//这个用法是网上借鉴的,还是蛮好用的$chk = $_POST["chk"];for ($i = $row_phone; $i >= 2; $i--){    $name = $sheet->getCellByColumnAndRow(0, $i)->getValue();    $num = $sheet->getCellByColumnAndRow(1, $i)->getValue();    if (empty($name) && empty($num))    {        continue;    }    //在当前勾选的内容中查找,如果在数组中说明勾选了.则删除    if (in_array($i, $chk))    {        $sheet->removeRow($i, 1);        $clicked = TRUE;        echo "<font color=green>".$name." -- ".$num."</font>";        echo "<font color=red>"."  已经成功删除</font><br>";        sleep(1);    }}//如果执行了至少一次删除操作,则刷新页面,保存修改后excel表格if (TRUE == $clicked){    $objWriter = PHPExcel_IOFactory::createWriter($phpexcel, "Excel5");    $objWriter->save($filename);    $url=$SERVER["PHP_SELF"];    header("refresh:3;url=del.php");}?></body></html>
ログイン後にコピー
もちろん、PHPExcel とPHP 自体の内容は単純に少なすぎますが、入門としては十分な参考資料ではありません

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート