PHP - Read-Only planilha filetype?
-
06-07-2019 - |
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?
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-disposition
like xls ou csv,
aplicativo Excel (ou outro programa, como o gnumeric ou o OpenOffice) reconhece-lo como xls ou csv.