Pergunta

Tenho um projeto onde gostaria de gerar uma exportação de relatório no formato MS Word.O relatório incluirá imagens/gráficos, tabelas e texto.Qual é a melhor maneira de fazer isso?Ferramentas de terceiros?Quais são suas experiências?

Foi útil?

Solução

A resposta dependerá um pouco se o aplicativo está sendo executado em um servidor ou na máquina cliente.Se você estiver executando em um servidor, você vai querer usar um dos formatos de geração de escritório baseados em XML, pois há problemas conhecidos quando usando Office Automation em um servidor.

No entanto, se você estiver trabalhando na máquina cliente, poderá escolher entre usando automação de escritório ou usando o formato Office Open XML (veja os links abaixo), que é suportado pelo Microsoft Office 2000 e superior nativamente ou por meio de service packs.Uma desvantagem disso é que talvez você não consiga incorporar alguns tipos de gráficos ou imagens que deseja mostrar.

A melhor maneira de fazer as coisas dependerá muito de quanto tempo você tem para investir no desenvolvimento.Se você seguir o caminho da automação de escritório, existem alguns bons tutoriais que podem ser encontrados no Google e são bastante simples de aprender.No entanto, o formato Open Office XML é relativamente novo, então você pode achar que a curva de aprendizado é um pouco maior.

Informações do Office Open XML

Outras dicas

Biblioteca gratuita DocX para a criação de documentos DocX, desenvolvidos ativamente e muito fáceis e intuitivos de usar.Como o CodePlex está morrendo, o projeto mudou para GitHub.

Passei a última semana ou mais me atualizando XML aberto do Office.Temos um aplicativo de banco de dados que armazena os dados da pesquisa que queremos relatar no Microsoft Word.Na verdade, você pode criar arquivos do Word 2007 (docx) do zero em C#.O Open XML SDK versão 2 inclui um aplicativo interessante chamado Document Reflector que fornecerá o código C# para recriar completamente um documento do Word.Você pode usar partes ou todo o código e substituir os bits que deseja alterar imediatamente.O arquivo de ajuda incluído no SDK também contém alguns bons exemplos de código.

Não há necessidade do Office Interop ou de qualquer outro software Office no servidor - os novos formatos são 100% XML.

Você já pensou em usar .RTF como alternativa?

Ele suporta a incorporação de imagens e tabelas, bem como texto, abre por padrão usando o Microsoft Word e, embora seu conjunto de recursos seja mais limitado (conte qualquer formatação avançada) para algo que parece e abre como um documento do Word, não está longe.

Seus usuários finais provavelmente não perceberão.

