Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Carcleo

Ordenação dew campos no word

Recommended Posts

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:

Imagem Postada

 

Como esta:

Imagem Postada

 

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.