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 preço 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")
preço = linhaDS("preço")
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 = preço
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
Pergunta
Carlos Rocha
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:
Editado por Carlos RochaLink para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.