2014-05-25 186 views
3

我在很多帖子中看到了这个问题。但没有人回答。当我在一个Excel文件中插入图像 第一次,没有问题是there.but如果我加载的Excel文件再次,并尝试在另一个单元格中插入其他影像,出现以下问题:PHPExcel - 加载和写入后尝试插入图像时出错

Fatal error: Uncaught exception 'PHPExcel_Writer_Exception' with message 'File zip://C:\xampp\htdocs\Well\test.xlsx#xl/media/well1.bmp does not exist' in C:\xampp\htdocs\Well\Classes\PHPExcel\Writer\Excel2007\ContentTypes.php:242 Stack trace: #0 C:\xampp\htdocs\Well\Classes\PHPExcel\Writer\Excel2007\ContentTypes.php(181): PHPExcel_Writer_Excel2007_ContentTypes->_getImageMimeType('zip://C:\xampp\...') #1 C:\xampp\htdocs\Well\Classes\PHPExcel\Writer\Excel2007.php(246): PHPExcel_Writer_Excel2007_ContentTypes->writeContentTypes(Object(PHPExcel), false) #2 C:\xampp\htdocs\Well\test.php(125): PHPExcel_Writer_Excel2007->save('test.xlsx') #3 {main} thrown in C:\xampp\htdocs\Well\Classes\PHPExcel\Writer\Excel2007\ContentTypes.php on line 242. 

这是我的代码得出:

`$objDrawing = new PHPExcel_Worksheet_Drawing(); 
$objDrawing->setName('image'); 
$objDrawing->setDescription('nnnnn'); 
$objDrawing->setPath('images/well.bmp'); 
$objDrawing->setCoordinates('I'.$s); 
$objDrawing->setWorksheet($objPHPExcel->getActiveSheet());` 

我搜索很多,我看到关于它的一些职位。但没有人回答。

编辑: 我的代码:

require_once 'Classes/PHPExcel.php'; 
require_once 'Classes/PHPExcel/IOFactory.php'; 
$name='statistics.xlsx'; 
if(file_exists($name)) 
{ 
$objPHPExcel = PHPExcel_IOFactory::load($name); 
$lastRow = $objPHPExcel->getActiveSheet()->getHighestRow(); 
$j=$lastRow+10; 
} 
else 
{ 
$j=1; 
$objPHPExcel = new PHPExcel(); 
} 
$i='A'; 

$objPHPExcel->setActiveSheetIndex(0); 

// I am not writing the entire data 

$objPHPExcel->getActiveSheet()->setCellValue($i++.$j, 'name'); 

$objDrawing = new PHPExcel_Worksheet_Drawing(); 
$objDrawing->setName('image'); 
$objDrawing->setDescription('image'); 
$objDrawing->setPath('image.png'); 
$objDrawing->setCoordinates('E'.$s); 
$objDrawing->setWorksheet($objPHPExcel->getActiveSheet()); 

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 
$objWriter->save($name); 
+0

您能否将详细说明如何复制此错误发布您的整个代码? –

+0

@Grzegorz ...感谢您的回复。我已经包含了整个代码。请检查一下。第一次储存时没问题。但是当我第二次尝试时,它显示错误并删除保存的文件。请考虑一下。 – user3673501

回答

8

我认为这是PHPExcel在Classes\PHPExcel\Writer\Excel2007.php的错误。它很容易修复。

简短的回答是:注释掉或删除第235-237行。这将是这个代码:

 if (file_exists($pFilename)) { 
      unlink($pFilename); 
     } 

你的代码将工作。我查过了,现在对我有效。

现在,稍后再解释一下。上线235-243有这样的代码:现在

 if (file_exists($pFilename)) { 
      unlink($pFilename); 
     } 
     // Try opening the ZIP file 
     if ($objZip->open($pFilename, $zipOverWrite) !== true) { 
      if ($objZip->open($pFilename, $zipCreate) !== true) { 
       throw new PHPExcel_Writer_Exception("Could not open " . $pFilename . " for writing."); 
      } 
     } 

,在这段代码中,三件事情发生的顺序:

  1. 如果我们将数据保存到已存在的文件,那么该文件被删除(unlink
  2. 如果我们将数据保存到现有的文件,覆盖该文件
  3. 如果我们将数据保存到不存在的文件,创建

如您所见,步骤2中的操作从未执行,因为在步骤1中文件为总是删除。在这个过程中,所有以前存在的文件附件都会丢失。这就是为什么后来你得到错误File XXX does not exist - 的确,你的早期图像文件不存在于新创建的文件中。

这个问题的明显的解决办法是删除第1步。如果文件存在,它应该被覆盖。我没有看到第1步的任何合理解释。也许它是一些旧代码的遗留问题。