Exportar Para Excel Com Imagem

Amigos,

Crie uma função básica para exportar para excel uma determinada tabela, até aí perfeito. Porém gostaria de incluir uma coluna com a imagem ao lado. Mais não consegui. Vejam com fiz:





    public function actionImpressao() {

        $total = 1;

        $tamanhofonte = "12";

        $sql = "SELECT n.nome AS Defeito, n.descricao AS Descricao, n.causas AS Causas, CONCAT(s.nome,' - ', s.unidade) AS Setor,

                (SELECT ncimg.path FROM naoconformidadesimages ncimg WHERE ncimg.naoconformidades = n.idnaoconformidades LIMIT 0,1) As Image

                FROM naoconformidades n

                JOIN setores s ON s.idsetores = n.setor

                ORDER BY Setor, Defeito ASC";


        $query = Yii::app()->db->createCommand($sql)->queryAll();


        $html = '

            <html>

            <head>

                <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

                <meta http-equiv="Content-Language" content="pt-br, pt">

                <title>SGI</title>';

        $html .= '<table align="center" border="0" cellpadding="0" cellspacing="0" width="800">                        

                            <tr>                                

                                <td colspan="6" style="text-align: center; font-size:15">                                    

                                </td>

                            </tr>

                            <tr>                                    

                                <td colspan="6" style="text-align: center; font-size:11">

                                    <samp><b>Catálogo de Não Conformidades</b></samp>

                                </td>

                            </tr>                        

           		</table>';

        $html .= '<table align="center" border rules="all" bordercolor="#E6E6FA" cellpadding="0" cellspacing="0" width="800">                

                    <tr style="height: 15pt;" height="20">                        

                        <td valign="top" bgcolor="#E6E6FA" style="text-align: center; font-size:' . $tamanhofonte . '"><samp><b>Seq</b></samp></td>

                        <td valign="top" bgcolor="#E6E6FA" style="font-size:' . $tamanhofonte . '"><samp><b>Não Conformidade</b></samp></td>

                        <td valign="top" bgcolor="#E6E6FA" style="font-size:' . $tamanhofonte . '"><samp><b>Descrição</b></samp></td>

                        <td valign="top" bgcolor="#E6E6FA" style="text-align: center; font-size:' . $tamanhofonte . '"><samp><b>Causas</b></samp></td>

                        <td valign="top" bgcolor="#E6E6FA" style="text-align: center; font-size:' . $tamanhofonte . '"><samp><b>Setor</b></samp></td>

                        <td valign="top" bgcolor="#E6E6FA" style="text-align: center; font-size:' . $tamanhofonte . '"><samp><b>Possui Fotos</b></samp></td>

                    </tr>';

        foreach ($query as $row) {            

            $html.='<tr>                        

                        <td valign="top" align=center style="font-size:' . $tamanhofonte . '"><samp>' . $total++ . '</samp></td>

                        <td valign="top" style="font-size:' . $tamanhofonte . '"><samp>' . $row['Defeito'] . '</samp></td>                

                        <td valign="top" style="font-size:' . $tamanhofonte . '"><samp>' . $row['Descricao'] . '</samp></td>    

                        <td valign="top" style="font-size:' . $tamanhofonte . '"><samp>' . $row['Causas'] . '</samp></td>

                        <td valign="top" style="font-size:' . $tamanhofonte . '"><samp>' . $row['Setor'] . '</samp></td> 

                        <td valign="top" style="font-size:' . $tamanhofonte . '"><samp><img src="' . Yii::app()->baseUrl . '' . $row['Image'] . '" width="125" height="140" align="left"/></samp></td>

                    </tr>';

        }

        $html .= '</table>                

            </head>

            </html>';

        Yii::app()->request->sendFile('Catálogo de Não Conformidades.xls', $html);

    }



A tabela vai perfeito, porém a coluna das Imagens não aparece nada. Apena um erro dizendo que não foi possível visualizar o arquivo. O que fiz de errado?

Olá Adrian Lucas

Tente utilizar "Yii::app()->request->baseUrl" ao invés de "Yii::app()->baseUrl"

Davi infelizmente continua a mesma coisa.

Ninguém????

Entendido Adrian,

Preciso de 2 informações:

1-) Você poderia postar a url que está sendo gerada quando você utiliza o Yii::app()->request->baseUrl . row[‘Image’] ?

2-) Você executa a geração desse excel pelo terminal?

Abs

Davi a url que gera é


Site/index.php/defeitos/impressao

e estou executando sim pelo terminal.

Olá Adrian,

Essa é a razão, o comando Yii::base->request->baseUrl não funciona via terminal. Não sei ao certo onde vai rodar a sua aplicação, contudo para que a imagem seja exibida ela precisa estar em um local publico, sendo assim sugiro criar uma constante com o nome do domínio para que o caminho até a imagem seja construído corretamente, para isso você pode criar um parâmetro no arquivo main.php como mostra o exemplo abaixo:





        // application-level parameters that can be accessed

	// using Yii::app()->params['paramName']


	'params'=>array(


		// this is used in contact page

		'adminEmail'=>'webmaster@example.com',

		

		// URL PARA ACESSO A APLICAÇÃO (VOCÊ PODE SUBSTITUIR POR http://www.seudominio.com.br)

		'meuDominio'=> 'http://localhost' 


	),






Depois em seu código você pode fazer o seguinte:




html .= '<img src="'. Yii::app()->params['meuDominio'] . "/" . $row['Image'] . '" width="125" height="140" align="left"/>';



Espero que isso te ajude

Abs

Davi fiz o procedimento mais aparece o mesmo erro, a imagem não aparece. De qualquer forma obrigado pela dica…

Tem algo a mais que posso fazer????

Olá Adrian,

Não vamos desisitir! Por favor publique como ficou agora o endereço da imagem em seu arquivo.

Fico no aguardo

Abs

OOOPPPPSSSS… Funcionou Davi… Agora só tem um probleminha? Como faço pra que a imagem fique exatamente do tamanho da Célula????

Olá Adrian

Qua bom que funcionou! Agora está fácil:

Na tag "img" onde você publica a imagem, informe altura (width) e altura (height) conforme o tamanho em pixels da célula.

Abs

1 Like

PERFEITO!!! Davi… Funcionou como uma luva, muito obrigado pela ajuda. Fica a dica quem necessitar exportar para o excel com simplicidade "agora"…