Ir para conteúdo
Fórum Script Brasil
  • 0

Ordenação dew campos no word


Carlos Rocha

Pergunta

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:

aa.jpg

Como esta:

bb.jpg

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

Editado por Carlos Rocha
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

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?

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...