none
Problema para popular word via C# RRS feed

  • Pergunta

  • Amigos Boa Tarde!

    Tenho um sistema web onde necessito gerar OS dos pedidos para ser impressa, o jeito mais fácil aparentemente que eu achei foi criar um template do word e dar replace nele.

    Bom os dados do pedido e do comprador foram fáceis até de inserir, porem eu preciso inserir os itens do pedido, não estou conseguindo fazer essa parte, vou postar aqui a img do meu template do word, bem como o código.

    Onde está em <<item>> etc, deverá ser populado com os itens do pedido.

    Porem atualmente ele me gera o seguinte erro

    Especificador de formato inválido.

    vou postar abaixo o codigo completo

      List<PedidoTO> clsPedido = new List<PedidoTO>();
                // Populo a lista com todos so pedidos não gerados ainda
                clsPedido = ClicMais.Pedido.PedidoBLL.GetPedidoAll();
                // Percorro a lista de Pedidos
                int intQuantiaArquivos = 0;
                Console.WriteLine("---- COLETANDOS OS DADOS DOS PEDIDOS PODE DEMORAR ALGUNS MINUTOS ^^ ---");
                Console.WriteLine("Total de Pedidos Para serem gerados:" + clsPedido.Count.ToString());
                clsPedido.ForEach(delegate(PedidoTO clsPedidoAUX)
                {
                    Object oMissing = System.Reflection.Missing.Value;
                    Object oTemplatePath = ConfigurationManager.AppSettings["CAMINHO_FISICO_TEMPLATE"] + "Pedido.dotx";
                    Application wordApp = new Application();
                    Document wordDoc = new Document();
                    wordDoc = wordApp.Documents.Add(ref oTemplatePath, ref oMissing, ref oMissing, ref oMissing);
                    // Exibo uma mensagem no console
    
    
                    // Instancio uma nova classe Cliente
                    ClienteTO clsCliente = new ClienteTO();
    
                    // Instancio uma nova classe Cliente Endereco
                    ClienteEnderecoTO clsClienteEndereco = new ClienteEnderecoTO();
    
                    // Populo a classe cliente com o ID do cliente que fez o pedido
                    clsCliente = ClienteBLL.GetClienteByID(clsPedidoAUX.IDCliente);
    
                    // Populo a classe de ClienteEndereco com o endereço de entrega
                    clsClienteEndereco = ClienteEnderecoBLL.GetClienteEnderecoByIDCliente(clsCliente.ID);
    
                    // Instancio uma nova classe de PedidoProdutos (Itens do Pedido)
                    List<PedidoProdutoTO> clsPedidoProduto = new List<PedidoProdutoTO>();
    
                    // Populo a lista com todos os itens do pedido
                    clsPedidoProduto = PedidoProdutoBLL.GetPedidoProdutoByIDPedido(clsPedidoAUX.ID);
                    StringBuilder strItens = new StringBuilder();
                    int intItens = 0;
                    // Percorro a lista com os itens do pedido
                    clsPedidoProduto.ForEach(delegate(PedidoProdutoTO clsPedidoProdutoAUX)
                    {
                        intItens += 1;
                        foreach (Field myMergeField in wordDoc.Fields)
                        {
                            Range rngFieldCode = myMergeField.Code;
                            String fieldText = rngFieldCode.Text;
                            //Apenas começando com CAMPOS mailmerge
                            if (fieldText.StartsWith(" MERGEFIELD"))
                            {
                                Int32 endMerge = fieldText.IndexOf("\\");
                                Int32 fieldNameLength = fieldText.Length - endMerge;
                                String fieldName = fieldText.Substring(11, endMerge - 11);
                                fieldName = fieldName.Trim();
                                if (fieldName == "CodigoPedido")
                                {
                                    myMergeField.Select();
                                    wordApp.Selection.TypeText(clsPedidoAUX.ID.ToString());
                                }
                                if (fieldName == "DataPedido")
                                {
                                    myMergeField.Select();
                                    wordApp.Selection.TypeText(clsPedidoAUX.DataPedido.ToString("d"));
                                }
                                if (fieldName == "DataImpressao")
                                {
                                    myMergeField.Select();
                                    wordApp.Selection.TypeText(DateTime.Now.ToString("d"));
                                }
                                if (fieldName == "NomeCliente")
                                {
                                    myMergeField.Select();
                                    wordApp.Selection.TypeText(clsCliente.Nome);
                                }
                                if (fieldName == "EnderecoCliente")
                                {
                                    myMergeField.Select();
                                    wordApp.Selection.TypeText(clsClienteEndereco.Endereco);
                                }
                                if (fieldName == "Numero")
                                {
                                    myMergeField.Select();
                                    wordApp.Selection.TypeText(clsClienteEndereco.Numero.ToString());
                                }
                                if (fieldName == "Bairro")
                                {
                                    myMergeField.Select();
                                    wordApp.Selection.TypeText(clsClienteEndereco.Bairro);
                                }
                                if (fieldName == "Cidade")
                                {
                                    myMergeField.Select();
                                    wordApp.Selection.TypeText(clsClienteEndereco.Cidade);
                                }
                                if (fieldName == "EstadoCep")
                                {
                                    myMergeField.Select();
                                    wordApp.Selection.TypeText(clsClienteEndereco.Estado + " " + clsClienteEndereco.Cep);
                                }
                                if (fieldName == "Email")
                                {
                                    myMergeField.Select();
                                    wordApp.Selection.TypeText(clsCliente.Email);
                                }
                                if (fieldName == "Fone1")
                                {
                                    myMergeField.Select();
                                    wordApp.Selection.TypeText(clsCliente.Telefone);
                                }
                                if (fieldName == "Fone2")
                                {
                                    myMergeField.Select();
                                    wordApp.Selection.TypeText(clsCliente.Celular);
                                }
                                if (fieldName == "Documento")
                                {
                                    myMergeField.Select();
                                    wordApp.Selection.TypeText(clsCliente.Cpf);
                                }
    
    
                                ProdutoTO clsProduto = ProdutoBLL.GetProdutoByID(clsPedidoProdutoAUX.IDProduto);
                                
                                if (fieldName == "Item")
                                {
                                    myMergeField.Select();
                                    strItens.Append(intItens.ToString());
                                }
                                if (fieldName == "CodigoPedidp")
                                {
                                    myMergeField.Select();
                                    strItens.Append(clsProduto.CodigoProduto);
                                }
                                if (fieldName == "QtdItens")
                                {
                                    myMergeField.Select();
                                    strItens.Append(clsPedidoProdutoAUX.Quantia.ToString());
                                }
                                if (fieldName == "Descricao")
                                {
                                    myMergeField.Select();
                                    strItens.Append(clsProduto.Produto);
                                }
                                if (fieldName == "VUnit")
                                {
                                    myMergeField.Select();
                                    strItens.Append(clsProduto.PrecoAtual.ToString("D"));
                                }
                                if (fieldName == "VTotal")
                                {
                                    myMergeField.Select();
                                    strItens.Append((clsPedidoProdutoAUX.Quantia * clsPedidoProdutoAUX.ValorUnitario).ToString("D"));
                                }
                                wordApp.Selection.TypeText(strItens.ToString());
                            }
    
                        }
                    });
                    wordDoc.SaveAs(ConfigurationManager.AppSettings["CAMINHO_FISICO_WORD"] + "Pedido_" + clsPedidoAUX.ID + ".doc");
                    intQuantiaArquivos += 1;
                    Console.WriteLine(intQuantiaArquivos.ToString() + "/" + clsPedido.Count.ToString());
                    //wordApp.Documents.Open(ConfigurationManager.AppSettings["CAMINHO_FISICO_WORD"] + "Pedido_" + clsPedidoAUX.ID + ".doc");
                    wordApp.Application.Quit();
    
                });
    
                Console.WriteLine("Todos os pedidos pendentes foram gerados com sucesso!");
                Console.WriteLine();

    Espero que alguem possa me da uma luz.

    Obrigado!


    "Nunca deixe que os outros te subestimen, mas tambem não seja arrogante seja humilde e prove quem é

    terça-feira, 26 de março de 2013 19:38

