2013-04-11 153 views
0

我想用application/vnd.openxmlformats- officedocument.spreadsheetml.sheet用PHP打开一个xlsx文件,因为COM在服务器上不起作用。
有人知道如何做到这一点?我可以用application/vnd.openxmlformats-officedocument.spreadsheetml.sheet打开一个xlsx文件吗?

评论部分是我想替换的部分。我这样做是为了强制excel来计算公式中的值,因为phpexcel没有得到正确的值。

如果有办法配置COM在服务器上运行,请让我知道。

这是我的代码:

$inputFileName = 'FORMATO PEDIDO.xlsx'; 
         $inputFileType = PHPExcel_IOFactory::identify($inputFileName); 

         $objPHPexcel = PHPExcel_IOFactory::load($inputFileName); 
         $objWorksheet = $objPHPexcel->setActiveSheetIndex(0); 
         $objWorksheet = $objPHPexcel->getActiveSheet(); 

         $claves = $_POST['claves']; 
         $checked = $_POST['productos']; 
         $cantidades = $_POST['pallet']; 
         $id_sucursal_seleccionada = $_POST['recibe_sucursal']; 
         $sql_query = mysql_query("SELECT * FROM sucursal WHERE Id_Sucursal = '$id_sucursal_seleccionada'"); 
         $sql_array = mysql_fetch_array($sql_query); 
         $nombre_sucursal = $sql_array['Nombre']; 
         $i=0; 
         $j=22; 
         foreach($claves as $clave_producto) 
         { 
          if($checked[$i]) 
          { 
           $cantidad = $cantidades[$i]; 
           $objWorksheet->getCell('B'.$j)->setValue($clave_producto); 
           $objWorksheet->getCell('F'.$j)->setValue($cantidad); 
           $j++; 
          } 
          $i++; 
         } 
         $objWriter = PHPExcel_IOFactory::createWriter($objPHPexcel,$inputFileType); 
         $objWriter->setPreCalculateFormulas(false); 
         $objWriter->save($inputFileName); 

         $workbook = "C:/Documents and Settings/sosam1/My Documents/Dropbox/htdocs/Merdiz/inventarios/FORMATO PEDIDO.xlsx"; 
         $ex = new COM("Excel.application") or Die ("Did not connect"); 
         $wkb = $ex->application->Workbooks->Open($workbook) or Die ("Did not open"); 
         $ex->Application->ActiveWorkbook->Save(); 
         $ex->application->ActiveWorkbook->Close("False");  

         $objPHPexcel = PHPExcel_IOFactory::load($inputFileName); 
         $objWorksheet = $objPHPexcel->setActiveSheetIndex(0); 
         $objWorksheet = $objPHPexcel->getActiveSheet(); 
+0

什么是与PHPExcel做计算(你可以禁用的问题,因为你做)...你需要从PHP Excel中没有提供的MS Excel本身? PHPExcel生成的值不正确?您引用了“注释部分”;但我在代码中看不到任何评论;为什么你将PHPExcel和COM结合起来?请解释你的问题! – 2013-04-12 06:29:34

回答

0

你有没有尝试过的代码,像你描述的一个非交互式的场景,不支持从 - http://phpexcel.codeplex.com/

+0

是的,我正在使用这个。正如你在代码中看到的那样,我用它来打开,编辑和保存,但是这并没有使办公室运行计算,因为phpexcel进行计算而不是让ms office为它工作 – user2268756 2013-04-11 05:05:57

1

Excel中。

存在无数的技术原因,为什么它有问题。基本上,Excel的设计,编程和测试都假设键盘末端会有人。在服务器上运行它可能会运行50次,然后在没有警告的情况下冻结或崩溃。我见过它发生。

还有一个合同/许可问题。即使您的工作足够满足您的需要,Office的许可证基本上也要求网站的每个用户都必须拥有与您在服务器上运行的相同版本的Excel的有效许可证。这就使得在Internet上可用的站点上无法使用Excel,但如果您的站点是Intranet站点并且用户获得正确许可,则可以摆动它。

您也可以使用Excel Services,它是服务器端支持的Excel的子集。这是SharePoint的某些版本和版本中可用的功能。显然,只有拥有预算,或者您已经拥有SharePoint,这才是可行的。

请参见微软官方指南:

http://support.microsoft.com/kb/257757

另见这个答案:

https://stackoverflow.com/a/726450/2230

相关问题