dqpd4268 2015-10-09 11:41
浏览 161
已采纳

PHPExcel行数问题

I have the next php code:

$arraylicitaciones=json_decode($_POST['ids']);
$x=0;
$arraydatos=array();
while($x<count($arraylicitaciones))
{
    $id=$arraylicitaciones[$x];
    $tipo=$arraylicitaciones[$x+1];
    if($tipo=='X' || $tipo=='A')
    {
        $sql="SELECT
        T1.id AS COLUMNA_A,
        T1.Expediente AS COLUMNA_B,
        T1.Organo_Contratante AS COLUMNA_C,
        T1.tipo AS COLUMNA_D,
        T1.F_Publicacion AS COLUMNA_E,
        T1.F_Vencimiento AS COLUMNA_F,
        T2.Estado AS COLUMNA_G,
        T3.Total_Licitacion_Lote_sVat AS COLUMNA_H,
        T3.Importe_Total_Lote_sVat AS COLUMNA_I,
        T3.Nro_Orden AS COLUMNA_J,
        T3.Nombre_Lote AS COLUMNA_K,
        T3.Cotizable AS COLUMNA_L,
        T4.Referencia_Organo AS COLUMNA_M,
        T4.Denominacion_Organo AS COLUMNA_N,
        T4.Unidades_Total AS COLUMNA_O,
        T4.Precio_Licitacion_sVat AS COLUMNA_P,
        T4.Nombre_Comercial AS COLUMNA_Q,
        T4.Forma_Presentacion AS COLUMNA_R,
        T4.Referencia_Proveedor AS COLUMNA_S,
        T4.Precio_sVat_Unidad_Oferta AS COLUMNA_T,
        T4.Codigo_Nacional_Med AS COLUMNA_U,
        T4.Porcentaje_Vat AS COLUMNA_V,
        T4.adjudicado_competencia AS COLUMNA_W
        FROM tesera_expedientes AS T1,tesera_estados_expediente AS T2,tesera_lotes_productos_expedientes AS T3,tesera_productos_expediente AS T4
        WHERE T1.id=T3.IdExpediente
        AND T3.Id=T4.IdLoteProductos
        AND T2.Id=T1.Estado_Expediente
        AND T1.id=".$id;
    }
    if($tipo=='D')
    {
        $sql="SELECT
        CONCAT(T1.id_expediente,'.',T1.id) AS COLUMNA_A,
        T1.derivado AS COLUMNA_B,
        T1.nombre_cliente AS COLUMNA_C,
        'Derivado' AS COLUMNA_D,
        T1.fecha_solicitud AS COLUMNA_E,
        T1.fecha_vencimiento AS COLUMNA_F,
        T2.Estado AS COLUMNA_G,
        T3.total_licitacion_lote_sin_iva  AS COLUMNA_H,
        T3.total_lote_sin_iva AS COLUMNA_I,
        T3.nro_lote AS COLUMNA_J,
        T3.nombre_lote AS COLUMNA_K,
        T3.cotizable AS COLUMNA_L,
        T4.referencia_organo AS COLUMNA_M,
        T4.denominacion_organo AS COLUMNA_N,
        T4.unidades_oferta AS COLUMNA_O,
        T4.oferta_am_sin_iva AS COLUMNA_P,
        T4.nombre_comercial AS COLUMNA_Q,
        T4.forma_presentacion AS COLUMNA_R,
        T4.referencia_proveedor AS COLUMNA_S,
        T4.oferta_sin_iva AS COLUMNA_T,
        T4.codigo_nacional_medicamento AS COLUMNA_U,
        T4.tipo_iva AS COLUMNA_V,
        T4.adjudicado_competencia AS COLUMNA_W
        FROM tesera_derivados AS T1,tesera_estados_expediente AS T2,tesera_lotes_derivados AS T3,tesera_productos_derivados AS T4
        WHERE T1.id=T3.id_derivado
        AND T3.id=T4.id_lote
        AND T2.Id=T1.id_estado_derivado
        AND T1.id=".$id;
    }
    $result= mysql_query($sql);
    $lineasdevueltas=mysql_num_rows($result);
    if($lineasdevueltas>0)
    {
        while($row=mysql_fetch_array($result,MYSQL_ASSOC))
        {
            //Comprobaciones y ediciones de columnas
            if($row["COLUMNA_D"]==0)
            {
                 $tipoarray='Expediente';
            }
            if($row["COLUMNA_D"]==1)
            {
                $tipoarray='Acuerdo Marco';
            }
            $fechapubadate=date_create($row['COLUMNA_E']);
            $fechavenadate=date_create($row['COLUMNA_F']);
            $fechapublicacion=date_format($fechapubadate, "d/m/Y");
            $fechavencimiento=date_format($fechavenadate, "d/m/Y");
            if($row['COLUMNA_L']==0)
            {
                $cotiza='NO';
            }
            else
            {
                $cotiza='SI';
            }
            if($row['COLUMNA_W']==0)
            {
                $adjudicado='NO';
            }
            else
            {
                $adjudicado='SI';
            }
            array_push($arraydatos, array(
                "COLUMNA_A"     => $row["COLUMNA_A"],
                "COLUMNA_B"     => $row["COLUMNA_B"],
                "COLUMNA_C"     => $row["COLUMNA_C"],
                "COLUMNA_D"     => $tipoarray,
                "COLUMNA_E"     => $fechapublicacion,
                "COLUMNA_F"     => $fechavencimiento,
                "COLUMNA_G"     => $row["COLUMNA_G"],
                "COLUMNA_H"     => $row["COLUMNA_H"],
                "COLUMNA_I"     => $row["COLUMNA_I"],
                "COLUMNA_J"     => $row["COLUMNA_J"],
                "COLUMNA_K"     => $row["COLUMNA_K"],
                "COLUMNA_L"     => $cotiza,
                "COLUMNA_M"     => $row["COLUMNA_M"],
                "COLUMNA_N"     => $row["COLUMNA_N"],
                "COLUMNA_O"     => $row["COLUMNA_O"],
                "COLUMNA_P"     => $row["COLUMNA_P"],
                "COLUMNA_Q"     => $row["COLUMNA_Q"],
                "COLUMNA_R"     => $row["COLUMNA_R"],
                "COLUMNA_S"     => $row["COLUMNA_S"],
                "COLUMNA_T"     => $row["COLUMNA_T"],
                "COLUMNA_U"     => $row["COLUMNA_U"],
                "COLUMNA_V"     => $row["COLUMNA_V"],
                "COLUMNA_W"     => $adjudicado
            ));
        }
    }
    $x=$x+2;
}