eu encontrei Aspor palavras ser o melhor, pois nem todos podem abrir arquivos no formato Office Open XML/*.docx e a interoperabilidade e automação do Word podem apresentar erros.Aspose Words suporta a maioria dos tipos de arquivos de documentos do Word 97 em diante.

É um componente pago, mas tem um ótimo suporte.A outra alternativa já sugerida é o RTF.

Para gerar documentos Word com Office Automation dentro de .NET, especificamente em C# ou VB.NET:

  1. Adicione o Microsoft.Office.Interop.Word referência de montagem para o seu projeto.O caminho é \Visual Studio Tools para Office\PIA\Office11\Microsoft.Office.Interop.Word.dll.

  2. Siga o exemplo do Código da Microsoft que você pode encontrar aqui: http://support.microsoft.com/kb/316384/en-us.

Schmidty, se você deseja gerar documentos Word em um servidor web você precisará de uma licença para cada cliente (não apenas o servidor web).Veja esta seção na primeira link Rob postou:

“Além dos problemas técnicos, você também deve considerar questões de licenciamento.As diretrizes de licenciamento atuais impedem que aplicativos do Office sejam usados ​​em um servidor para atender solicitações de clientes, a menos que esses próprios clientes tenham cópias licenciadas do Office.O uso da automação do lado do servidor para fornecer funcionalidade do Office a estações de trabalho não licenciadas não é coberto pelo Contrato de Licença de Usuário Final (EULA)."

Se você atender aos requisitos de licenciamento, acho que precisará usar o COM Interop - para ser mais específico, o Assemblies de interoperabilidade primária do Office XP.

Confira VSTO (Ferramentas do Visual Studio para Office).É bastante simples criar um modelo do Word, injetar uma ilha de dados XML nele e enviá-lo ao cliente.Quando o usuário abre o documento no Word, o Word lê o xml e o transforma em WordML e o renderiza.Você vai querer dar uma olhada na classe ServerDocument da biblioteca VSTO.Nenhum licenciamento extra é necessário pela minha experiência.

Tive bom sucesso usando o Syncfusion Backoffice DocIO, que suporta formatos doc e docx.

Nas versões anteriores ele não suportava tudo no Word, mas de acordo com sua lista, testamos com tabelas e texto como uma abordagem de mala direta e funcionou bem.

Não tenho certeza sobre a importação de imagens.Na página de sinopse deles http://www.syncfusion.com/products/DocIO/Backoffice/features/default.aspx diz

O BlockQuote essencial Docio tem suporte para inserir imagens escalares e vetoriais no documento, em quase todos os formatos.Bitmap, gif, png e tiff são alguns dos tipos de imagem comuns suportados.

Portanto, vale a pena considerar.

Como outros mencionaram, você pode criar um documento RTF, existem algumas boas bibliotecas RTF para .net, como http://www.codeproject.com/KB/string/nrtftree.aspx

Enfrentei esse problema e criei uma pequena biblioteca para isso.Foi utilizado em vários projetos e então resolvi publicá-lo.É gratuito e muito simples, mas tenho certeza que o ajudará na tarefa.Invoque a biblioteca Office Open XML, http://invoke.co.nz/products/docx.aspx.

Eu escrevi um série de postagens de blog sobre geração de documentos Open XML WordprocessingML.Minha abordagem é criar um documento modelo que contenha controles de conteúdo e, em cada controle de conteúdo, escrever uma expressão XPath que defina como recuperar o conteúdo de um documento XML que contém os dados que orientam o processo de geração do documento.O código é gratuito e está licenciado sob a Licença recíproca da Microsoft (Ms-RL).Na mesma série de postagens do blog, também exploro uma abordagem em que você escreve código C# em controles de conteúdo.O processo de geração de documento processa então o documento modelo e gera um programa C# que gera os documentos desejados.Uma vantagem dessa abordagem é que você pode usar qualquer fonte de dados como fonte de dados para o processo de geração de documentos.Esse código também está licenciado sob a Licença Recíproca da Microsoft.

Atualmente faço exatamente isso.

Se o documento não for muito grande, não contém imagens e tal, então eu o armazeno como um RTF com #MergeFields# e simplesmente os substituo pelo conteúdo, enviando o resultado ao usuário como um RTF.

Para documentos maiores, incluindo imagens e imagens inseridas dinamicamente, salvo o documento inicial do Word como um arquivo *.mht de página da Web única contendo #MergeFields# novamente.Eu então faço o mesmo que acima.Usando isso, posso renderizar facilmente um DataTable com algumas tags básicas de tabela HTML e substituir um dos #MergeFields# por uma tabela inteira.

As imagens podem ser armazenadas em seu servidor e o URL incorporado ao documento também.

Curiosamente, os novos formatos de arquivo do Office 2007 são, na verdade, arquivos zip - se você renomear a extensão para .zip, poderá abri-los e ver seu conteúdo.Isso significa que você deve ser capaz de inserir e retirar conteúdo, como imagens, usando uma biblioteca zip C# simples.

@Dale Ragan:Isso funcionará para o formato XML do Office 2003, mas não é portátil (como seriam, digamos, os arquivos .doc ou .docx).

Para lê-los/gravá-los, você precisará usar o controle ActiveX da Biblioteca de Objetos do Word:

http://www.codeproject.com/KB/aspnet/wordapplication.aspx

@Danny Smurf:Na verdade, este artigo descreve o que se tornará o formato Office Open XML com o qual Rob respondeu.Prestarei mais atenção aos links que postarei de agora em diante para ter certeza de que não estão obsoletos.Na verdade, fiz uma pesquisa sobre WordML, que era como se chamava na época.

Acredito que o formato Office Open XML é o melhor caminho a percorrer.

LibreOffice também oferece suporte à interação sem cabeça via API.Infelizmente, ainda não há muitas informações sobre esse recurso.:(

Você também pode usar o gerador de documentos do Word.Ele pode ser usado para implantação no lado do cliente ou no servidor.Da descrição do projeto:

WordDocumentGenerator é um utilitário para gerar documentos do Word a partir de modelos usando o Visual Studio 2010 e o Open XML 2.0 SDK.O WordDocumentGenerator ajuda a gerar documentos do Word, tanto que não resfriam e são de atualização com base em modelos predefinidos usando alterações mínimas de código.Os controles de conteúdo são usados ​​como espaço reservado para geração de documentos.Suporta Word 2007 e Word 2010.

Pegue isso: http://worddocgenerator.codeplex.com/

Baixar SDK: http://www.microsoft.com/en-us/download/details.aspx?id=5124

Outra alternativa é Barlavento Docgen (isenção de responsabilidade - eu sou o fundador).Com o Windward você cria o modelo no Word, incluindo imagens, tabelas, gráficos, medidores e tudo o mais que desejar.Você pode definir tags onde os dados de uma fonte de dados XML ou SQL são inseridos (incluindo funcionalidades como loops forEach, importação, etc.).E então gere o relatório para DOCX, PDF, HTML, etc.

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