0

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

评论部分是我要替换的部分。我这样做是为了强制 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();
4

2 回答 2

1

在您描述的非交互式场景中不支持 Excel。

有无数技术原因导致它出现问题。基本上,Excel 的设计、编程和测试都假设键盘末端会有一个人。在服务器上运行它可能会工作 50 次,然后在没有警告的情况下冻结或崩溃。我已经看到它发生了。

还有一个合同/许可问题。即使您使它工作得足以满足您的目的,Office 的许可证基本上也要求网站的每个用户还必须拥有与您在服务器上运行的相同版本的 Excel 的有效许可证。这使得在 Internet 上可用的站点上使用 Excel 变得不可能,尽管如果您的站点是 Intranet 站点并且用户获得了适当的许可,您可以使用它。

您还可以使用 Excel Services,它是服务器端支持的 Excel 的一个子集。这是某些版本的 SharePoint 中提供的功能。显然,这只有在您有预算或者您已经拥有 SharePoint 的情况下才可行。

请参阅 Microsoft 官方指南:

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

另请参阅此答案:

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

于 2013-04-11T12:48:05.850 回答
0

您是否尝试过来自 http://phpexcel.codeplex.com/的代码

于 2013-04-11T04:43:33.510 回答