PHP+MySQL导出Excel的方法

前段时间接了个任务,其中有需要把数据库中的内容导出Excel表格,调了几天的BUG终于完成,下面说一下过程:

1. 导出Excel需要下载PHPExcel包,因为要用到里面的一些头文件。下载网址:http://phpexcel.codeplex.com/

下载完成后要把它和你写的PHP文件在一起,或者其中引用的部分的路径一定要正确,否则会报错。

 

2. 代码中要包含一些必要的 header 文件:

 

  header("Content-Type: text/html;charset=utf-8");
  header('Content-Type: application/vnd.ms-excel');
  header('Content-Disposition: attachment;filename="成员工作量.xls"');
  header('Cache-Control: max-age=0');
  
  header('Cache-Control: max-age=1');
  header ('Expires: Mon, 26 Jul 2014 05:00:00 GMT');
  header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); 
  header ('Cache-Control: cache, must-revalidate'); 
  header ('Pragma: public');

可能其中的一些可有可无,但一些必要的还是要有的,这里就不一一解释每句代码的意思了。

 

3. 用 PHPExcel 时要先new一个对象:

 

$objPHPExcel = new PHPExcel();

 

然后利用此对象对Excel表进行相应的操作。

 

下面是对Excel的一些属性的操作:

 

$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
                                                          ->setLastModifiedBy("Maarten Balliauw")
                                                          ->setTitle("Office 2007 XLSX Test Document")
                                                          ->setSubject("Office 2007 XLSX Test Document")
                                                          ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
                                                          ->setKeywords("office 2007 openxml php")
                                                          ->setCategory("Test result file");

 

当要对其中的单元格操作时,要用到setCellValue()函数,如对A1格赋值:

$objPHPExcel->setActiveSheetIndex(0)
                          ->setCellValue('A1', '序号');


4.设置表格宽度:

如:设置B列的列宽为20:

$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(20);


 

当要想把字符串放到表格时,要先转换类型:

$user = iconv("GBK","UTF-8",$row['user']);  //$row['user']是从数据库中取得变量


然后插入:

$objPHPExcel->setActiveSheetIndex(0)
                          ->setCellValue('A1', $user);


最后转换:

$objPHPExcel->getActiveSheet()
                          ->getCell('A1')->setValueExplicit($user, PHPExcel_Cell_DataType::TYPE_STRING);


 

5.关于导出的Excel的乱码问题:

 

因为Excel默认的是GBK编码,因此在填入内容之前要先转换编码类型:

 

首先,此页面的编码要用GBK:

header("Content-Type: text/html;charset=gbk");


当用的是notepad++开发时,选择“以utf-8无BOM格式”。

 

然后是向数据库发请求时用gbk:

mysql_query("set names 'gbk'");


 

最后是不要随意引用文件,如:链接数据库的文件:conn.php ,因为两者的编码不一样,会出现乱码,所以最好把引用的文件内容复制过来。

 

下面附上一段例子代码:

