目次
1 はじめに
1.1 エクスポート
1.2 インポート
2 要件
3 プログラミングソースコードのダウンロード
4 Webサイトページのデザイン
4.1 表示
4.2 display.phpコード
5 PHPをXML形式でExcelにエクスポート(売上レポートテンプレートをエクスポート)
ホームページ バックエンド開発 PHPチュートリアル Excel グラフィックスと XML 形式でのテキスト コード共有を使用して PHP でデータをインポートおよびエクスポートする方法

Excel グラフィックスと XML 形式でのテキスト コード共有を使用して PHP でデータをインポートおよびエクスポートする方法

Jul 17, 2017 pm 03:33 PM
php 輸入 輸出

1 はじめに

1.1 エクスポート

実際の作業プロジェクトでは、勤怠レポートのエクスポート、財務諸表のエクスポート、業績レポートのエクスポート、販売レポートのエクスポートなど、いくつかの重要なデータベースに保存されているデータを Excel にエクスポートする必要があることがよくあります。 CleverCode は 2 年間 PHPExcel を使用して Excel エクスポート データを作成しましたが、特にセルの色の制御、セルの結合、セルの長さの設定など、PHPExcel を使用して Excel を生成するのは面倒すぎることがわかりました。 Excel でこれらの 1 つをデザインするには、通常 1 日かかります。その後、CleverCode は、PHP を使用して Excel を XML 形式でエクスポートする簡単な方法を発見しました。以前は 1 日かかっていましたが、今では半分の労力で 2 倍の結果が得られます。

1.2 インポート

同時に、一部のプロジェクトでは Excel データをデータベースにインポートする必要もあります。たとえば、銀行から提供された銀行取引明細書や販売レポートがデータベースにインポートされます。通常のアプローチは、PHPExcel を使用することです。

Excel を XML 形式で読み取るには、Xml パーサー、SimpleXML、XMLReader、DOMDocument などのメソッドを使用できますが、CleverCode はこれらのメソッドを使用しようとしましたが、これらのメソッドは複雑すぎて手間がかかり、PHPExcel ほど便利ではないことがわかりました。

したがって、Excel (xml 形式を含む) を読み取る必要がある場合、CleverCode は PHPExcel ライブラリを使用することをお勧めします。

2 要件

あるグループでは、各地域の担当者が、担当する都市局の注文と売上をデータベースにインポートする必要があります。
1) Web サイトでは、インポートされた販売レポートのテンプレートが提供されます。
2) 各担当者は、自分が担当する都市のデータのみアップロードおよびダウンロードできます(権限チェック)。
3) 現在の年とその日が所有するすべての四半期を生成する場合にのみアップロードします。たとえば、今日は 2015 年 5 月 26 日です。次に、2015 年の第 1 四半期と第 2 四半期のみが生成されます。
2015-12-01 の場合。 2015 年の第 1 四半期、第 2 四半期、第 3 四半期、および第 4 四半期を生成する必要があります。
4) 今四半期の前四半期のデータを表示します。
5) この四半期のデータはデフォルトではすべて 0 です。
6) この四半期のデータのみを変更できます。

3 プログラミングソースコードのダウンロード

4 Webサイトページのデザイン

4.1 表示


4.2 display.phpコード

<!DOCTYPE html>
<html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gbk" />
    <title>PHP导入与导出xml格式的Excel</title>
    <style type="text/css">
        body{ font-size:14px;}
        input{ vertical-align:middle; margin:0; padding:0}
        .file-box{ position:relative;width:340px}
        .txt{ height:22px; border:1px solid #cdcdcd; width:180px;}
        .btn{ background-color:#FFF; border:1px solid #CDCDCD;height:24px; width:70px;}
        .file{ position:absolute; top:0; right:80px; height:24px; filter:alpha(opacity:0);
            opacity: 0;width:260px }
    </style>
    </head>

<body>
    <p class="file-box">
        <form action="" method="post" enctype="multipart/form-data">
            <input type=&#39;text&#39; name=&#39;textfield&#39; id=&#39;textfield&#39; class=&#39;txt&#39; />  
            <input type=&#39;button&#39; class=&#39;btn&#39; value=&#39;浏览...&#39; />
            <input type="file" name="fileField" class="file" id="fileField" size="28" 
                onchange="document.getElementById(&#39;textfield&#39;).value=this.value" />
            <input type="submit" name="submit" class="btn" value="上传" />            
        </form>
        <a href="export.php">下载销售报表模板</a>
    </p>
</body>
</html>
ログイン後にコピー

5 PHPをXML形式でExcelにエクスポート(売上レポートテンプレートをエクスポート)

1) 「売上報告書.xlsx」を新規作成します。デザインは以下の通りです。



2) [売上レポートデータを保存します。

4) テーブル情報を検索します。 ss:ExpandedColumnCount="5" ss:ExpandedRowCount="6" を削除します。この制限はテーブルの長さと幅を制限するため、削除する必要があります。