require_once '../../PHPExcel/Classes/PHPExcel/IOFactory.php';
$objReader = PHPExcel_IOFactory::createReader('Excel5');
$plantilla = '../../template_excel/LicitproductdetalletemplateBIS.xls';
$objPHPExcel = $objReader->load($plantilla);
//------GENERACION EXCEL------//
$posicion=3;
$inicio=3;
$final=1650+2;
for($i=0;$i<1650;$i++)
{
    $objeto=$arraydatos[$i];
    $objPHPExcel->getActiveSheet()
    ->setCellValue('A'.$posicion, $objeto[COLUMNA_A])
    ->setCellValue('B'.$posicion, $objeto[COLUMNA_B])
    ->setCellValue('C'.$posicion, $objeto[COLUMNA_C])
    ->setCellValue('D'.$posicion, $objeto[COLUMNA_D])
    ->setCellValue('E'.$posicion, $objeto[COLUMNA_E])
    ->setCellValue('F'.$posicion, $objeto[COLUMNA_F])
    ->setCellValue('G'.$posicion, $objeto[COLUMNA_G])
    ->setCellValue('H'.$posicion, $objeto[COLUMNA_H])
    ->setCellValue('I'.$posicion, $objeto[COLUMNA_I])
    ->setCellValue('J'.$posicion, $objeto[COLUMNA_J])
    ->setCellValue('K'.$posicion, $objeto[COLUMNA_K])
    ->setCellValue('L'.$posicion, $objeto[COLUMNA_L])
    ->setCellValue('M'.$posicion, $objeto[COLUMNA_M])
    ->setCellValue('N'.$posicion, $objeto[COLUMNA_N])
    ->setCellValue('O'.$posicion, $objeto[COLUMNA_O])
    ->setCellValue('P'.$posicion, $objeto[COLUMNA_P])
    ->setCellValue('Q'.$posicion, $objeto[COLUMNA_Q])
    ->setCellValue('R'.$posicion, $objeto[COLUMNA_R])
    ->setCellValue('S'.$posicion, $objeto[COLUMNA_S])
    ->setCellValue('T'.$posicion, $objeto[COLUMNA_T])
    ->setCellValue('U'.$posicion, $objeto[COLUMNA_U])
    ->setCellValue('V'.$posicion, $objeto[COLUMNA_V])
    ->setCellValue('W'.$posicion, $objeto[COLUMNA_W]);
//------FORMATO SI/NO FINAL------//
if($objeto[COLUMNA_W]=='SI')
{
    $objPHPExcel->getActiveSheet()->getStyle('W'.$posicion)->getFill()
    ->applyFromArray(array('type' => PHPExcel_Style_Fill::FILL_SOLID,
            'startcolor' => array('rgb' => 'FFFF00')
    ));
}
else
{
    $objPHPExcel->getActiveSheet()->getStyle('W'.$posicion)->getFill()
    ->applyFromArray(array('type' => PHPExcel_Style_Fill::FILL_SOLID,
            'startcolor' => array('rgb' => 'FFFFCC')
    ));
}
//++++++FORMATO SI/NO FINAL++++++//
$posicion=$posicion+1;
}
//++++++GENERACION EXCEL++++++//
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$file = '../../ficheros_excel/LicitProducDetalle.xls';
$objWriter->save($file);
$path_php=$_SERVER[HTTP_REFERER];
$path_xls=str_replace('js/Licitaciones.html','ficheros_excel/LicitProducDetalle.xls',$path_php);
 ?>
<script>
var control=0;
var control2=0;
ele=document.getElementsByTagName('div');
for (i=0;(i<ele.length)&&(control==0);i++){
    if((ele[i].style.width == '158px')&&(ele[i].class='x-shadow')){
        ele[i].style.display='none';
        control2=1;
    }
    if((ele[i].style.width == '150px')&&(control2==1)){
        ele[i].style.display='none';
        control=1;
    }
}
window.open('<?php echo $path_xls; ?>');
</script>

The query array generated after executing the query returns more than 5000 rows.I want to know,if someone can help,why if i only write 1640 rows with 23 columns each row,the phpexcel generates the .xls file but if I write 1650 rows with 23 columns too the server gives me an error 500(Internal Server Error)

  • 写回答

2条回答 默认 最新

  • douao2019 2015-10-09 14:51
    关注

    1.) Edit: true.. seems not to be the case with the PHP implementation .. stay with xls

    2.) PHPExcel is inefficient when it comes to memory usage. The standard PHP limit is only 100mb of memory - either try increasing the memory and see if it's good enough for you, or move on to other libraries.

    consider https://github.com/mk-j/PHP_XLSXWriter for lower memory usage It's incredibly fast and uses little memory - but has no styling support.

    Another option is https://github.com/SystemDevil/PHP_XLSXWriter_plus I've never used it but in theory it can support stying and is a fork of the other project, I would give it a go

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?