<?php
  error_reporting(E_ALL);
  ini_set('display_errors', TRUE);
  ini_set('display_startup_errors', TRUE);
  date_default_timezone_set('Europe/London');
  if (PHP_SAPI == 'cli')
     die('This example should only be run from a Web Browser');
  require_once('PHPExcel.php');
  $objPHPExcel = new PHPExcel();
  $objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
        ->setLastModifiedBy("Maarten Balliauw")
        ->setTitle("Office 2007 XLSX Test Document")
        ->setSubject("Office 2007 XLSX Test Document")
        ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
        ->setKeywords("office 2007 openxml php")
        ->setCategory("Test result file");
  $objPHPExcel->setActiveSheetIndex(0)
            ->setCellValue('A1', '序号')
            ->setCellValue('B1', '学号')
            ->setCellValue('C1', '姓名')
   ->setCellValue('D1', '部门')
            ->setCellValue('E1', '工作量');
   
  $con = mysql_connect("localhost","root","123");
  if (!$con)
  {
        die('Could not connect: ' . mysql_error());
  }
  mysql_select_db("outuser", $con);     
  mysql_query("set names 'gbk'");
  $sql="SELECT * FROM work WHERE state='1' ORDER BY id desc";     
  $result=mysql_query($sql); 
  $i = 2;
  $id = 1;
  while($row=mysql_fetch_array($result))
  { 
        switch($row['department'])
        {
            case "content":
                $row['department'] = "内容部";
                break;
            case "operate":
                $row['department'] = "运营部";
                break;
            case "front":
                $row['department'] = "技术部前端";
                break;
            case "backstage":
                $row['department'] = "技术部后台服务器";
                break;
            case "move":
                $row['department'] = "技术部移动";
                break;
            case "page":
                $row['department'] = "技术部页面";
                break;
        }
        $user = iconv("GBK","UTF-8",$row['user']);
        $name = iconv("GBK","UTF-8",$row['name']);
        $work = iconv("GBK","UTF-8",$row['work']);
        $objPHPExcel->setActiveSheetIndex(0)
                    ->setCellValue('A'.$i, $id)
                    ->setCellValue('B'.$i, $user)
                    ->setCellValue('C'.$i, $name)
                    ->setCellValue('D'.$i, $row['department'])
                    ->setCellValue('E'.$i, $work);
        
        $objPHPExcel->getActiveSheet()
                    ->getCell('B'.$i)->setValueExplicit($user, PHPExcel_Cell_DataType::TYPE_STRING);
        $objPHPExcel->getActiveSheet()
                    ->getCell('C'.$i)->setValueExplicit($name, PHPExcel_Cell_DataType::TYPE_STRING);
        $objPHPExcel->getActiveSheet()
                    ->getCell('E'.$i)->setValueExplicit($work, PHPExcel_Cell_DataType::TYPE_STRING);
           
        $i++;
        $id++; 
    }
   mysql_close($con);
 
  $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(20);
  $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(20);
 
  $objPHPExcel->getActiveSheet()->setTitle('Simple');
  $objPHPExcel->setActiveSheetIndex(0);
  header("Content-Type: text/html;charset=gbk");
  header('Content-Type: application/vnd.ms-excel');
  header('Content-Disposition: attachment;filename="成员工作量.xls"');
  header('Cache-Control: max-age=0');
  
  header('Cache-Control: max-age=1');
  header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
  header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); 
  header ('Cache-Control: cache, must-revalidate'); 
  header ('Pragma: public');
  $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
  $objWriter->save('php://output');