<Table ss:ExpandedColumnCount="5" ss:ExpandedRowCount="6" x:FullColumns="1"
   x:FullRows="1" ss:StyleID="s23" ss:DefaultColumnWidth="54"
   ss:DefaultRowHeight="18.75">
ログイン後にコピー

に変更されました

<Table  x:FullColumns="1"   x:FullRows="1" ss:StyleID="s23" ss:DefaultColumnWidth="54"
   ss:DefaultRowHeight="18.75">
ログイン後にコピー

5 PHP は Excel ビジネス ロジック コード (Excel.php) をエクスポートします

<?php

/**
 * Excel.php
 *
 * Excel操作
 *
 * Copyright (c) 2015 http://blog.csdn.net/CleverCode
 *
 * modification history:
 * --------------------
 * 2015/5/14, by CleverCode, Create
 *
 */
class Excel{

    /**
     * 导出excel
     *
     * @param int $userid 用户编号
     * @return string $xmlStr
     */
    public static function export($userid){
        
        // 根据不同用户的权限,获取不同的数据
        $data = self::getExportData($personid);
        
        // 获取字符串,如果excel的列是固定的可以通过Smarty方式获取
        // 但是如果excel的列需要通过动态生成,则可以通过php组合字符串。
        // $xmlStr = self::getXmlStrBySmarty($data);
        
        // 这个需要根据当前日期动态的生成有几个季度
        $xmlStr = self::getXmlStrByPHP($data);
        
        return $xmlStr;
    }

    /**
     * 生成excel数据
     *
     * @param int $userid 用户编号
     * @return array 结果数据
     */
    public static function getExportData($userid){
        if (!is_int($userid)) {
            return array();
        }
        
        $infoBJ = array(
            &#39;city&#39; => &#39;北京&#39;,
            &#39;order_1&#39; => 100,
            &#39;money_1&#39; => 10000,
            &#39;order_2&#39; => 200,
            &#39;money_2&#39; => 40000 
        );
        
        $infoTJ = array(
            &#39;city&#39; => &#39;天津&#39;,
            &#39;order_1&#39; => 50,
            &#39;money_1&#39; => 1000,
            &#39;order_2&#39; => 100,
            &#39;money_2&#39; => 2000 
        );
        
        $infoGZ = array(
            &#39;city&#39; => &#39;广州&#39;,
            &#39;order_1&#39; => 50,
            &#39;money_1&#39; => 1000,
            &#39;order_2&#39; => 100,
            &#39;money_2&#39; => 2000 
        );
        
        // 根据不同用户的权限,获取不同的数据
        if (is_admin($userid)) {
            
            $data[] = $infoBJ;
            $data[] = $infoTJ;
            $data[] = $infoGZ;
        } else {
            $data[] = $infoBJ;
        }
        
        return $data;
    }