Respostas

  • Cara,

    Segue exemplos:

    http://www.codeproject.com/Articles/15597/Using-the-ASP-NET-2-0-ReportViewer-in-Local-Mode

    http://stackoverflow.com/questions/12847671/report-viewer-control-web-shows-blank-report

    http://www.macoratti.net/08/03/vbn5_rpv.htm


    Atenciosamente, Samuel dos Anjos

    terça-feira, 26 de março de 2013 23:29

Todas as Respostas

  • Cara,

    Porquê você não usa uma ferramenta para gerar relatório como por exemplo o ReportViewer?


    Atenciosamente, Samuel dos Anjos

    terça-feira, 26 de março de 2013 19:44
  • Preciso gerar muitos pedidos e to fazendo pelo console para colocar no agendamento do windows.

    Mais se fosse com o Report eu conseguiria gerar esses relatorios e salvar em um local fisico?


    "Nunca deixe que os outros te subestimen, mas tambem não seja arrogante seja humilde e prove quem é

    terça-feira, 26 de março de 2013 20:00
  • Cara,

    Você teria opções para salvar em diversos formatos e opções para impressão, sem ter que configurar nada disso.


    Atenciosamente, Samuel dos Anjos

    terça-feira, 26 de março de 2013 21:41
  • Você teria algum exemplo ou site q contenha?

    VLW


    "Nunca deixe que os outros te subestimen, mas tambem não seja arrogante seja humilde e prove quem é

    terça-feira, 26 de março de 2013 22:44
  • Cara,

    Segue exemplos:

    http://www.codeproject.com/Articles/15597/Using-the-ASP-NET-2-0-ReportViewer-in-Local-Mode

    http://stackoverflow.com/questions/12847671/report-viewer-control-web-shows-blank-report

    http://www.macoratti.net/08/03/vbn5_rpv.htm


    Atenciosamente, Samuel dos Anjos

    terça-feira, 26 de março de 2013 23:29