?>


 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是 PHP 代码示例,用于从 MySQL 数据库导出数据到 Excel 文件: ``` <?php // 连接数据库 $conn = mysqli_connect("hostname", "username", "password", "database_name"); // 检查连接是否成功 if (!$conn) { die("连接失败: " . mysqli_connect_error()); } // 查询数据库并导出Excel 文件 $sql = "SELECT * FROM table_name"; $result = mysqli_query($conn, $sql); // 创建 PHPExcel 对象 $objPHPExcel = new PHPExcel(); // 设置工作表 $objPHPExcel->setActiveSheetIndex(0); $sheet = $objPHPExcel->getActiveSheet(); // 设置标题行 $sheet->setCellValue("A1", "列1"); $sheet->setCellValue("B1", "列2"); ... // 循环读取数据库中的数据 $row = 2; // 从第2行开始 while ($row_data = mysqli_fetch_assoc($result)) { $sheet->setCellValue("A".$row, $row_data["column1"]); $sheet->setCellValue("B".$row, $row_data["column2"]); ... $row++; } // 设置保存路径 $file_name = "导出文件名.xlsx"; $save_path = "导出文件路径/".$file_name; // 保存 Excel 文件 $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel); $objWriter->save($save_path); // 关闭数据库连接 mysqli_close($conn); // 输出下载链接 echo "文件已导出,请点击 <a href='".$save_path."'>下载</a>"; ``` 以下是 PHP 代码示例,用于从 Excel 文件导入数据到 MySQL 数据库: ``` <?php // 连接数据库 $conn = mysqli_connect("hostname", "username", " ### 回答2: MySQL导入导出Excel是将MySQL数据库中的数据导出Excel表格或将Excel表格中的数据导入到MySQL数据库中。 导出Excel使用的是PHPExcel库,首先需要安装这个库,并在代码中引入相应的类文件。然后连接MySQL数据库,编写SQL查询语句以获取所需数据。接着创建一个Excel对象,设置表头和数据,将查询结果逐行写入到Excel中。最后将Excel保存为文件并提供下载链接。 以下是一个简单的MySQL导出ExcelPHP代码示例: <?php require_once 'PHPExcel/PHPExcel.php'; // 连接MySQL数据库 $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "database"; $conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } // 查询数据 $sql = "SELECT * FROM table"; $result = $conn->query($sql); // 创建Excel对象 $objPHPExcel = new PHPExcel(); $objPHPExcel->getActiveSheet()->setTitle('Sheet1'); // 设置表头 $objPHPExcel->getActiveSheet()->setCellValue('A1', '列1'); $objPHPExcel->getActiveSheet()->setCellValue('B1', '列2'); $objPHPExcel->getActiveSheet()->setCellValue('C1', '列3'); // 设置数据 $row = 2; while ($row_data = $result->fetch_assoc()) { $objPHPExcel->getActiveSheet()->setCellValue('A' . $row, $row_data['column1']); $objPHPExcel->getActiveSheet()->setCellValue('B' . $row, $row_data['column2']); $objPHPExcel->getActiveSheet()->setCellValue('C' . $row, $row_data['column3']); $row++; } // 保存Excel文件 $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); $objWriter->save('output.xlsx'); // 提供下载链接 echo '<a href="output.xlsx">Download Excel</a>'; // 关闭数据库连接 $conn->close(); ?> 导入Excel同样使用PHPExcel库,首先需要将Excel文件上传到服务器上,并在代码中获取上传文件的路径。然后连接MySQL数据库,编写插入语句以将数据插入到数据库中。接着使用PHPExcel的读取功能,读取Excel文件的内容并逐行插入到数据库中。 以下是一个简单的MySQL导入ExcelPHP代码示例: <?php require_once 'PHPExcel/PHPExcel.php'; // 连接MySQL数据库 $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "database"; $conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } // 获取上传文件路径 $file_path = 'path/to/uploaded/file.xlsx'; // 读取Excel文件 $objReader = PHPExcel_IOFactory::createReader('Excel2007'); $objPHPExcel = $objReader->load($file_path); $sheet = $objPHPExcel->getSheet(0); // 获取行数 $highestRow = $sheet->getHighestRow(); // 读取数据并插入数据库 for ($row = 2; $row <= $highestRow; $row++) { $column1 = $sheet->getCell('A' . $row)->getValue(); $column2 = $sheet->getCell('B' . $row)->getValue(); $column3 = $sheet->getCell('C' . $row)->getValue(); $sql = "INSERT INTO table (column1, column2, column3) VALUES ('$column1', '$column2', '$column3')"; if ($conn->query($sql) !== TRUE) { echo "Error: " . $sql . "<br>" . $conn->error; } } // 关闭数据库连接 $conn->close(); ?> 以上是一个基本的MySQL导入导出ExcelPHP代码示例,根据实际需求可以进行相应的修改和扩展。 ### 回答3: MySQL导入导出Excel可以使用PHP代码来实现。以下是一个示例代码: 导出Excel文件: ``` <?php // 导出Excel文件 require_once 'PHPExcel.php'; // 创建一个新的PHPExcel对象 $objPHPExcel = new PHPExcel(); // 设置Excel文件的属性 $objPHPExcel->getProperties()->setCreator("Your Name") ->setLastModifiedBy("Your Name") ->setTitle("Excel Document") ->setSubject("Excel Document") ->setDescription("Test document for Excel") ->setKeywords("excel php") ->setCategory("Test"); // 添加数据到Excel文件中 $objPHPExcel->getActiveSheet()->setCellValue('A1', 'Hello') ->setCellValue('B1', 'World!'); // 导出Excel文件 header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="example.xlsx"'); header('Cache-Control: max-age=0'); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); $objWriter->save('php://output'); exit; ?> ``` 导入Excel文件: ``` <?php // 导入Excel文件 require_once 'PHPExcel.php'; // 获取上传的Excel文件 $file = $_FILES['file']['tmp_name']; // 读取Excel文件内容 $objPHPExcel = PHPExcel_IOFactory::load($file); // 获取第一个工作表 $sheet = $objPHPExcel->getSheet(0); // 获取行数和列数 $highestRow = $sheet->getHighestRow(); $highestColumn = $sheet->getHighestColumn(); // 循环读取数据 for ($row = 1; $row <= $highestRow; $row++) { // 读取每一列的数据 for ($col = 'A'; $col <= $highestColumn; $col++) { $data = $sheet->getCell($col.$row)->getValue(); // 处理数据 } } // 处理完数据之后可以进行其他操作 ?> ``` 以上是一个简单示例的MySQL导入导出ExcelPHP代码。你可以根据自己的需求修改代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值