2014-05-25 128 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步的任何合理解釋。也許它是一些舊代碼的遺留問題。