Jump to content

pequeno erro ao criar excel


fil79
 Share

Recommended Posts

Boas

Estou a usar o seguinte script PHP para criar um ficheiro excel a partir de uma listagem que vem da base de dados:


$file_type = "ms-excel";
$file_ending = "xls";

//header
header("Content-Type: application/$file_type");
header("Content-Disposition: attachment; filename=clientes.$file_ending");
header("Pragma: no-cache");
header("Expires: 0");

/*    Início da formatação    */

//definir separador
$sep = "\t"; //caracter de tab
$campos = array(1=>'Número',2=>'Nome',3=>'Nascimento',4=>'Admissão');
$n_campos = count($campos);
for ($i = 1; $i < $n_campos+1; $i++) {
    echo $campos[$i] . "\t";
}
print("\n");

while ($row = mysql_fetch_assoc($result)){
    echo $row['cliente_id'].$sep.$row['nome'].$sep.$row['nascimento'].$sep.$row['data_admi']."\n";

}

Cria e descarrega o ficheiro mas ao abrir aparece a seguinte mensagem:

http://img411.imageshack.us/img411/2648/excelg.jpg

, se escolher sim o ficheiro abre normalmente mas queria evitar esta mensagem. É possivel? Desde já agradeço

MCITP-MCTS-MCP

Link to comment
Share on other sites

... se escolher sim o ficheiro abre normalmente mas queria evitar esta mensagem. É possivel?

Não. O erro não é um erro, é a constatação de um facto. Os ficheiros XLS são binários, e o que estás a passar é texto. O Excel é tolerante e abre à mesma, mas abre-o como ficheiro de texto importado, e não como XLS.

Tal como disse o yoda, há várias (e boas) classes PHP para ficheiros XLS e XLSX.

"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Link to comment
Share on other sites

(added before:)Tu dizes q vais abrir um ficheiro binário xls mas afinal queres abrir um txt... Lê isto:

Se queres fazer assim faz um ficheiro txt em q cda célula é separada por um tab e cda linha por uma linha. (n gosto mas funciona).

N gosto pq é preciso confirmar q é o excel q eu quero usar!

Alternativamente podes fazer um CSV. Fácil de fazer e auto detectável pelo excel.

Para isso em vez de usares um \t para separar entre células usas um ";".

Ou então, se preferires usas o prn (separado por espaços) tb podes usar mas é bem mais limitado q o CSV.

No entanto: Até podes fazer um número ilimitado de folhas com o formato q quiseres sem limitações de capacidade nem de funcionalidade e tudo isto escrito em plain text, ou seja, n é preciso criar um ficheiro binário para ter um ficheiro excel funcional.

Para isso cria-se um ficheiro XML com o estilo Excel. Dá algum trabalho embora parte da papa pode ser feita pelo próprio excel (se alguém quer mais explicação sobre isto é só pedir)(BTW num dos projectos em que eu estou tem um export para excel em XML uma coisa q fiz em umas 40h (umas 10h para o xml do excel)).

Não percebo de excell, mas podes usar uma classe (como há muitas) para manipulação de ficheiros excell e provavelmente evitar esses inconvenientes.

Ao escreves isso foi testar algumas classes até q ponto isso pode ser vantajoso... Então vai um teste...

2 classes das grátis para criar um ficheiro xls para criar 5 folhas de cálculo com fórmulas simples dados variados pouco difíceis de preparar mas difíceias para o processamento e configurações um pouco avançadas (pq as classes n dão para mais) em xls.

Depois um processamento de XML ao estilo Excel feito da mm maneira (sem usar todo o seu potencial pq o XML pode fazer mais que as classes q encontrei) e preparado num único ficheiro php.

Após 10 testes usando os mm ficheiros (para suprimir a possibilidade de outro ficheiros se sobrepor ao processamento, etc...)

resultados:

usando XML demorou menos 1s e o ficheiro XML é ligeiramente mais pequeno. (Estranhamente o tamanho do output das 2 classes é um pouco diferente estou a falar em 1 ou 2 KB)

A única situação em que o XML perde por bastante é que o excel chega a ser capaz de ler o XLS em +-1s enquanto q para ler um XML demora 1,5-2s.

Por isso baseia-se na escolha.

XLS (única vantagem: + velocidade na leitura pelo excel)

ou

XLS vantajoso para o servidor, para o download e para o programador(é mais fácil plain text que binário) mas mais lento para ler e processar.

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.