Abrindo documentos do Word com PHP

Já teve vontade de abrir seus documentos do Word no PHP? Eu não tive, mas, há uns meses fui obrigado a fazê-lo e acabei aprendendo.

Veja como é simples. Basta usar a tecnologia COM que permite interagir com os softwares da Microsoft (vale lembrar que isso só funciona no Windows):

[code lang=”php”]
//Pra começar, instanciamos o objeto COM passando ‘word.application’ como parametro para ‘abrir o word’
$word = new COM("word.application") or die ("Erro!!");

//Em seguida, atribuímos à variável $file, o nome do documento que será aberto
$file = "arquivo.doc";

//Aqui, abrimos o documento em questão
$word->Documents->Open(realpath($file));

// Agora, extraímos seu conteúdo para a variável $content
//convertento o mesmo para string
$content = (string) $word->ActiveDocument->Content;

//Convertemos as quebras de linha para html
$txt = nl2br($content);

//Pra visualizar o conteúdo, basta imprimir a variável
echo $txt;

//Agora, fechamos o documento…
$word->ActiveDocument->Close(false);
//"Saímos do word" (ou quase, hahahaha)
$word->Quit();
//Os passos seguintes, são recomendados pra
//evitar vazamento de memória
$word = null;
unset($word);
[/code]

Tudo resolvido, vocês podem fazer o que quiserem com o documento. No meu caso, eu importei ele pro MySQL.

Os testes foram feitos localmente. Qualquer problema, entrem em contato ou consultem a documentação do PHP.

Num próximo post, eu falo sobre como criar documentos do Word usando PHP.


14 Comentários

Bruno Luiz
1

Você não deixou claro uma coisa: a tecnologia COM precisa estar presente do lado do cliente ou do lado do servidor? Se for do servidor seria meio chato, afinal, só poderiamos usar em servidores Windows (que normalmente são usados para ASP e não PHP) ou quando a pessoa monta um servidor no seu PC com Windows para fazer testes de PHP, WordPress e outros.

Lucas Arruda
2

Bruno, se você entende um mínimo de PHP, sabe muito bem a resposta para a sua pergunta e não precisaria estar perguntando. Pense um pouco: aonde o PHP roda??

Bruno Luiz
3

Então é como eu pensava… Server-side. Só que esse comando não deve rodar em servidores web Linux, por exemplo. Acho que na dica deveria ter algo que funcionasse em servidores web Linux ou algum JS que rodasse em client-side, assim pelo menos quem tem Windows poderia fazer uso desse recurso.

Robson Loschi
4

Prezado Bruno,
Infelizmente, essa tecnologia realmente não funciona em servidores Linux (pelo menos, não encontrei um modo de fazer funcionar).
Entretanto, acredito que você possa fazê-la funcionar no lado do cliente utilizando VB Script (pra fazer o script to artigo, eu tive que estudar sobre como criar macros no word usando VB Script). Infelizmente, eu não sei nada sobre VB Script.
Prometo me informar mais sobre o assunto quando sobrar um tempo. Se você descobrir a solução pro seu problema, compartilhe com a gente.

Bruno Luiz
5

Olá,
Obrigado pelo esclarecimento. Pelo menos confirmou o que eu pensava. Vou até dar uma olhada nesse lance de VBScript e caso eu encontre alguma coisa eu envio para você. Algum e-mail para onde eu possa enviar?
Abraços,
Bruno Luiz

Lucas Arruda
7

Infelizmente no Linux não é possível usar bibliotecas da MS, como já era de se imaginar.
No Linux a solução é usar o próprio OpenOffice. Existem soluções já prontas na Internet para isso, dêem uma pesquisada.

Bruno Luiz
8

Olá,
Como sugerido pelo Loschi, eu havia começado minhas pesquisas com VBScripts que fizessem o trabalho em client-side, mas mesmo assim eu não chegaria ao objetivo que eu queria. Eu desejava encontrar alguma maneira de fazer a visualização de documentos em qualquer sistema operacional.
Então acabei procurando um código diferente e acabei encontrando um que abre um visualizador de documentos baseado no Google Docs. Esse visualizador foi feito para funcionar somente com PDF, PPT e TIFF, mas nos meus testes ele funcionou bem com arquivos DOC e DOCX. Só é necessário inserir o seguinte trecho:
iframe src=”http://docs.google.com/gview?url=COLOCARURLDODOC&embedded=true” style=”width:800px; height:600px;” frameborder=”0″ /iframe
(Obs.:Inserir entre o iframe e o /iframe)
Onde COLOCARURLDODOC pode ser substituído por uma variável onde contenha o endereço do documento desejado.
Caso ainda queiram o VBScript, eu encontrei os seguintes links: http://www.tek-tips.com/faqs.cfm?fid=299; http://windows-programming.suite101.com/article.cfm/create_a_word_document_with_vba_and_vbscript; Porém, como não sei programar VBScript eu não cheguei a testar os códigos de ambos artigos.
Espero ter ajudado,
Bruno Luiz da Silva

Bruno Luiz
9

Olá,
Como sugerido pelo Loschi, eu havia começado minhas pesquisas com VBScripts que fizessem o trabalho em client-side, mas mesmo assim eu não chegaria ao objetivo que eu queria. Eu desejava encontrar alguma maneira de fazer a visualização de documentos em qualquer sistema operacional.
Então acabei procurando um código diferente e acabei encontrando um que abre um visualizador de documentos baseado no Google Docs. Esse visualizador foi feito para funcionar somente com PDF, PPT e TIFF, mas nos meus testes ele funcionou bem com arquivos DOC e DOCX. Só é necessário inserir o seguinte trecho:
iframe src=”http://docs.google.com/gview?url=COLOCARURLDODOC&embedded=true” style=”width:800px; height:600px;” frameborder=”0″ /iframe(Obs.:Inserir entre o iframe e o /iframe)
Onde COLOCARURLDODOC pode ser substituído por uma variável onde contenha o endereço do documento desejado.
Caso ainda queiram o VBScript, eu encontrei os seguintes links: http://www.tek-tips.com/faqs.cfm?fid=299; http://windows-programming.suite101.com/article.cfm/create_a_word_document_with_vba_and_vbscript; Porém, como não sei programar VBScript eu não cheguei a testar os códigos de ambos artigos.
Espero ter ajudado,Bruno Luiz da Silva

Robson Loschi
11

Funciona com o PHP 5 sim, eu mesmo testei no 5.2.9.
Verifique se a extensão com_dotnet está habilitada (aparentemente não está).
E lembre-se que isso só funciona rodando em servidores windows.

Deixe seu comentário

Seu endereço de e-mail não será publicado. Campos com * são obrigatórios!