使用过很多次phpexcel了,有时需要保存文件到磁盘,有时需要浏览器弹出下载。保存到磁盘一半不会出现问题,关键是浏览器弹出保存,经常会发生导出的excel文件无法打开,提示文件格式或文件名无效,文件损毁。在此,记录一下解决办法。

1、xls还是xlsx?首先确定导出的excel文件扩展名

2、添加header,不同的文件类型,不同的header。

我就是这里出了问题,xlsx用了xls的header,导致导出的excel无法打开。

2007excel:xlsx如下:

$excelName = '绩效得分统计'.time();

header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');

header('Content-Disposition: attachment;filename="'.$excelName.'.xlsx"');

header('Cache-Control: max-age=0');

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');

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

exit;

2003excel:xls如下:

header('Content-Type: application/vnd.ms-excel');

header('Content-Disposition: attachment;filename="links_out'.$timestamp.'.xls"');

header('Cache-Control: max-age=0');

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');

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

exit;

3、末尾添加exit(一定要添加,否则也会提示文件损坏)。

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

exit;

例如xlsx,完整参考如下:

require_once ('inc/PHPExcel-1.8/Classes/PHPExcel.php');

$objPHPExcel = new PHPExcel();

$objSheet = $objPHPExcel->getActiveSheet();

$objPHPExcel->getProperties()->setCreator("文档创建者添翼博客")

->setTitle("添翼博客PHPExcel" . time())

->setSubject("添翼博客phpexcel导出". time())

->setDescription("phpexcel导出excel无法打开,提示文件格式或文件名无效,文件损毁,解决办法". time())

->setKeywords("phpexcel");

ob_end_clean();

//填充数据

$objSheet->setTitle("绩效得分统计". time());

//输入表头1

foreach ($titlearray as $k=>$v){

$num = $k;

$objSheet->setCellValue(PHPExcel_Cell::stringFromColumnIndex($num) . (1), $v);

}

//输入表头2

foreach ($leadnames as $k=>$v){

$num = $k;

$objSheet->setCellValue(PHPExcel_Cell::stringFromColumnIndex($num) . (2), $v);

}

$head3 = ['',''];

$head4 = array_merge($head3,$dept_data);

foreach ($dept_data as $k2=>$v2){

$num2 = ($k2+1)*2-1;

$num3 = ($k2+1)*2;

$num4 = ($k2+2)*2-1;

$num5 = ($k2+2)*2;

//合并单元格
$first = 'A'.$num2;
$first2 = 'A'.$num3;
$first3 = 'A'.$num4;
$first4 = 'B'.$num4;
$first5 = 'B'.$num5;

$objPHPExcel->getActiveSheet()->mergeCells("$first:$first2");
$objSheet->setCellValue($first3, $v2);
$objSheet->setCellValue($first4, '应得分');
$objSheet->setCellValue($first5, '实得分');
}

$col = count($projectName);
$row = count($dept_data);
for ($i=0;$i<$col;$i++){
for ($j=0;$j<$row;$j++){
$n1 = $i+2;
$n2 = PHPExcel_Cell::stringFromColumnIndex($n1);
$m1 = ($j+2)*2-1;
$m2 = ($j+2)*2;
$kou1 = $n2.$m1;
$kou2 = $n2.$m2;
// echo $new2Data1[$i][$j];
if (!empty($new2Data1[$i][$j])){
$objSheet->setCellValue($kou1, $new2Data1[$i][$j]);
}
if (!empty($new2Data2[$i][$j])){
$objSheet->setCellValue($kou2, $new2Data2[$i][$j]);
}
}
}

$excelName = '绩效得分统计'.time();
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="'.$excelName.'.xlsx"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');
exit;