    /**
     * 通过Smarty方式获取xml字符串
     *
     * @param array $data 结果集
     * @return string $xmlStr
     */
    public static function getXmlStrBySmarty($data){
        require_once &#39;Smarty.class.php&#39;;
        $smarty = new Smarty();
        
        $tpl = &#39;file/export.tpl&#39;;
        
        $smarty->assign(&#39;list&#39;, $data);
        
        // capture the output
        // 捕获输出
        $xml = $smarty->fetch($tpl);
        
        return $xml;
    }

    /**
     * 通过PHP组合字符串方式获取xml字符串(可以动态扩展列)
     *
     * @param array $data 结果集
     * @return string $xmlStr
     */
    public static function getXmlStrByPHP($data){
        $xml = &#39;
               <?xml version="1.0"?>
                <?mso-application progid="Excel.Sheet"?>
                <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
                 xmlns:o="urn:schemas-microsoft-com:office:office"
                ............
                  </Style>
                 </Styles>
                 <Worksheet ss:Name="Sheet1">
                  <Table x:FullColumns="1"
                   x:FullRows="1" ss:StyleID="s16" ss:DefaultColumnWidth="54"
                   ss:DefaultRowHeight="18.75">
         &#39;;
        
        //可以根据季度的多少动态扩展列,这里不做说明,请自行尝试。
        $xml. = &#39;
           <Row ss:AutoFitHeight="0">
            <Cell ss:MergeDown="1" ss:StyleID="m42513364"><Data ss:Type="String">城市</Data></Cell>
            <Cell ss:MergeAcross="1" ss:StyleID="s25"><Data ss:Type="String">2015一季度</Data></Cell>
            <Cell ss:MergeAcross="1" ss:StyleID="m42513344"><Data ss:Type="String">2015二季度</Data></Cell>
           </Row>
           <Row ss:AutoFitHeight="0">
            <Cell ss:Index="2" ss:StyleID="s17"><Data ss:Type="String">订单</Data></Cell>
            <Cell ss:StyleID="s17"><Data ss:Type="String">销售额</Data></Cell>
            <Cell ss:StyleID="s17"><Data ss:Type="String">订单</Data></Cell>
            <Cell ss:StyleID="s17"><Data ss:Type="String">销售额</Data></Cell>
           </Row>
        &#39;;
        
        // 输出数据
        foreach ( $data as $row ) {
            $xml .= &#39;
               <Row ss:AutoFitHeight="0">
                <Cell ss:StyleID="s18"><Data ss:Type="String">&#39; . $row[&#39;city&#39;] . &#39;</Data></Cell>
                <Cell ss:StyleID="s19"><Data ss:Type="Number">&#39; . $row[&#39;order_1&#39;] . &#39;</Data></Cell>
                <Cell ss:StyleID="s19"><Data ss:Type="Number">&#39; . $row[&#39;money_1&#39;] . &#39;</Data></Cell>
                <Cell ss:StyleID="s19"><Data ss:Type="Number">&#39; . $row[&#39;order_2&#39;] . &#39;</Data></Cell>
                <Cell ss:StyleID="s19"><Data ss:Type="Number">&#39; . $row[&#39;money_2&#39;] . &#39;</Data></Cell>
               </Row>               
            &#39;;
        }
        
        $xml .= &#39;
        <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
          ...........
        </Workbook>
        &#39;;
        return $xml;
    }
}
ログイン後にコピー

6 PHP は Excel クライアント コード (export.php) をエクスポートします

<?php
/**
 * export.php
 *
 * 导出excel
 *
 * Copyright (c) 2015 http://blog.csdn.net/CleverCode
 *
 * modification history:
 * --------------------
 * 2015/5/14, by CleverCode, Create
 *
 */

// Excel类
include_once (&#39;Excel.php&#39;);

/*
 * 客户端类
 * 让客户端和业务逻辑尽可能的分离,降低客户端和业务逻辑算法的耦合,
 * 使业务逻辑的算法更具有可移植性
 */
class Client{

    public function main(){
        
        // 获取xml格式字符串
        $xmlStr = Excel::export(1);
        // 头部
        $filename = &#39;销售报表模板&#39;;
        header("Content-Type: application/vnd.ms-excel; charset=UTF-8");
        header("Content-Disposition: inline; filename=\"$filename.xls\"");
        header("Content-Transfer-Encoding: binary");
        header("Pragma: public");
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
        
        // 输出字符串
        echo $xmlStr;
        
        exit();
    }
}

/**
 * 程序入口
 */
function start(){
    $client = new Client();
    $client->main();
}

start();

?>
ログイン後にコピー

6 PHP は XML 形式の Excel をインポートします

1) 営業テンプレートをダウンロード後、データを入力し、ページ内のアップロードボタンをクリックしてExcelデータをアップロードします。

2) PHP は Excel ビジネス ロジック コード (Excel.php) をインポートしました。ここではPHPExcelライブラリを使用します。

