phpexcel导出导入

本文介绍如何使用CodeIgniter框架结合PHPExcel库实现Excel数据的导出与导入功能,包括PHPExcel的安装配置、导出Excel文件的具体实现步骤及从Excel文件中读取数据并入库的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 准备工作
    下载PHPExcel:http://phpexcel.codeplex.com/

这是个强大的Excel库,这里只演示导出Excel文件的功能,其中的大部分功能可能都用不着。

  1. 安装PHPExcel到Codeigniter
    1) 解压压缩包里的PHPExcel_1.8.0_odt / Classes文件夹中的内容到application/libraries目录下,目录结构如下:

    – application/libraries/PHPExcel.php

    – application/libraries/PHPExcel (文件夹)

2)修改application/libraries/PHPExcel/IOFactory.php 文件

– 将其类名从PHPExcel_IOFactory改为IOFactory,遵从CI类命名规则。

– 将其构造函数改为public

  1. 安装完毕,写一个导出excel的控制器(Controller)
<?php
class Table_export extends CI_Controller
{
    function __construct()
    {
        parent :: __construct(); 
        // Here you should add some sort of user validation
        // to prevent strangers from pulling your table data
    } 

    function index($table_name)
    {
        $query = $this -> db -> get($table_name);

        if (!$query)
            return false; 
        // Starting the PHPExcel library
        $this -> load -> library('PHPExcel');
        $this -> load -> library('PHPExcel/IOFactory');

        $objPHPExcel = new PHPExcel();
        $objPHPExcel -> getProperties() -> setTitle("export") -> setDescription("none");

        $objPHPExcel -> setActiveSheetIndex(0); 
        // Field names in the first row
        $fields = $query -> list_fields();
        $col = 0;
        foreach ($fields as $field)
        {
            $objPHPExcel -> getActiveSheet() -> setCellValueByColumnAndRow($col, 1, $field);
            $col++;
        } 
        // Fetching the table data
        $row = 2;
        foreach($query -> result() as $data)
        {
            $col = 0;
            foreach ($fields as $field)
            {
                $objPHPExcel -> getActiveSheet() -> setCellValueByColumnAndRow($col, $row, $data -> $field);
                $col++;
            } 

            $row++;
        } 

        $objPHPExcel -> setActiveSheetIndex(0);

        $objWriter = IOFactory :: createWriter($objPHPExcel, 'Excel5'); 
        // Sending headers to force the user to download the file
        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename="Products_' . date('dMy') . '.xls"');
        header('Cache-Control: max-age=0');

        $objWriter -> save('php://output');
    } 
}

phpexcel导入

CI框架 利用phpexcel类库 导入excel文件并入库

//从excel导入到数据表
——-上传文件

public function excel_put() { //先做一个文件上传,保存文件 $path=$_FILES['file']; $filePath = "uploads/".$path["name"]; move_uploaded_file($path["tmp_name"],$filePath); //$data=array('B'=>'name','C'=>'pwd','D'=>'money1','E'=>'salt'); $data=array('B'=>'name','C'=>'pid'); $tablename='city2';//表名字 $this->excel_fileput($filePath,$data,$tablename); }

———–处理文件,上传并入库

private function excel_fileput($filePath,$data,$tablename) { //ci框架中引入excel类 $this -> load -> library('PHPExcel'); $this -> load -> library('PHPExcel/IOFactory'); $PHPExcel = new PHPExcel(); $PHPReader = new PHPExcel_Reader_Excel2007(); if(!$PHPReader->canRead($filePath)){ $PHPReader = new PHPExcel_Reader_Excel5(); if(!$PHPReader->canRead($filePath)){ echo 'no Excel'; return ; } } // 加载excel文件 $PHPExcel = $PHPReader->load($filePath); // 读取excel文件中的第一个工作表 $currentSheet = $PHPExcel->getSheet(0); // 取得最大的列号 $allColumn = $currentSheet->getHighestColumn(); // 取得一共有多少行 $allRow = $currentSheet->getHighestRow(); // 从第二行开始输出,因为excel表中第一行为列名 for($currentRow = 2;$currentRow <= $allRow;$currentRow++) { /**从第A列开始输出*/ //echo $allColumn; for($currentColumn= 'A';$currentColumn<= $allColumn; $currentColumn++) { $val = $currentSheet->getCellByColumnAndRow(ord($currentColumn) - 65,$currentRow)->getValue(); //print_r($val); //die; if($currentColumn == 'A') { //echo $val."\t"; }else if($currentColumn <= $allColumn) { $data1[$currentColumn]=$val; } } foreach($data as $key=>$val) { $data2[$val]=$data1[$key]; } $this->db->insert($tablename,$data2); //print_r($data2); //echo "</br>"; } //echo "\n"; echo "导入成功"; } public function excel() { #查询需要导出的数据定义为标量: $arr $arr=array(); #导入类 $this->load->library('PHPExcel/PHPExcel'); #导入类 $this->load->library('PHPExcel/IOFactory'); #实例化导入类 $excel=new PHPExcel(); #设置当前本的值 $excel->setActiveSheetIndex(0);/*可有可无*/ #设置当前行 $row=1; #遍历数据 $excel->setActiveSheetIndex()->setCellValueByColumnAndRow(0,$row,'username'); $excel->setActiveSheetIndex()->setCellValueByColumnAndRow(1,$row,'password'); $row++; foreach($arr as $k=>$v) { $excel->setActiveSheetIndex()->setCellValueByColumnAndRow(0,$row,$v['username']); $excel->setActiveSheetIndex()->setCellValueByColumnAndRow(1,$row,$v['password']); $row++; } $excel = IOFactory :: createWriter($excel, 'Excel5'); // Sending headers to force the user to download the file header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="Products_' . date('dMy') . '.xls"'); header('Cache-Control: max-age=0'); $excel -> save('php://output'); }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值