phpexcel 导出excel无法打开,提示文件格式或文件名无效,文件损毁,解决办法的更多相关文章

  1. Ubuntu“无法解析或打开软件包的列表或是状态文件”的解决办法。_StarSasumi_新浪博客

    Ubuntu"无法解析或打开软件包的列表或是状态文件"的解决办法. (2011-04-30 14:56:14) 转载▼ 标签: ubuntu apt 分类: Ubuntu/Linu ...

  2. 应用phpexcel导出excel文件后打不开的问题解决方法

    应用phpexcel导出excel文件后打不开,提示“文件格式或文件扩展名无效,请确定文件未损坏,并且文件扩展名与文件的格式匹配”. 试了以下方法: 1.首先区分文件格式是2003,还是2007. 参 ...

  3. PHPExcel导出excel文件

    今天园子刚开,先来个货顶下,后续园丁qing我会再慢慢种园子的,希望大家多来园子逛逛. PHPExcel导出excel文件,先说下重要的参数要记住的东西 impUser() 导入方法 exportEx ...

  4. 使用NPOI将数据库里信息导出Excel表格并提示用户下载

    使用NPOI进行导出Excel表格大家基本都会,我在网上却很少找到导出Excel表格并提示下载的 简单的代码如下 //mvc项目可以传多个id以逗号相隔的字符串 public ActionResult ...

  5. phpExcel导出excel加超级链接的实例代码[转]

    phpexcel实现的导出excel文件的代码,且可以在excel文件中加入超级链接. 说明:PHPExcel的开发包Tests目录有详细使用实例.以下代码支持中文,注意文件编码,文件保存为utf-8 ...

  6. Excel在任务栏中只显示一个窗口的解决办法

     Excel在任务栏中只显示一个窗口的解决办法  以前朋友遇到过这个问题,这次自己又遇到了,习惯了以前的那种在任务栏中显示全部窗口,方便用Alt+Tab键进行切换. 如果同时打开许多Excel工作簿, ...

  7. 安装程序无法打开注册表项 UNKNOWN\Components\…的简单解决办法(转)

    安装程序无法打开注册表项 UNKNOWN\Components\…的简单解决办法 2018年04月16日 16:41:32 super_star_贤 阅读数:7193   在安装软件时(比如安装SQL ...

  8. windows下运行命令行mysql,提示mysql不是内部命令,解决办法

    1. 打开CMD命令行,连接本地mysql数据库:mysql -u root -p 提示‘mysql’不是本地命令,解决办法如下: 找到你安装的mysql的目录,打开当前目录下的bin文件夹,你可以看 ...

  9. “只有DBA才能导入由其他DBA导出的文件”各种解决办法

    “只有DBA才能导入由其他DBA导出的文件”各种解决办法 当oracle导入的时候出现“只有 DBA 才能导入由其他 DBA 导出的文件”的时候通常有以下几种解决办法! 1:常见的是直接grant   ...

随机推荐

  1. Java中使用BufferedReader的readLine()方法和read()方法来读取文件内容

    目标:读文件 编程时,有很多时候需要读取本地文件,下面介绍一下读取方式: 读单行文件 package com; import java.io.*; import java.util.ArrayList ...

  2. LightOJ - 1410 - Consistent Verdicts(规律)

    链接: https://vjudge.net/problem/LightOJ-1410 题意: In a 2D plane N persons are standing and each of the ...

  3. 2019.11.15 JQ图片轮播

    <div class="three"> <div class="bjtp"> <img class="bjpic b1& ...

  4. fedora安装设置

    添加视频解码rpmfusion源: sudo rpm -ivh http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-st ...

  5. python中isinstance函数

    1.描述 python中isinstance()函数,是python中的一个内置函数,用来判断一个函数是否是一个已知的类型,类似type(). 2.语法 isinstance(object,class ...

  6. Java8 LocalDateTime的补充工具方法

    import java.time.*;import java.time.format.DateTimeFormatter;import java.time.format.DateTimeFormatt ...

  7. 44个Java性能优化

    44个Java性能优化 首先,代码优化的目标是: 减小代码的体积 提高代码运行效率 代码优化细节 1 .尽量指定类.方法的final修饰符 ​ 带有final修饰符的类是不可派生的.在Java核心AP ...

  8. Android中显式意图和隐式意图的区别

    1.显式意图 可以直接通过名称开启指定的目标组件: 通过构造方法Intent(Context packageContext,class<?>cls)来实现. button_1 = (But ...

  9. mac编译Cpython

    源代码中有什么? CPython 源代码分发包含各种工具,库和组件.我们将在本文中探讨这些内容. 首先,我们将重点关注编译器.先从 git 上下载 Cpython 源代码. git clone htt ...

  10. 三大框架 之 spring-JDBC

    目录 spring-JDBC模板 Spring的JDBC的模板 JDBC模板使用的入门 引入jar包 创建数据库和表 使用JDBC的模板 将连接池和模板交给Spring管理 配置文件配置Bean 使用 ...