【问题标题】:phpexcel exception error when exporting data to excel workbook将数据导出到excel工作簿时出现phpexcel异常错误
【发布时间】:2013-04-11 05:28:48
【问题描述】:

我正在尝试使用 phpexcel 将数据导出到 excel,但它返回此错误,但指定的 excel 文件在该位置突出显示。问题是 excel 文件在那个位置,但是一旦它返回那个错误,文件就找不到了,我做错了什么?

错误:

致命错误:在 C:\server 中未捕获异常“异常”并显示消息“文件 zip://workbooks/NDQA201303001/NDQA201303001.xlsx#xl/media/nqcl1.png 不存在” \htdocs\NQCL\application\third_party\PHPExcel\Writer\Excel2007\ContentTypes.php:216

处理进程的网页脚本代码

  $objReader = PHPExcel_IOFactory::createReader('Excel2007');           

        $objPHPExcel = $objReader->load("workbooks/" . $labref . "/" . $labref . ".xlsx");
        $objPHPExcel->getActiveSheet(0)
               ->setCellValue('E22', 'Tabs/Capsule Weight')

                ->setCellValue('E23', 'No.')
                ->setCellValue('F23', 'Tabs/Capsule Weights (mg)');
$dir = "workbooks";

        if (is_dir($dir)) {

            $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
            $objWriter->save("workbooks/" . $labref . "/" . $labref . ".xlsx");


            echo 'Data exported';
        } else {
            echo 'Dir does not exist';
        }

【问题讨论】:

  • 它不是在抱怨它找不到 Excel 文件:它是在抱怨它找不到嵌入在该 Excel 文件中的图像......我认为这个错误是在加载过程中发生的?
  • 我对您的程序流程感到困惑。您在保存文件之前检查目录是否存在,但您假设在读取时相同的文件已经存在?!

标签: php codeigniter phpexcel


【解决方案1】:

如果您使用 Codeigntier 将数据从查询导出到 Excel,这非常容易。您不需要为此使用 php excel。所有资源都在 Codeigniter 中可用。

看看我的这个答案,这可能对你有帮助。它将以 csv 格式导出数据,您可以使用 xlsx 进行更改。

Reports in Codeigniter

【讨论】:

  • 谢谢 raheel shan,但我正在从 php $_POST 导出 html 表单上输入字段的值
【解决方案2】:

使用下面的代码并根据您的要求进行更改。这很好。

<?php
include("config.php");
$result = mysql_query("SELECT * FROM recruitment" );

function xlsBOF() { 
echo pack("ssssss", 0x809, 0x8, 0x0, 0x10, 0x0, 0x0);  
return; 
}
function xlsEOF() { 
echo pack("ss", 0x0A, 0x00); 
return; 
}
function xlsWriteNumber($Row, $Col, $Value) { 
echo pack("sssss", 0x203, 14, $Row, $Col, 0x0); 
echo pack("d", $Value); 
return; 
} 
function xlsWriteLabel($Row, $Col, $Value ) { 
$L = strlen($Value); 
echo pack("ssssss", 0x204, 8 + $L, $Row, $Col, 0x0, $L); 
echo $Value; 
return; 
}
function xlsWriteString( $Row , $Col , $Value )
{
$L = strlen( $Value );
echo pack( "ssssss" , 0x204 , 8 + $L , $Row , $Col , 0x0 , $L );
echo $Value;
return;
}
// Send Header
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");;
header("Content-Disposition: attachment;filename=export.xls ");
header("Content-Transfer-Encoding: binary ");

// XLS Data Cell
xlsBOF();
xlsWriteLabel(1,0,"Application No");
xlsWriteLabel(1,1,"Date of Application");


$xlsRow = 2;

while($row = mysql_fetch_array($result))
{
$applicationno=$row['applicationno'];
$dateofapplication=$row['dateofapplication'];

//echo $salarydetails;
xlsWriteNumber($xlsRow,0,"$applicationno");
xlsWriteNumber($xlsRow,1,"$dateofapplication");

$xlsRow++;

}

xlsEOF();
exit();

//}
?>

【讨论】:

  • -1 - 我怀疑这段代码是否符合 OP 的要求......他正在读取一个 xlsx 文件,对其进行修改并保存。你的代码只写了一个基本的 xls 文件——不同的文件格式,没有读取,没有样式或 Excel 功能(例如导致问题的图像)
  • 我的系统在我导出时它工作得非常好。它的格式读取准确。与 OP 想要导出的一样。
  • 您根本没有显示任何代码来读取 OP 的原始电子表格文件;您正在以与原始海报不同的格式编写文件(您正在编写 xls 文件,OP 正在编写 xlsx 文件);您的代码没有考虑到 OP 的文件包含图像这一事实......您的系统没有执行 OP 想要的操作
  • 你好马克,我为你对phpExcel的精通鼓掌,它似乎给我带来了问题,让我理解它。这就是我想要做的。我有一个工作簿,工作簿可以有很多工作表。导出的数据来自 html 页面(几个输入)。我想要的是,当我第一次单击导出按钮时,数据将导出到索引 0 处的工作表,当我在同一页面上再次单击导出时,会创建一个新工作表并在索引 1 处的工作表处导出数据,下一次索引 2 的工作表等等,我尝试了 creatSheet 方法,但我的文件一直丢失。谢谢
  • @alphy - 首先通过一些基本调试来缩小问题范围:在文件加载期间、在调用设置单元格值期间或在保存期间是否遇到错误?
猜你喜欢
  • 2015-04-08
  • 1970-01-01
  • 1970-01-01
  • 2017-01-17
  • 1970-01-01
  • 2018-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多