2016-06-17 79 views
0

我需要打开一个现有的xlsx文件,其中包含文本框(使用预定义选项(如圆圈,正方形等)创建的文件),并且需要在这些对象后面写入(它们是透明的)。PHPExcel丢失文本框

下面的代码可以做到一切正常,除非下载没有框的新文件。

if(file_exists("app/file.xlsx")){ 

     $objTpl = PHPExcel_IOFactory::load("app/file.xlsx"); 
     $objTpl->setActiveSheetIndex(1); 

     $objTpl->getActiveSheet()->setCellValue('A1', 'x'); 
     $objTpl->getActiveSheet()->setCellValue('A2', 'y'); 
     $objTpl->getActiveSheet()->setCellValue('A3', 'z'); 

     $filename = 'new_file.xlsx'; 
     header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); 
     header('Content-Disposition: attachment;filename="'.$filename.'"'); 
     header('Cache-Control: max-age=0'); 

     $objWriter = PHPExcel_IOFactory::createWriter($objTpl, 'Excel2007'); 
     ob_end_clean(); 
     $ret = $objWriter->save('php://output'); 

     exit; 
    } 
+0

然后,您需要为PHPExcel Excel2007读取器编写一些代码来解析和解释它们,用于维护它们的核心PHPExcel对象以及PHPExcel Excel2007 Writer来编写它们;因为他们不支持图书馆 –

+0

真的吗?那么..让我们尝试另一种策略。谢谢! –

+0

真的!您可能会看到COM(需要安装MS Excel的Windows服务器)或PUNO(需要安装Open/LibreOffice的服务器)或libXl –

回答

0

你或许可以通过COM DOTNET PHP模块

只需打开XLSX文件做到这一点:

$excel = new COM("Excel.Application") or die ("Could not initialise Object."); 
      $excel->Visible  = 1; 
      $excel->DisplayAlerts = 0; 
      $Workbook = $excel->Workbooks->Open($file) or die("ERROR: Unable to open " . $file . "!\r\n"); 
      $Worksheet = $Workbook->ActiveSheet; 

,并从现在起改变你的文件,然后使用另存为功能。其全部+ - 在微软的开发人员文档中详细记录: https://msdn.microsoft.com/EN-US/library/office/ff198122.aspx