<?php

/**
 * Excel.php
 *
 * Excel操作
 *
 * Copyright (c) 2015 http://blog.csdn.net/CleverCode
 *
 * modification history:
 * --------------------
 * 2015/5/14, by CleverCode, Create
 *
 */
class Excel{    
    /*
     * 读取Excel格式的数据(可以读取xml格式数据)
     *
     * @param string $filename excel文件
     * @param string $startRow 开始行
     * @param string $endRow 结束行
     * @param string $startColumn 开始列
     * @param string $endColumn 结束列
     * @return array excel结果集数据
     */
    public static function read($filename, $startRow = 1, $endRow = null, $startColumn = 0, $endColumn = null){
        $excelData = array();
        if (!file_exists($filename)) {
            return $excelData;
        }
        
        require_once &#39;PHPExcel/PHPExcel.php&#39;;
        require_once &#39;PHPExcel/PHPExcel/IOFactory.php&#39;;
        
        // 加载excel文件
        $objPHPExcel = PHPExcel_IOFactory::load($filename);
        
        // 获取焦点Sheet
        $objWorksheet = $objPHPExcel->getActiveSheet();
        
        // 获取总行
        $totalRows = $objWorksheet->getHighestRow(); // 获取总行数
                                                     
        // 获取总列
        $highestColumn = $objWorksheet->getHighestColumn();
        $totalColumns = PHPExcel_Cell::columnIndexFromString($highestColumn);
        
        // 开始行
        if (!is_int($startRow) || $startRow < 1) {
            $startRow = 1;
        }
        
        // 结束行
        if ($endRow == null || !is_int($endRow) || $endRow > $totalRows) {
            $endRow = $totalRows;
        }
        
        // 开始列
        if (!is_int($startColumn) || $startColumn < 0) {
            $startColumn = 0;
        }
        
        // 结束列
        if ($endColumn == null || !is_int($endColumn) || $endColumn > $totalColumns) {
            $endColumn = $totalColumns;
        }
        
        // 读取数据
        for($rowNum = $startRow; $rowNum <= $endRow; $rowNum++) {
            for($colNum = $startColumn; $colNum < $endColumn; $colNum++) {
                $item = $objWorksheet->getCellByColumnAndRow($colNum, $rowNum);
                $exValue = trim($item->getValue());
                $excelData[$rowNum][$colNum] = $exValue;
            }
        }
        return $excelData;
    }
}
ログイン後にコピー

3) PHP でインポートされた Excel クライアント コード (import.php)

<?php
/**
 * import.php
 *
 * 导入excel
 *
 * Copyright (c) 2015 http://blog.csdn.net/CleverCode
 *
 * modification history:
 * --------------------
 * 2015/5/14, by CleverCode, Create
 *
 */

// Excel类
include_once (&#39;Excel.php&#39;);

/*
 * 客户端类
 * 让客户端和业务逻辑尽可能的分离,降低客户端和业务逻辑算法的耦合,
 * 使业务逻辑的算法更具有可移植性
 */
class Client{

    public function main(){
        if (!$_FILES[&#39;file&#39;]) {
            exit();
        }
        
        // 从第3行开始读取Excel数据
        $datas = Excel::read($_FILES[&#39;file&#39;][&#39;tmp_name&#39;], 3);
        
        // 将$datas保存到数据库
        // ....
    }
}

/**
 * 程序入口
 */
function start(){
    $client = new Client();
    $client->main();
}

start();

?
ログイン後にコピー

以上がExcel グラフィックスと XML 形式でのテキスト コード共有を使用して PHP でデータをインポートおよびエクスポートする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

今まで知らなかったことを後悔している 7 つの PHP 関数 今まで知らなかったことを後悔している 7 つの PHP 関数 Nov 13, 2024 am 09:42 AM

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

See all articles