Carcleo 4 Denunciar post Postado Janeiro 24, 2009 Ola péssoal. beleza! Estou fazendo a exportação do relatório gerado pelo PrintDocument através do PrintPreviewDialog e a geração do documento word esta sendo feita com sucesso. O problema esta sendo na ordenação dos campos no word. Tipo, ]a tabela que dweveria aparecer na parte de cima do documento esta aparecendo em baixo. A ordem só esta invertida.l Outra coisa é que a primeira coluna da primeira tabnela (criei 3) esta recebenmdo os valoires da terceira tabela toda que tem 2 linhas e 03 colunas.; Como corrige isso? Veja o código abaixo das figuras. Veja as friguras: Como deveria estar: Como esta: Código: Public Sub CriaTabela(ByVal Linhas As Integer, ByVal Colunas As Integer, Optional ByVal Bordas As Boolean = True) Tabela = word.ActiveDocument.Tables.Add(word.Selection.Range, Linhas, Colunas, 0, 0) With Tabela 'If .Style <> "Tabela com grade" Then ' .Style = "Tabela com grade" 'End If .ApplyStyleHeadingRows = True .ApplyStyleLastRow = False .ApplyStyleFirstColumn = True .ApplyStyleLastColumn = False .ApplyStyleRowBands = True .ApplyStyleColumnBands = False If Not Bordas Then .Selection.MoveRight(1, Colunas, 1) .Selection.MoveDown(5, Linhas - 1, 1) .Selection.Borders(-1).LineStyle = 0 .Selection.Borders(-2).LineStyle = 0 .Selection.Borders(-3).LineStyle = 0 .Selection.Borders(-4).LineStyle = 0 .Selection.Borders(-5).LineStyle = 0 .Selection.Borders(-6).LineStyle = 0 .Selection.Borders(-7).LineStyle = 0 .Selection.Borders(-8).LineStyle = 0 End If End With End Sub Dim ContaLinha As Integer = 2 Dim totalLinhastotal As Integer Private Sub PreencheWord() word = CreateObject("Word.Application") word.Documents.Add() word.Visible = True With word Dim strConnString As String = "server=localhost;userid=root;password=;database=Pedidos" conexao = New MySqlConnection(strConnString) conexao.Open() If TBCliente.Text <> "" Then PrintStringdetalhespedidoscounttotal = "select Count(*) from detalhespedidos d inner join pedidos p, clientes c on p.pedidoID = p.pedidoID and c.codigo = p.clienteID where p.ativo= 'S' and c.nome like '" & TBCliente.Text & "%'" PrintStringdetalhespedidoscount = "select COUNT(*) from pedidos p inner join clientes c on p.clienteID = c.codigo where p.ativo= 'S' and c.nome like '" & TBCliente.Text & "%'" PrintStringdetalhespedidos = "select pedidoID, p.data, p.clienteID, c.nome as nome, c.codigo as codigocli, p.ativo, entrega, cobranca, frete, PGTO, CondPgto from pedidos p inner join clientes c on p.clienteID = c.codigo where p.ativo= 'S' and c.nome like '" & TBCliente.Text & "%'" ElseIf Not IsDBNull(DTPInicial.Value) Then PrintStringdetalhespedidoscounttotal = "select Count(*) from detalhespedidos d inner join pedidos p on d.pedidoID = p.pedidoID where p.ativo='S' and p.data BETWEEN " & Convert.ToString(DataInicial) & " and " & Convert.ToString(DataFinal) & " order by p.data" PrintStringdetalhespedidoscount = "select Count(*) from pedidos where ativo= 'S' and data BETWEEN " & Convert.ToString(DataInicial) & " and " & Convert.ToString(DataFinal) & " order by data" PrintStringdetalhespedidos = "select pedidoID, p.data,p.clienteID, c.nome as nome, c.codigo as codigocli, p.ativo,entrega, cobranca, frete, PGTO, CondPgto from pedidos p inner join clientes c on p.clienteID = c.codigo where p.ativo= 'S' and p.data BETWEEN " & Convert.ToString(DataInicial) & " and " & Convert.ToString(DataFinal) & " order by p.data" End If 'pegando o numero total de linhas Dim cmdcounttotal As New MySqlCommand(PrintStringdetalhespedidoscounttotal, conexao) Dim cmdcount As New MySqlCommand(PrintStringdetalhespedidoscount, conexao) totalLinhas = CInt(cmdcount.ExecuteScalar()) totalLinhastotal = CInt(cmdcounttotal.ExecuteScalar()) Dim Inicial As Date = Format(DTPInicial.Value, "Short Date") Dim Final As Date = Format(DTPFinal.Value, "Short Date") Dim DateInicial As String = Format(Inicial, "yyyy-MM-dd") Dim DateFinal As String = Format(Final, "yyyy-MM-dd") DataInicial = DateInicial.Replace("-", "") DataFinal = DateFinal.Replace("-", "") Dim cmd As New MySqlCommand(PrintStringdetalhespedidos, conexao) leitor = cmd.ExecuteReader() PaginaAtual = 1 Dim pedidoID As Integer Dim clienteID As Integer Dim nomecli As String Dim produtoID As Integer Dim unidade As String Dim descricao As String Dim preco As Double Dim quantidade As Integer Dim subtotal As Double Dim peso As Double Dim pesoaproximado As Double Dim TotalNota As Double '******************************** 'inicio imprime o cabeçalho do relatório '******************************** 'e.Graphics.DrawLine(Pens.Black, MargemEsquerda, 60, MargemDireita, 60) CriaTabela(2, 1, True) Tabela.Rows.Add() If PrintStringdetalhespedidoscount = "select COUNT(*) from pedidos p inner join clientes c on p.clienteID = c.codigo where p.ativo= 'S' and c.nome like '" & TBCliente.Text & "%'" Then Tabela.Cell(1, 1).Range.Text = "JOSÉ LUIZ - ME" .Selection.TypeParagraph() Tabela.Cell(2, 1).Range.Text = "PEDIDOS EM NOME DE: " & DGVLista.CurrentRow.Cells(3).Value ElseIf PrintStringdetalhespedidoscount = "select Count(*) from pedidos where ativo= 'S' and data BETWEEN " & Convert.ToString(DataInicial) & " and " & Convert.ToString(DataFinal) & " order by data" Then Tabela.Cell(1, 1).Range.Text = "JOSÉ LUIZ – ME" .Selection.TypeParagraph() Tabela.Cell(2, 1).Range.Text = "PEDIDO: " & Format(DTPInicial.Value, "Short Date") & " a " & Format(DTPFinal.Value, "Short Date") End If 'e.Graphics.DrawLine(Pens.Black, MargemEsquerda, 120, MargemDireita, 120) '******************************** 'fim imprime o cabeçalho do relatório '******************************** '******************************************* 'imprime os títulos das colunas do relatório '******************************************* 'e.Graphics.DrawLine(Pens.Black, MargemEsquerda, 140, MargemDireita, 140) Dim totallinhastabela As Integer = totalLinhastotal + totalLinhas CriaTabela(totallinhastabela, 10, True) Tabela.Rows.Add() Tabela.Cell(1, 1).Range.Text = "C.Ped:" Tabela.Cell(1, 2).Range.Text = "C.Cli:" Tabela.Cell(1, 3).Range.Text = "Nome: " Tabela.Cell(1, 4).Range.Text = "C.Prod: " Tabela.Cell(1, 5).Range.Text = "Descrição:" Tabela.Cell(1, 6).Range.Text = "Qtde:" Tabela.Cell(1, 7).Range.Text = "Unid:" Tabela.Cell(1, 8).Range.Text = "Preço:" Tabela.Cell(1, 9).Range.Text = "Peso:" Tabela.Cell(1, 10).Range.Text = "Total:" ' e.Graphics.DrawLine(Pens.Black, MargemEsquerda, 160, MargemDireita, 160) '******************************************* 'fim do imprime os títulos das colunas do relatório '******************************************* While (leitor.Read()) pedidoID = leitor("pedidoID") clienteID = leitor("clienteID") nomecli = leitor("nome") Tabela.Cell(ContaLinha, 1).Range.Text = pedidoID Tabela.Cell(ContaLinha, 2).Range.Text = clienteID Tabela.Cell(ContaLinha, 3).Range.Text = splitstring(nomecli) Dim PrintStringdetalhespedidos2 As String = "Select * from detalhespedidos where pedidoID= " & leitor("pedidoID") Dim item As DataSet = accDb.ExecuteDS(PrintStringdetalhespedidos2, "detalhespedidos") For Each linhaDS As DataRow In item.Tables(0).Rows produtoID = linhaDS("produtoID") descricao = linhaDS("descricao") quantidade = linhaDS("quantidade") unidade = linhaDS("unidade") preco = linhaDS("preco") peso = linhaDS("peso") subtotal = linhaDS("subtotal") 'condicao = linha("condicao") Tabela.Cell(ContaLinha, 4).Range.Text() = produtoID Tabela.Cell(ContaLinha, 5).Range.Text = splitstring(descricao) Tabela.Cell(ContaLinha, 6).Range.Text = quantidade Tabela.Cell(ContaLinha, 7).Range.Text = unidade Tabela.Cell(ContaLinha, 8).Range.Text = preco Tabela.Cell(ContaLinha, 9).Range.Text = peso Tabela.Cell(ContaLinha, 10).Range.Text = subtotal pesoaproximado += peso TotalNota += subtotal ContaLinha += 1 Next linhaDS ' e.Graphics.DrawLine(Pens.Black, MargemEsquerda, PosicaoDaLinhaDS, MargemDireita, PosicaoDaLinhaDS) ContaLinha += 1 End While 'e.Graphics.DrawLine(Pens.Black, MargemEsquerda, MargemInferior - 20, MargemDireita, PosicaoDaLinha) CriaTabela(2, 3, True) Tabela.Rows.Add() Tabela.Cell(1, 1).Range.Text = "Total de pedidos: " & totalLinhas Tabela.Cell(1, 2).Range.Text = "Peso Aproxiamdo: " & pesoaproximado & " Kg" Tabela.Cell(1, 3).Range.Text = "Valor da carga: " & Format(TotalNota, "currency") Tabela.Cell(2, 1).Range.Text = System.DateTime.Now.ToString() 'e.Graphics.DrawLine(CanetaDaImpressora, MargemEsquerda, MargemInferior, MargemDireita, MargemInferior) leitor.Close() conexao.Close() End With End Sub Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Janeiro 24, 2009 Consegui fazer. Mas tem alguns outros probnlemas. No documento word, criei 3 tabelas A tabela 1, a 2 e a 3 nessa ordem mas acontece que elas sairam na ordem contraria 3,2,1. Como corrigir isso. Outra coisa:> como fazer uma linha para separar uma registro do outro? É só dando Tabela.Cell(1, 1).Range.Text = "___________________________________________________________________________ ____" Ou tem outro jeito? Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Janeiro 25, 2009 Seu código esta muito grande, fica dificil analisar. De uma olhada nesse link e veja se te ajuda: http://forums.microsoft.com/msdn-br/ShowPo...7&SiteID=21 Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Janeiro 26, 2009 nesse exemplo que voce me passou, a pessoa só cris um,a tabela no word. foi de la meu pointa pé inicial Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Janeiro 26, 2009 Não to com tempo para testar. Mas vi que no exemplo que te passei que o cara colocou: oTable.Cell, oTable.Rows veja se existe algo como oTable.Line Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Janeiro 26, 2009 Foram 03 tabelas. dentro das tabela, os dados forma postados certo. O probnlema é a ordem em que as tabelas foram exibidas Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Janeiro 28, 2009 Terá que ordenar isso no seu código. Esta mandando na sequência correta? Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Janeiro 29, 2009 Bom. Estou enviando correto sim. Veja o código abaixo: Tentei inverter a exibição imprimindo primeiro o rodapé e por ultimo o cabeçalho. Com relação a ordem resolve mas variaveis não recebem seus valoires corretamente: '''''''''''''''''''''''''''''''''''''EXPORTA WORD'''''''''''''''''''''''''''''''' Public Sub CriaTabela(ByVal Linhas As Integer, ByVal Colunas As Integer, Optional ByVal Bordas As Boolean = True) Tabela = word.ActiveDocument.Tables.Add(word.Selection.Range, Linhas, Colunas, 0, 0) With Tabela .ApplyStyleHeadingRows = True .ApplyStyleLastRow = False .ApplyStyleFirstColumn = True .ApplyStyleLastColumn = False .ApplyStyleRowBands = True .ApplyStyleColumnBands = False If Not Bordas Then .Selection.MoveRight(1, Colunas, 1) .Selection.MoveDown(5, Linhas - 1, 1) .Selection.Borders(-1).LineStyle = 0 .Selection.Borders(-2).LineStyle = 0 .Selection.Borders(-3).LineStyle = 0 .Selection.Borders(-4).LineStyle = 0 .Selection.Borders(-5).LineStyle = 0 .Selection.Borders(-6).LineStyle = 0 .Selection.Borders(-7).LineStyle = 0 .Selection.Borders(-8).LineStyle = 0 End If End With End Sub Private Sub PreencheWord() word = CreateObject("Word.Application") word.Documents.Add() word.Visible = True With word Dim strConnString As String = "server=localhost;userid=root;password=;database=Pedidos" conexao = New MySqlConnection(strConnString) conexao.Open() If TBCliente.Text <> "" Then listapedidoidsql = "select Count(*) from detalhespedidos d inner join pedidos p on d.pedidoID = p.pedidoID inner join clientes c on c.codigo= p.clienteID where p.ativo= 'S' and c.nome = '" & nomecliente & "'order by p.pedidoID" PrintStringdetalhespedidoscount = "select COUNT(*) from pedidos p inner join clientes c on p.clienteID = c.codigo where p.ativo= 'S' and c.nome = '" & nomecliente & "'" PrintStringdetalhespedidos = "select pedidoID, p.data, p.clienteID, c.nome as nome, c.codigo as codigocli, p.ativo, entrega, cobranca, frete, PGTO, CondPgto from pedidos p inner join clientes c on p.clienteID = c.codigo where p.ativo= 'S' and c.nome = '" & nomecliente & "'" ElseIf Not IsDBNull(DTPInicial.Value) Then listapedidoidsql = "select Count(*) from detalhespedidos d inner join pedidos p on d.pedidoID = p.pedidoID where p.ativo= 'S' and data BETWEEN " & Convert.ToString(DataInicial) & " and " & Convert.ToString(DataFinal) & " order by p.pedidoID" PrintStringdetalhespedidoscount = "select Count(*) from pedidos where ativo= 'S' and data BETWEEN " & Convert.ToString(DataInicial) & " and " & Convert.ToString(DataFinal) & " order by data" PrintStringdetalhespedidos = "select pedidoID, p.data,p.clienteID, c.nome as nome, c.codigo as codigocli, p.ativo,entrega, cobranca, frete, PGTO, CondPgto from pedidos p inner join clientes c on p.clienteID = c.codigo where p.ativo= 'S' and p.data BETWEEN " & Convert.ToString(DataInicial) & " and " & Convert.ToString(DataFinal) & " order by p.data" End If Dim cmdcounttotal As New MySqlCommand(listapedidoidsql, conexao) Dim cmdcount As New MySqlCommand(PrintStringdetalhespedidoscount, conexao) totalLinhas = CInt(cmdcount.ExecuteScalar()) totalLinhastotal = CInt(cmdcounttotal.ExecuteScalar()) Dim Inicial As Date = Format(DTPInicial.Value, "Short Date") Dim Final As Date = Format(DTPFinal.Value, "Short Date") Dim DateInicial As String = Format(Inicial, "yyyy-MM-dd") Dim DateFinal As String = Format(Final, "yyyy-MM-dd") DataInicial = DateInicial.Replace("-", "") DataFinal = DateFinal.Replace("-", "") Dim cmd As New MySqlCommand(PrintStringdetalhespedidos, conexao) leitor = cmd.ExecuteReader() PaginaAtual = 1 Dim pedidoID As Integer Dim clienteID As Integer Dim nomecli As String Dim produtoID As Integer Dim unidade As String Dim descricao As String Dim preco As Double Dim quantidade As Integer Dim subtotal As Double Dim peso As Double Dim pesoaproximado As Double Dim TotalNota As Double '******************************** 'inicio imprime o cabeçalho do relatório '******************************** 'e.Graphics.DrawLine(Pens.Black, MargemEsquerda, 60, MargemDireita, 60) CriaTabela(2, 1, True) Tabela.Rows.Add() If PrintStringdetalhespedidoscount = "select COUNT(*) from pedidos p inner join clientes c on p.clienteID = c.codigo where p.ativo= 'S' and c.nome = '" & nomecliente & "'" Then Tabela.Cell(1, 1).Range.Text = "JOSÉ LUIZ - ME" .Selection.TypeParagraph() Tabela.Cell(2, 1).Range.Text = "PEDIDOS EM NOME DE: " & DGVLista.CurrentRow.Cells(3).Value ElseIf PrintStringdetalhespedidoscount = "select Count(*) from pedidos where ativo= 'S' and data BETWEEN " & Convert.ToString(DataInicial) & " and " & Convert.ToString(DataFinal) & " order by data" Then Tabela.Cell(1, 1).Range.Text = "JOSÉ LUIZ – ME" .Selection.TypeParagraph() Tabela.Cell(2, 1).Range.Text = "PEDIDO: " & Format(DTPInicial.Value, "Short Date") & " a " & Format(DTPFinal.Value, "Short Date") End If '******************************** 'fim imprime o cabeçalho do relatório '******************************** '******************************************* 'imprime os títulos das colunas do relatório '******************************************* Dim totallinhastabela As Integer = totalLinhastotal + totalLinhas CriaTabela(totallinhastabela, 10, True) Tabela.Rows.Add() Tabela.Cell(1, 1).Range.Text = "C.Ped:" Tabela.Cell(1, 2).Range.Text = "C.Cli:" Tabela.Cell(1, 3).Range.Text = "Nome: " Tabela.Cell(1, 4).Range.Text = "C.Prod: " Tabela.Cell(1, 5).Range.Text = "Descrição:" Tabela.Cell(1, 6).Range.Text = "Qtde:" Tabela.Cell(1, 7).Range.Text = "Unid:" Tabela.Cell(1, 8).Range.Text = "Preço:" Tabela.Cell(1, 9).Range.Text = "Peso:" Tabela.Cell(1, 10).Range.Text = "Total:" '******************************************* 'fim do imprime os títulos das colunas do relatório '******************************************* While (leitor.Read()) pedidoID = leitor("pedidoID") clienteID = leitor("clienteID") nomecli = leitor("nome") Tabela.Cell(ContaLinha, 1).Range.Text = pedidoID Tabela.Cell(ContaLinha, 2).Range.Text = clienteID Tabela.Cell(ContaLinha, 3).Range.Text = splitstring(nomecli) Dim PrintStringdetalhespedidos2 As String = "Select * from detalhespedidos where pedidoID= " & leitor("pedidoID") Dim item As DataSet = accDb.ExecuteDS(PrintStringdetalhespedidos2, "detalhespedidos") For Each linhaDS As DataRow In item.Tables(0).Rows produtoID = linhaDS("produtoID") descricao = linhaDS("descricao") quantidade = linhaDS("quantidade") unidade = linhaDS("unidade") preco = linhaDS("preco") peso = linhaDS("peso") subtotal = linhaDS("subtotal") 'condicao = linha("condicao") Tabela.Cell(ContaLinha, 4).Range.Text() = produtoID Tabela.Cell(ContaLinha, 5).Range.Text = splitstring(descricao) Tabela.Cell(ContaLinha, 6).Range.Text = quantidade Tabela.Cell(ContaLinha, 7).Range.Text = unidade Tabela.Cell(ContaLinha, 8).Range.Text = preco Tabela.Cell(ContaLinha, 9).Range.Text = peso Tabela.Cell(ContaLinha, 10).Range.Text = subtotal pesoaproximado += peso TotalNota += subtotal ContaLinha += 1 Next linhaDS '.Selection.TypeText(Text:="_______________________________________________________________") ContaLinha += 1 End While .Selection.InsertBreak(8) '8=wdLineBreak '******************************** 'inicio imprime o rodapé do relatório '******************************** CriaTabela(2, 3, True) Tabela.Rows.Add() Tabela.Cell(1, 1).Range.Text = "Total de pedidos: " & totalLinhas Tabela.Cell(1, 2).Range.Text = "Peso Aproximado: " & pesoaproximado & " Kg" Tabela.Cell(1, 3).Range.Text = "Valor da carga: " & Format(TotalNota, "currency") Tabela.Cell(2, 1).Range.Text = System.DateTime.Now.ToString() '******************************** 'fim imprime o rodapé do relatório '******************************** leitor.Close() conexao.Close() End With End Sub '''''''''''''''''''''''''''''''''''''EXPORTA WORD''''''''''''''''''''''''''''''''''''''' Compartilhar este post Link para o post Compartilhar em outros sites