Pergunta

Eu estou usando uma aplicação PHP baseado na web simples que outputs uma tabela como uma folha de cálculo

header("Content-Disposition: attachment; filename=" . $filename . ".xls");
header("Content-Type: application/vnd.ms-excel");

//inserts tab delimited text

Mas eu estou achando a planilha transferida abre como um arquivo somente leitura e deve ser salvo localmente e (no Excel no Windows) o tipo alterado para XLS (de HTML). Existe uma maneira de definir o atributo de filetype corretamente para que fazer um simples save não necessita corrigir o filetype?

O arquivo baixado somente leitura, por natureza, de segurança ou não é este normal?

Além disso, eu não gosto das fronteiras automáticas criadas ao abrir a planilha no Excel ou OpenOffice (em Linux). Eu preferiria não ter nenhuma formatação fronteira. Existe uma maneira no arquivo sem especificar acrescentou formatação ou isso é construído para essas aplicações?

Foi útil?

Solução

Eu não sei qual versão do Excel que você está falando, então eu vou supor que você está usando uma versão 2007 ou mais recente.
O problema da mudança extensão provavelmente depende de um recurso do Office chamado " Extensão Endurecimento "; tanto quanto eu sei, a única solução é gerar um arquivo Excel real (por exemplo, usando o PHPExcel conjunto de classes), e não um arquivo HTML.
Os arquivos baixados são somente leitura por razões de segurança, uma vez que eles estão sendo abertas no chamado " Modo de exibição protegido ":

Os arquivos da Internet e de outras localidades potencialmente inseguros podem conter vírus, worms ou outros tipos de malware, que pode prejudicar seu computador. Para ajudar a proteger seu computador, arquivos dessas potencialmente locais não seguros são abertos no Modo de Exibição Protegido. usando Modo de Exibição Protegido, você pode ler um arquivo e inspecionar seu conteúdo enquanto reduzindo os riscos que podem ocorrer.

Finalmente, uma palavra sobre fronteiras e formatação: com a versão antiga do Excel 2000, você pode formatar a saída simplesmente adicionando algumas tags XML na seção cabeçalho do código HTML; ver o " Microsoft Office HTML e XML Referência " para mais detalhes e exemplos, mas tenha em mente que é bastante obsoleto, então eu não acho que esta técnica ainda funciona com as versões mais recentes do Excel.
Se você quiser ter mais controle sobre o gerado ouput, você não deve usar HTML simples para criar o arquivo de planilha.
Em este post você também pode encontrar algumas alternativas para PHPExcel para escrever arquivos do Excel.

Outras dicas

AFAIK, pelo menos no Windows, isso depende do que o usuário faz com o prompt mostrado pelo navegador quando seguir o link.

Se os escolhe usuário salvar o arquivo, ele não será somente leitura. Se os escolhe usuário para abri-lo, o arquivo será salvo em um diretório temporário e o navegador pode removê-lo quando ele é fechado. Não estou certo de como este mecanismo funciona, mas eu estou supondo que há um bloqueio envolvido algum lugar que torna o arquivo somente leitura.

Se você quiser salvar localmente, você pode definir o content-description atributo:

header('Content-Description: File Transfer');   
header('Content-Type: application/vnd.ms-excel');
header("Content-Disposition: attachment; filename=" . $filename . ".xls");    

Editar

Se você imprimir a guia delimitado texto e atributo content-dispositionlike xls ou csv, aplicativo Excel (ou outro programa, como o gnumeric ou o OpenOffice) reconhece-lo como xls ou csv.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top