Como posso ler arquivos do MS Office em um servidor sem instalar o MS Office e sem utilizar a biblioteca Interop?

StackOverflow https://stackoverflow.com/questions/153079

Pergunta

A biblioteca de interoperabilidade é lento e precisa de MS Office instalado. Muitas vezes você não quer instalar o MS Office em servidores.

Eu gostaria de usar Apache POI , mas eu estou em .NET.

Eu preciso apenas para extrair a parte de texto dos arquivos, não criar nem "armazenamento de informações" em arquivos do Office.

Eu preciso te dizer que eu tenho uma grande biblioteca de documentos, e eu não posso convertê-lo em arquivos XML mais recentes.

Eu não quero escrever um analisador para os arquivos binários. A biblioteca como Apache POI faz isso para nós. Infelizmente, é apenas para a plataforma Java. Talvez eu devesse considere escrever esta aplicação em Java.

Eu ainda não estou encontrando uma alternativa de fonte aberta para POI no .NET, eu acho que vou escrever a minha própria aplicação em Java.

Foi útil?

Solução

Para todas as versões do MS Office:

Para o novo Office (2007):

Para o antigo escritório (antes de 2007):

Outras dicas

Confira os componentes Aspose . Eles são projetados para imitar a funcionalidade de interoperabilidade sem a necessidade de instalar um escritório completo em um servidor.

Como os novos formatos docx são inerentemente arquivos XML baseado, você pode criar e manipulá-los programaticamente com técnicas DOM XML padrão, uma vez que você conhece a estrutura.

Os arquivos são basicamente arquivos zip com uma extensão de arquivo alternativo. Use o namespace System.IO.Packaging para obter acesso aos elementos internos do arquivo, em seguida, abri-los em um XmlDocument para executar a manipulação.

Há exemplos disponíveis para fazer isso, e o projeto Office Open XML no SourceForge pode valer a pena olhar para a inspiração.

Quanto aos formatos binários mais antigos, estes eram de propriedade da MS, ea única maneira é provável que você chegar ao conteúdo de dentro é através do modelo de escritório objeto (requer instalação de um escritório), ou um conversor de arquivos de terceiros / parser.

Infelizmente não há nada primeiro partido e nativo para a plataforma .NET para trabalhar com esses arquivos.

O que você precisa fazer com os arquivos? Se você só quer transmitir-lhes para o usuário, em seguida, os fluxos de arquivo básicos estão bem. Se você quiser criar novos arquivos (talvez com base em um modelo) para enviar ao usuário que o usuário pode abrir no Office, há uma variedade ou soluções alternativas .

Se você está mantendo realmente dados em documentos do Office para uso por seu Web site, você está fazendo errado. documentos de escritório, até mesmo planilhas do Excel e bancos de dados de acesso, não são realmente uma escolha apropriada para uso com um site interativo.

Se o documento está no formato Word 2007, você pode usar a biblioteca System.IO.Packaging para interagir com ele programaticamente.

RWendi

No mundo Java, há também JExcelApi . É muito claramente escrito, do que eu era capaz de ver, muito mais limpo, em seguida, POI. Então, talvez até um porto desse código para .NET não está fora de questão, dependendo do curso que você tem bastante tempo em suas mãos.

OpenOffice.

Você pode programar contra ela e tê-lo fazer muito para você, sem gastar o dinheiro em uma licença para o servidor, ou ter a vulnerabilidade associada a ele no seu servidor.

livros do Microsoft Excel podem ser lidos usando um driver ODBC (ou é um driver OLE DB? Não me lembro) que faz com que o olhar pasta de trabalho como uma tabela de banco de dados. Mas eu não sei se esse driver está disponível sem o próprio Office Suite.

Você pode usar o OpenOffice. Ele tem uma ferramenta de conversão de linha de comando:

Conversão Howto

Em suma, você define uma macro no OpenOffice e você chama a macro com uma linha de comando argumento para OpenOffice. Nesse argumento o nome do arquivo local (o arquivo do Office) é codificado.

Não é um grande sollution, mas deve ser viável.

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