criar/gerar documento word
Olá pessoal,
Depois de muito pesquisar, não só aqui no cluebedelphi, mas também em outros sites relacionados ao delphi, encontrei muita coisa, diria até que valiosas, sobre criar/gerar documento p/ word umas usando
´Word.Basic´ outras usando ´Word.Application´. Até procurei no help do delphi algo mas não encontrei.
Gostaria de saber onde posso encontrar alguma documentação/apostila sobre o assunto ou se alguém tiver exemplos
ficaria muito agradecido.
Usando ´Word.basic´ consegui centralizar, mudar fonte/tamanho mas não consegui mudar a cor. Usando ´Word.Application´ consegui mudar a cor da fonte mas centralizar não. Além dessas preciso alterar o
tamanho da página: margem esquerda/direita e, como já disse, não encontrei nada a esse respeito. Sei que é possível mas, além de não saber, não encontrei documentação.
Desde já agradeço a qualquer ajuda
Depois de muito pesquisar, não só aqui no cluebedelphi, mas também em outros sites relacionados ao delphi, encontrei muita coisa, diria até que valiosas, sobre criar/gerar documento p/ word umas usando
´Word.Basic´ outras usando ´Word.Application´. Até procurei no help do delphi algo mas não encontrei.
Gostaria de saber onde posso encontrar alguma documentação/apostila sobre o assunto ou se alguém tiver exemplos
ficaria muito agradecido.
Usando ´Word.basic´ consegui centralizar, mudar fonte/tamanho mas não consegui mudar a cor. Usando ´Word.Application´ consegui mudar a cor da fonte mas centralizar não. Além dessas preciso alterar o
tamanho da página: margem esquerda/direita e, como já disse, não encontrei nada a esse respeito. Sei que é possível mas, além de não saber, não encontrei documentação.
Desde já agradeço a qualquer ajuda
Lindomar.des
Curtidas 0
Respostas
Massuda
19/02/2005
A Microsoft disponibiliza online a documentação sobre VBA e interface de automação para a versão mais recente do Office [url=http://msdn.microsoft.com/library/en-us/dnanchor/html/odc_ancoffice.asp]nesta página do MSDN[/url]; em particular, esta é [url=http://msdn.microsoft.com/library/en-us/vbawd11/html/WordVBAWelcome_HV01135786.asp]página inicial do VBA do Word[/url] e [url=http://msdn.microsoft.com/library/en-us/vbawd11/html/womscProgrammaticIdentifiers_HV05212309.asp]esta página[/url] apresenta os diferentes objetos de automação que cada aplicativo Office expõe.
GOSTEI 0
Lindomar.des
19/02/2005
Massuda,
Obrigado pela dica. Antes mesmo de postar essa mensagem encontrei uma dica a respeito de gravar macros no word e depois editar o código da macro. Com isso consegui configurar as margens e mudar a cor da fonte do texto usando ´Word.Application´.Agora estou tentando inserir um hyperlink. Vou verificar os links q vc me passou. Assim que conseguir o q quero vou postar todo o código aqui no fórum.
Muito obrigado pela ajuda.
Obrigado pela dica. Antes mesmo de postar essa mensagem encontrei uma dica a respeito de gravar macros no word e depois editar o código da macro. Com isso consegui configurar as margens e mudar a cor da fonte do texto usando ´Word.Application´.Agora estou tentando inserir um hyperlink. Vou verificar os links q vc me passou. Assim que conseguir o q quero vou postar todo o código aqui no fórum.
Muito obrigado pela ajuda.
GOSTEI 0
M
19/02/2005
Desculpe ão poder ajudar, mas estou com o mesmo problema.
Quando achar algo lhe aviso.
Gostaria se possível ser avidado quando voce colocar no fórum a documentacao que achou. Gostaria de uma cópia.
Boa sorte.
Quando achar algo lhe aviso.
Gostaria se possível ser avidado quando voce colocar no fórum a documentacao que achou. Gostaria de uma cópia.
Boa sorte.
GOSTEI 0
Lindomar.des
19/02/2005
Pessoal,
Conforme havia dito, segue a rotina para gerar um arq. p/ word. Tive como base inicial o artigo de: Felipe Monteiro
que postou uma dica no fórum do Planeta Delphi: www.delphi.eti.br. ´Como usar recursos do word?´. A qual fiz as modificações
de acordo com minha necessidade. Tive como base final o arq. de ajuda da Microsoft que me foi indicado pelo colega Massuda.
É certo que o codigo abaixo precisa, e vou enxugá-lo, mas é que o terminei agora e estava ancioso para postá-lo.
Acredito servirá para ajudar a outros colegas. Peço desculpas aos moderadores se em algum momento feri as regras de condulta
com este post.
Uses
ComObj, ActiveX, Word2000, OleServer;
procedure TfrmPedido.GerarArquivoWord;
var
Document, Range, Link: Variant;
iItem, iLinhasOBS: Integer;
sPrazo: string;
begin
NewWord := CreateOleObject(´Word.Application´);
NewWord.Visible := True;
iItem := 0;
//adciona nova linha/parágrafo
Document := NewWord.Documents.Add();
//ajusta as margens
Document.PageSetup.TopMargin := ´1,02 cm´;
Document.PageSetup.BottomMargin := ´2,49 cm´;
Document.PageSetup.LeftMargin := ´1,1 cm´;
Document.PageSetup.RightMargin := ´1,1 cm´;
Range := Document.Paragraphs.Item(1).Range;
//ajusta o alinhamento do paragrafo
Range.ParagraphFormat.Alignment := wdAlignParagraphCenter;
//ajusta o tipo de fonte
Range.Font.Name := ´Times New Roman´;
Range.Font.Size := 26;
//negrito
Range.Bold := 1;
Range.Text := dmMaster.IBDFilialFANTASIA.Value;
//adciona nova linha/parágrafo
Document.Paragraphs.Add;
Range := Document.Paragraphs.Item(2).Range;
Range.Font.Size := 12;
Range.Text := Trim(dmMaster.IBDFilialENDERECO.Value) + ´, ´
+ Trim(dmMaster.IBDFilialNUMERO.Value) + ´ - ´ +
Trim(dmMaster.IBDFilialCOMPLEMENTO.Value)
+ ´ - ´ + Trim(dmMaster.IBDFilialBAIRRO.Value) + ´ - ´ +
Trim(dmMaster.IBDFilialCIDADE.Value)
+ ´ - ´ + dmMaster.IBDFilialESTADO.Value;
Document.Paragraphs.Add;
//adciona nova linha/parágrafo
Range := Document.Paragraphs.Item(3).Range;
Range.Text := ´TEL (´ + Trim(dmMaster.IBDFilialDDD.Value) + ´) ´
+ Copy(Trim(dmMaster.IBDFilialTELEFONE1.Value), 1, 4) + ´-´
+ Copy(Trim(dmMaster.IBDFilialTELEFONE1.Value), 5, 4) + ´ - ´ + ´TELEFAX: (´
+ Trim(dmMaster.IBDFilialDDD.Value) + ´) ´
+ Copy(Trim(dmMaster.IBDFilialFAX.Value), 1, 4) + ´-´
+ Copy(Trim(dmMaster.IBDFilialFAX.Value), 5, 4);
//adciona nova linha/parágrafo
Document.Paragraphs.Add;
Range := Document.Paragraphs.Item(4).Range;
//adiciona um hyperlink
Range.Hyperlinks.Add(Range, ´mailto:´ + Trim(dmMaster.IBDFilialEMAIL.Value),
´´, ´´, Trim(dmMaster.IBDFilialEMAIL.Value));
//muda a cor da fonte
Range.Font.Color := clBlue;
Document.Paragraphs.Add;
Range := Document.Paragraphs.Item(5).Range;
//configura as bordas do paragrafo
Range.ParagraphFormat.Borders.Item(wdBorderTop).LineStyle :=
wdLineStyleDouble;
Range.ParagraphFormat.Borders.Item(wdBorderTop).LineWidth := wdLineWidth150pt;
Range.ParagraphFormat.Borders.Item(wdBorderBottom).LineStyle :=
wdLineStyleNone;
Range.ParagraphFormat.Borders.Item(wdBorderLeft).LineStyle := wdLineStyleNone;
Range.ParagraphFormat.Borders.Item(wdBorderRight).LineStyle :=
wdLineStyleNone;
Document.Paragraphs.Add;
Document.Paragraphs.Add;
Document.Paragraphs.Add;
Range := Document.Paragraphs.Item(8).Range;
Range.Font.Color := clBlack;
//tira o negrito
Range.Bold := 0;
//ajusta o alinhamento
Range.ParagraphFormat.Alignment := wdAlignParagraphRight;
Range.Text := Trim(dmMaster.IBDFilialCIDADE.Value) + ´/´ +
dmMaster.IBDFilialESTADO.Value + ´, ´ +
Trim(Copy(FormatDateTime(´dddddd´, Date), Pos(´,´,
FormatDateTime(´dddddd´, Date)) + 1, Length(FormatDateTime(´dddddd´,
Date))));
Document.Paragraphs.Add;
Document.Paragraphs.Add;
Document.Paragraphs.Add;
Range := Document.Paragraphs.Item(11).Range;
Range.ParagraphFormat.Alignment := wdAlignParagraphLeft;
Range.Text := ´A´;
Document.Paragraphs.Add;
Range := Document.Paragraphs.Item(12).Range;
Range.ParagraphFormat.Alignment := wdAlignParagraphLeft;
Range.Bold := 1;
//sublinhado
Range.Underline := 1;
Range.Text := Trim(dmMaster.IBDPedidoNOMECLIENTE.Value);
Document.Paragraphs.Add;
Range := Document.Paragraphs.Item(13).Range;
//tira o sublinhado
Range.Underline := 0;
Range.Text := ´A/C: Sr. ´ + Trim(dmMaster.IBDClientesCONTATO.Value);
Document.Paragraphs.Add;
Range := Document.Paragraphs.Item(14).Range;
Range.Bold := 0;
Range.Text := ´Ref.: Pedido´;
Document.Paragraphs.Add;
Document.Paragraphs.Add;
Document.Paragraphs.Add;
Document.Paragraphs.Add;
Document.Paragraphs.Add;
Range := Document.Paragraphs.Item(19).Range;
Range.Bold := 1;
Range.Text := ´FORNECEDOR: ´ + dmMaster.IBDPedidoNOMEFORNECEDOR.Value;
Document.Paragraphs.Add;
Range := Document.Paragraphs.Item(20).Range;
Range.Text := ´PED.: ´ + IntToStr(dmMaster.IBDPedidoPEDIDO.Value) + ´/´ +
FormatDateTime(´yy´, Date);
Range.Underline := 1;
dmMaster.IBDItemPedido.First;
iItem := 20;
sPrazo := ´´;
while not dmMaster.IBDItemPedido.Eof do
begin
Inc(iItem);
if dmMaster.IBDPrazosPedido.IsEmpty then
sPrazo := ´À VISTA´
else
begin
dmMaster.IBDPrazosPedido.First;
while not dmMaster.IBDPrazosPedido.Eof do
begin
sPrazo := sPrazo + IntToStr(dmMaster.IBDPrazosPedidoPRAZO.Value) + ´/ ´;
dmMaster.IBDPrazosPedido.Next;
end;
sPrazo := sPrazo + ´ DIAS´;
end;
Document.Paragraphs.Add;
Range := Document.Paragraphs.Item(iItem).Range;
Range.Underline := 0;
Range.Text := ´Quant.: ´ + Format(´¬6.6s´,
[FloatToStr(dmMaster.IBDItemPedidoQUANTIDADE.Value)]) + ´ ´ +
Format(´¬-3.3s´, [dmMaster.IBDItemPedidoEMBALAGEM.Value])
+ ´ ´ + Format(´¬-40.40s´, [Trim(dmMaster.IBDItemPedidoDESCRICAO.Value)])
+ ´ - PREÇO: ´ + Format(´¬12.12s´, [FormatFloat(´#,0.00´,
dmMaster.IBDItemPedidoVALORUNITARIO.Value)]) + ´ - PRAZO: ´ + sPrazo;
dmMaster.IBDItemPedido.Next;
end;
if dmMaster.IBDPedidoOBSERVACAO.Value <> ´´ then
begin
Document.Paragraphs.Add;
Inc(iItem);
Range := Document.Paragraphs.Item(iItem).Range;
Range.Text := ´OBS: ´ + DBMemo1.Lines[0];
for iLinhasOBS := 1 to (DBMemo1.Lines.Count - 1) do
begin
Document.Paragraphs.Add;
Inc(iItem);
Range := Document.Paragraphs.Item(iItem).Range;
Range.Text := ´ ´ + DBMemo1.Lines[iLinhasOBS];
end;
end;
Document.Paragraphs.Add;
Inc(iItem);
Document.Paragraphs.Add;
Inc(iItem);
Document.Paragraphs.Add;
Inc(iItem);
Document.Paragraphs.Add;
Inc(iItem);
Range := Document.Paragraphs.Item(iItem).Range;
Range.Bold := 0;
Range.Text := ´Sendo o que tínhamos para o momento´;
Document.Paragraphs.Add;
Inc(iItem);
Document.Paragraphs.Add;
Inc(iItem);
Document.Paragraphs.Add;
Inc(iItem);
Range := Document.Paragraphs.Item(iItem).Range;
Range.Text := ´Atenciosamente´;
Document.Paragraphs.Add;
Inc(iItem);
Range := Document.Paragraphs.Item(iItem).Range;
Range.Text := Trim(dmMaster.IBDFilialFANTASIA.Value);
// salvar o arquivo gerado
if not DirectoryExists(´C:\Temp´) then
CreateDir(´C:\Temp´);
Document.SaveAs(WideString(´c:\temp\teste.doc´), 0);
Document.SaveAs(FileName := WideString(´c:\temp\teste.doc´),
FileFormat := 0, //formato nativo do word
SaveNativePictureFormat := 1); // true
end;
Conforme havia dito, segue a rotina para gerar um arq. p/ word. Tive como base inicial o artigo de: Felipe Monteiro
que postou uma dica no fórum do Planeta Delphi: www.delphi.eti.br. ´Como usar recursos do word?´. A qual fiz as modificações
de acordo com minha necessidade. Tive como base final o arq. de ajuda da Microsoft que me foi indicado pelo colega Massuda.
É certo que o codigo abaixo precisa, e vou enxugá-lo, mas é que o terminei agora e estava ancioso para postá-lo.
Acredito servirá para ajudar a outros colegas. Peço desculpas aos moderadores se em algum momento feri as regras de condulta
com este post.
Uses
ComObj, ActiveX, Word2000, OleServer;
procedure TfrmPedido.GerarArquivoWord;
var
Document, Range, Link: Variant;
iItem, iLinhasOBS: Integer;
sPrazo: string;
begin
NewWord := CreateOleObject(´Word.Application´);
NewWord.Visible := True;
iItem := 0;
//adciona nova linha/parágrafo
Document := NewWord.Documents.Add();
//ajusta as margens
Document.PageSetup.TopMargin := ´1,02 cm´;
Document.PageSetup.BottomMargin := ´2,49 cm´;
Document.PageSetup.LeftMargin := ´1,1 cm´;
Document.PageSetup.RightMargin := ´1,1 cm´;
Range := Document.Paragraphs.Item(1).Range;
//ajusta o alinhamento do paragrafo
Range.ParagraphFormat.Alignment := wdAlignParagraphCenter;
//ajusta o tipo de fonte
Range.Font.Name := ´Times New Roman´;
Range.Font.Size := 26;
//negrito
Range.Bold := 1;
Range.Text := dmMaster.IBDFilialFANTASIA.Value;
//adciona nova linha/parágrafo
Document.Paragraphs.Add;
Range := Document.Paragraphs.Item(2).Range;
Range.Font.Size := 12;
Range.Text := Trim(dmMaster.IBDFilialENDERECO.Value) + ´, ´
+ Trim(dmMaster.IBDFilialNUMERO.Value) + ´ - ´ +
Trim(dmMaster.IBDFilialCOMPLEMENTO.Value)
+ ´ - ´ + Trim(dmMaster.IBDFilialBAIRRO.Value) + ´ - ´ +
Trim(dmMaster.IBDFilialCIDADE.Value)
+ ´ - ´ + dmMaster.IBDFilialESTADO.Value;
Document.Paragraphs.Add;
//adciona nova linha/parágrafo
Range := Document.Paragraphs.Item(3).Range;
Range.Text := ´TEL (´ + Trim(dmMaster.IBDFilialDDD.Value) + ´) ´
+ Copy(Trim(dmMaster.IBDFilialTELEFONE1.Value), 1, 4) + ´-´
+ Copy(Trim(dmMaster.IBDFilialTELEFONE1.Value), 5, 4) + ´ - ´ + ´TELEFAX: (´
+ Trim(dmMaster.IBDFilialDDD.Value) + ´) ´
+ Copy(Trim(dmMaster.IBDFilialFAX.Value), 1, 4) + ´-´
+ Copy(Trim(dmMaster.IBDFilialFAX.Value), 5, 4);
//adciona nova linha/parágrafo
Document.Paragraphs.Add;
Range := Document.Paragraphs.Item(4).Range;
//adiciona um hyperlink
Range.Hyperlinks.Add(Range, ´mailto:´ + Trim(dmMaster.IBDFilialEMAIL.Value),
´´, ´´, Trim(dmMaster.IBDFilialEMAIL.Value));
//muda a cor da fonte
Range.Font.Color := clBlue;
Document.Paragraphs.Add;
Range := Document.Paragraphs.Item(5).Range;
//configura as bordas do paragrafo
Range.ParagraphFormat.Borders.Item(wdBorderTop).LineStyle :=
wdLineStyleDouble;
Range.ParagraphFormat.Borders.Item(wdBorderTop).LineWidth := wdLineWidth150pt;
Range.ParagraphFormat.Borders.Item(wdBorderBottom).LineStyle :=
wdLineStyleNone;
Range.ParagraphFormat.Borders.Item(wdBorderLeft).LineStyle := wdLineStyleNone;
Range.ParagraphFormat.Borders.Item(wdBorderRight).LineStyle :=
wdLineStyleNone;
Document.Paragraphs.Add;
Document.Paragraphs.Add;
Document.Paragraphs.Add;
Range := Document.Paragraphs.Item(8).Range;
Range.Font.Color := clBlack;
//tira o negrito
Range.Bold := 0;
//ajusta o alinhamento
Range.ParagraphFormat.Alignment := wdAlignParagraphRight;
Range.Text := Trim(dmMaster.IBDFilialCIDADE.Value) + ´/´ +
dmMaster.IBDFilialESTADO.Value + ´, ´ +
Trim(Copy(FormatDateTime(´dddddd´, Date), Pos(´,´,
FormatDateTime(´dddddd´, Date)) + 1, Length(FormatDateTime(´dddddd´,
Date))));
Document.Paragraphs.Add;
Document.Paragraphs.Add;
Document.Paragraphs.Add;
Range := Document.Paragraphs.Item(11).Range;
Range.ParagraphFormat.Alignment := wdAlignParagraphLeft;
Range.Text := ´A´;
Document.Paragraphs.Add;
Range := Document.Paragraphs.Item(12).Range;
Range.ParagraphFormat.Alignment := wdAlignParagraphLeft;
Range.Bold := 1;
//sublinhado
Range.Underline := 1;
Range.Text := Trim(dmMaster.IBDPedidoNOMECLIENTE.Value);
Document.Paragraphs.Add;
Range := Document.Paragraphs.Item(13).Range;
//tira o sublinhado
Range.Underline := 0;
Range.Text := ´A/C: Sr. ´ + Trim(dmMaster.IBDClientesCONTATO.Value);
Document.Paragraphs.Add;
Range := Document.Paragraphs.Item(14).Range;
Range.Bold := 0;
Range.Text := ´Ref.: Pedido´;
Document.Paragraphs.Add;
Document.Paragraphs.Add;
Document.Paragraphs.Add;
Document.Paragraphs.Add;
Document.Paragraphs.Add;
Range := Document.Paragraphs.Item(19).Range;
Range.Bold := 1;
Range.Text := ´FORNECEDOR: ´ + dmMaster.IBDPedidoNOMEFORNECEDOR.Value;
Document.Paragraphs.Add;
Range := Document.Paragraphs.Item(20).Range;
Range.Text := ´PED.: ´ + IntToStr(dmMaster.IBDPedidoPEDIDO.Value) + ´/´ +
FormatDateTime(´yy´, Date);
Range.Underline := 1;
dmMaster.IBDItemPedido.First;
iItem := 20;
sPrazo := ´´;
while not dmMaster.IBDItemPedido.Eof do
begin
Inc(iItem);
if dmMaster.IBDPrazosPedido.IsEmpty then
sPrazo := ´À VISTA´
else
begin
dmMaster.IBDPrazosPedido.First;
while not dmMaster.IBDPrazosPedido.Eof do
begin
sPrazo := sPrazo + IntToStr(dmMaster.IBDPrazosPedidoPRAZO.Value) + ´/ ´;
dmMaster.IBDPrazosPedido.Next;
end;
sPrazo := sPrazo + ´ DIAS´;
end;
Document.Paragraphs.Add;
Range := Document.Paragraphs.Item(iItem).Range;
Range.Underline := 0;
Range.Text := ´Quant.: ´ + Format(´¬6.6s´,
[FloatToStr(dmMaster.IBDItemPedidoQUANTIDADE.Value)]) + ´ ´ +
Format(´¬-3.3s´, [dmMaster.IBDItemPedidoEMBALAGEM.Value])
+ ´ ´ + Format(´¬-40.40s´, [Trim(dmMaster.IBDItemPedidoDESCRICAO.Value)])
+ ´ - PREÇO: ´ + Format(´¬12.12s´, [FormatFloat(´#,0.00´,
dmMaster.IBDItemPedidoVALORUNITARIO.Value)]) + ´ - PRAZO: ´ + sPrazo;
dmMaster.IBDItemPedido.Next;
end;
if dmMaster.IBDPedidoOBSERVACAO.Value <> ´´ then
begin
Document.Paragraphs.Add;
Inc(iItem);
Range := Document.Paragraphs.Item(iItem).Range;
Range.Text := ´OBS: ´ + DBMemo1.Lines[0];
for iLinhasOBS := 1 to (DBMemo1.Lines.Count - 1) do
begin
Document.Paragraphs.Add;
Inc(iItem);
Range := Document.Paragraphs.Item(iItem).Range;
Range.Text := ´ ´ + DBMemo1.Lines[iLinhasOBS];
end;
end;
Document.Paragraphs.Add;
Inc(iItem);
Document.Paragraphs.Add;
Inc(iItem);
Document.Paragraphs.Add;
Inc(iItem);
Document.Paragraphs.Add;
Inc(iItem);
Range := Document.Paragraphs.Item(iItem).Range;
Range.Bold := 0;
Range.Text := ´Sendo o que tínhamos para o momento´;
Document.Paragraphs.Add;
Inc(iItem);
Document.Paragraphs.Add;
Inc(iItem);
Document.Paragraphs.Add;
Inc(iItem);
Range := Document.Paragraphs.Item(iItem).Range;
Range.Text := ´Atenciosamente´;
Document.Paragraphs.Add;
Inc(iItem);
Range := Document.Paragraphs.Item(iItem).Range;
Range.Text := Trim(dmMaster.IBDFilialFANTASIA.Value);
// salvar o arquivo gerado
if not DirectoryExists(´C:\Temp´) then
CreateDir(´C:\Temp´);
Document.SaveAs(WideString(´c:\temp\teste.doc´), 0);
Document.SaveAs(FileName := WideString(´c:\temp\teste.doc´),
FileFormat := 0, //formato nativo do word
SaveNativePictureFormat := 1); // true
end;
GOSTEI 0
Lindomar.des
19/02/2005
[quote=´Lindomar.des´]Pessoal,
Conforme havia dito, segue a rotina para gerar um arq. p/ word. Tive como base inicial o artigo de: Felipe Monteiro
que postou uma dica no fórum do Planeta Delphi: www.delphi.eti.br. ´Como usar recursos do word?´. A qual fiz as modificações
de acordo com minha necessidade. Tive como base final o arq. de ajuda da Microsoft que me foi indicado pelo colega Massuda.
É certo que o codigo abaixo precisa, e vou enxugá-lo, mas é que o terminei agora e estava ancioso para postá-lo.
Acredito servirá para ajudar a outros colegas. Peço desculpas aos moderadores se em algum momento feri as regras de condulta
com este post.
Uses
ComObj, ActiveX, Word2000, OleServer;
procedure TfrmPedido.GerarArquivoWord;
var
Document, Range, Link: Variant;
iItem, iLinhasOBS: Integer;
sPrazo: string;
begin
NewWord := CreateOleObject(´Word.Application´);
NewWord.Visible := True;
iItem := 0;
//adciona nova linha/parágrafo
Document := NewWord.Documents.Add();
//ajusta as margens
Document.PageSetup.TopMargin := ´1,02 cm´;
Document.PageSetup.BottomMargin := ´2,49 cm´;
Document.PageSetup.LeftMargin := ´1,1 cm´;
Document.PageSetup.RightMargin := ´1,1 cm´;
Range := Document.Paragraphs.Item(1).Range;
//ajusta o alinhamento do paragrafo
Range.ParagraphFormat.Alignment := wdAlignParagraphCenter;
//ajusta o tipo de fonte
Range.Font.Name := ´Times New Roman´;
Range.Font.Size := 26;
//negrito
Range.Bold := 1;
Range.Text := dmMaster.IBDFilialFANTASIA.Value;
//adciona nova linha/parágrafo
Document.Paragraphs.Add;
Range := Document.Paragraphs.Item(2).Range;
Range.Font.Size := 12;
Range.Text := Trim(dmMaster.IBDFilialENDERECO.Value) + ´, ´
+ Trim(dmMaster.IBDFilialNUMERO.Value) + ´ - ´ +
Trim(dmMaster.IBDFilialCOMPLEMENTO.Value)
+ ´ - ´ + Trim(dmMaster.IBDFilialBAIRRO.Value) + ´ - ´ +
Trim(dmMaster.IBDFilialCIDADE.Value)
+ ´ - ´ + dmMaster.IBDFilialESTADO.Value;
Document.Paragraphs.Add;
//adciona nova linha/parágrafo
Range := Document.Paragraphs.Item(3).Range;
Range.Text := ´TEL (´ + Trim(dmMaster.IBDFilialDDD.Value) + ´) ´
+ Copy(Trim(dmMaster.IBDFilialTELEFONE1.Value), 1, 4) + ´-´
+ Copy(Trim(dmMaster.IBDFilialTELEFONE1.Value), 5, 4) + ´ - ´ + ´TELEFAX: (´
+ Trim(dmMaster.IBDFilialDDD.Value) + ´) ´
+ Copy(Trim(dmMaster.IBDFilialFAX.Value), 1, 4) + ´-´
+ Copy(Trim(dmMaster.IBDFilialFAX.Value), 5, 4);
//adciona nova linha/parágrafo
Document.Paragraphs.Add;
Range := Document.Paragraphs.Item(4).Range;
//adiciona um hyperlink
Range.Hyperlinks.Add(Range, ´mailto:´ + Trim(dmMaster.IBDFilialEMAIL.Value),
´´, ´´, Trim(dmMaster.IBDFilialEMAIL.Value));
//muda a cor da fonte
Range.Font.Color := clBlue;
Document.Paragraphs.Add;
Range := Document.Paragraphs.Item(5).Range;
//configura as bordas do paragrafo
Range.ParagraphFormat.Borders.Item(wdBorderTop).LineStyle :=
wdLineStyleDouble;
Range.ParagraphFormat.Borders.Item(wdBorderTop).LineWidth := wdLineWidth150pt;
Range.ParagraphFormat.Borders.Item(wdBorderBottom).LineStyle :=
wdLineStyleNone;
Range.ParagraphFormat.Borders.Item(wdBorderLeft).LineStyle := wdLineStyleNone;
Range.ParagraphFormat.Borders.Item(wdBorderRight).LineStyle :=
wdLineStyleNone;
Document.Paragraphs.Add;
Document.Paragraphs.Add;
Document.Paragraphs.Add;
Range := Document.Paragraphs.Item(8).Range;
Range.Font.Color := clBlack;
//tira o negrito
Range.Bold := 0;
//ajusta o alinhamento
Range.ParagraphFormat.Alignment := wdAlignParagraphRight;
Range.Text := Trim(dmMaster.IBDFilialCIDADE.Value) + ´/´ +
dmMaster.IBDFilialESTADO.Value + ´, ´ +
Trim(Copy(FormatDateTime(´dddddd´, Date), Pos(´,´,
FormatDateTime(´dddddd´, Date)) + 1, Length(FormatDateTime(´dddddd´,
Date))));
Document.Paragraphs.Add;
Document.Paragraphs.Add;
Document.Paragraphs.Add;
Range := Document.Paragraphs.Item(11).Range;
Range.ParagraphFormat.Alignment := wdAlignParagraphLeft;
Range.Text := ´A´;
Document.Paragraphs.Add;
Range := Document.Paragraphs.Item(12).Range;
Range.ParagraphFormat.Alignment := wdAlignParagraphLeft;
Range.Bold := 1;
//sublinhado
Range.Underline := 1;
Range.Text := Trim(dmMaster.IBDPedidoNOMECLIENTE.Value);
Document.Paragraphs.Add;
Range := Document.Paragraphs.Item(13).Range;
//tira o sublinhado
Range.Underline := 0;
Range.Text := ´A/C: Sr. ´ + Trim(dmMaster.IBDClientesCONTATO.Value);
Document.Paragraphs.Add;
Range := Document.Paragraphs.Item(14).Range;
Range.Bold := 0;
Range.Text := ´Ref.: Pedido´;
Document.Paragraphs.Add;
Document.Paragraphs.Add;
Document.Paragraphs.Add;
Document.Paragraphs.Add;
Document.Paragraphs.Add;
Range := Document.Paragraphs.Item(19).Range;
Range.Bold := 1;
Range.Text := ´FORNECEDOR: ´ + dmMaster.IBDPedidoNOMEFORNECEDOR.Value;
Document.Paragraphs.Add;
Range := Document.Paragraphs.Item(20).Range;
Range.Text := ´PED.: ´ + IntToStr(dmMaster.IBDPedidoPEDIDO.Value) + ´/´ +
FormatDateTime(´yy´, Date);
Range.Underline := 1;
dmMaster.IBDItemPedido.First;
iItem := 20;
sPrazo := ´´;
while not dmMaster.IBDItemPedido.Eof do
begin
Inc(iItem);
if dmMaster.IBDPrazosPedido.IsEmpty then
sPrazo := ´À VISTA´
else
begin
dmMaster.IBDPrazosPedido.First;
while not dmMaster.IBDPrazosPedido.Eof do
begin
sPrazo := sPrazo + IntToStr(dmMaster.IBDPrazosPedidoPRAZO.Value) + ´/ ´;
dmMaster.IBDPrazosPedido.Next;
end;
sPrazo := sPrazo + ´ DIAS´;
end;
Document.Paragraphs.Add;
Range := Document.Paragraphs.Item(iItem).Range;
Range.Underline := 0;
Range.Text := ´Quant.: ´ + Format(´¬6.6s´,
[FloatToStr(dmMaster.IBDItemPedidoQUANTIDADE.Value)]) + ´ ´ +
Format(´¬-3.3s´, [dmMaster.IBDItemPedidoEMBALAGEM.Value])
+ ´ ´ + Format(´¬-40.40s´, [Trim(dmMaster.IBDItemPedidoDESCRICAO.Value)])
+ ´ - PREÇO: ´ + Format(´¬12.12s´, [FormatFloat(´#,0.00´,
dmMaster.IBDItemPedidoVALORUNITARIO.Value)]) + ´ - PRAZO: ´ + sPrazo;
dmMaster.IBDItemPedido.Next;
end;
if dmMaster.IBDPedidoOBSERVACAO.Value <> ´´ then
begin
Document.Paragraphs.Add;
Inc(iItem);
Range := Document.Paragraphs.Item(iItem).Range;
Range.Text := ´OBS: ´ + DBMemo1.Lines[0];
for iLinhasOBS := 1 to (DBMemo1.Lines.Count - 1) do
begin
Document.Paragraphs.Add;
Inc(iItem);
Range := Document.Paragraphs.Item(iItem).Range;
Range.Text := ´ ´ + DBMemo1.Lines[iLinhasOBS];
end;
end;
Document.Paragraphs.Add;
Inc(iItem);
Document.Paragraphs.Add;
Inc(iItem);
Document.Paragraphs.Add;
Inc(iItem);
Document.Paragraphs.Add;
Inc(iItem);
Range := Document.Paragraphs.Item(iItem).Range;
Range.Bold := 0;
Range.Text := ´Sendo o que tínhamos para o momento´;
Document.Paragraphs.Add;
Inc(iItem);
Document.Paragraphs.Add;
Inc(iItem);
Document.Paragraphs.Add;
Inc(iItem);
Range := Document.Paragraphs.Item(iItem).Range;
Range.Text := ´Atenciosamente´;
Document.Paragraphs.Add;
Inc(iItem);
Range := Document.Paragraphs.Item(iItem).Range;
Range.Text := Trim(dmMaster.IBDFilialFANTASIA.Value);
// salvar o arquivo gerado
if not DirectoryExists(´C:\Temp´) then
CreateDir(´C:\Temp´);
Document.SaveAs(WideString(´c:\temp\teste.doc´), 0);
Document.SaveAs(FileName := WideString(´c:\temp\teste.doc´),
FileFormat := 0, //formato nativo do word
SaveNativePictureFormat := 1); // true
end;
Conforme havia dito, segue a rotina para gerar um arq. p/ word. Tive como base inicial o artigo de: Felipe Monteiro
que postou uma dica no fórum do Planeta Delphi: www.delphi.eti.br. ´Como usar recursos do word?´. A qual fiz as modificações
de acordo com minha necessidade. Tive como base final o arq. de ajuda da Microsoft que me foi indicado pelo colega Massuda.
É certo que o codigo abaixo precisa, e vou enxugá-lo, mas é que o terminei agora e estava ancioso para postá-lo.
Acredito servirá para ajudar a outros colegas. Peço desculpas aos moderadores se em algum momento feri as regras de condulta
com este post.
Uses
ComObj, ActiveX, Word2000, OleServer;
procedure TfrmPedido.GerarArquivoWord;
var
Document, Range, Link: Variant;
iItem, iLinhasOBS: Integer;
sPrazo: string;
begin
NewWord := CreateOleObject(´Word.Application´);
NewWord.Visible := True;
iItem := 0;
//adciona nova linha/parágrafo
Document := NewWord.Documents.Add();
//ajusta as margens
Document.PageSetup.TopMargin := ´1,02 cm´;
Document.PageSetup.BottomMargin := ´2,49 cm´;
Document.PageSetup.LeftMargin := ´1,1 cm´;
Document.PageSetup.RightMargin := ´1,1 cm´;
Range := Document.Paragraphs.Item(1).Range;
//ajusta o alinhamento do paragrafo
Range.ParagraphFormat.Alignment := wdAlignParagraphCenter;
//ajusta o tipo de fonte
Range.Font.Name := ´Times New Roman´;
Range.Font.Size := 26;
//negrito
Range.Bold := 1;
Range.Text := dmMaster.IBDFilialFANTASIA.Value;
//adciona nova linha/parágrafo
Document.Paragraphs.Add;
Range := Document.Paragraphs.Item(2).Range;
Range.Font.Size := 12;
Range.Text := Trim(dmMaster.IBDFilialENDERECO.Value) + ´, ´
+ Trim(dmMaster.IBDFilialNUMERO.Value) + ´ - ´ +
Trim(dmMaster.IBDFilialCOMPLEMENTO.Value)
+ ´ - ´ + Trim(dmMaster.IBDFilialBAIRRO.Value) + ´ - ´ +
Trim(dmMaster.IBDFilialCIDADE.Value)
+ ´ - ´ + dmMaster.IBDFilialESTADO.Value;
Document.Paragraphs.Add;
//adciona nova linha/parágrafo
Range := Document.Paragraphs.Item(3).Range;
Range.Text := ´TEL (´ + Trim(dmMaster.IBDFilialDDD.Value) + ´) ´
+ Copy(Trim(dmMaster.IBDFilialTELEFONE1.Value), 1, 4) + ´-´
+ Copy(Trim(dmMaster.IBDFilialTELEFONE1.Value), 5, 4) + ´ - ´ + ´TELEFAX: (´
+ Trim(dmMaster.IBDFilialDDD.Value) + ´) ´
+ Copy(Trim(dmMaster.IBDFilialFAX.Value), 1, 4) + ´-´
+ Copy(Trim(dmMaster.IBDFilialFAX.Value), 5, 4);
//adciona nova linha/parágrafo
Document.Paragraphs.Add;
Range := Document.Paragraphs.Item(4).Range;
//adiciona um hyperlink
Range.Hyperlinks.Add(Range, ´mailto:´ + Trim(dmMaster.IBDFilialEMAIL.Value),
´´, ´´, Trim(dmMaster.IBDFilialEMAIL.Value));
//muda a cor da fonte
Range.Font.Color := clBlue;
Document.Paragraphs.Add;
Range := Document.Paragraphs.Item(5).Range;
//configura as bordas do paragrafo
Range.ParagraphFormat.Borders.Item(wdBorderTop).LineStyle :=
wdLineStyleDouble;
Range.ParagraphFormat.Borders.Item(wdBorderTop).LineWidth := wdLineWidth150pt;
Range.ParagraphFormat.Borders.Item(wdBorderBottom).LineStyle :=
wdLineStyleNone;
Range.ParagraphFormat.Borders.Item(wdBorderLeft).LineStyle := wdLineStyleNone;
Range.ParagraphFormat.Borders.Item(wdBorderRight).LineStyle :=
wdLineStyleNone;
Document.Paragraphs.Add;
Document.Paragraphs.Add;
Document.Paragraphs.Add;
Range := Document.Paragraphs.Item(8).Range;
Range.Font.Color := clBlack;
//tira o negrito
Range.Bold := 0;
//ajusta o alinhamento
Range.ParagraphFormat.Alignment := wdAlignParagraphRight;
Range.Text := Trim(dmMaster.IBDFilialCIDADE.Value) + ´/´ +
dmMaster.IBDFilialESTADO.Value + ´, ´ +
Trim(Copy(FormatDateTime(´dddddd´, Date), Pos(´,´,
FormatDateTime(´dddddd´, Date)) + 1, Length(FormatDateTime(´dddddd´,
Date))));
Document.Paragraphs.Add;
Document.Paragraphs.Add;
Document.Paragraphs.Add;
Range := Document.Paragraphs.Item(11).Range;
Range.ParagraphFormat.Alignment := wdAlignParagraphLeft;
Range.Text := ´A´;
Document.Paragraphs.Add;
Range := Document.Paragraphs.Item(12).Range;
Range.ParagraphFormat.Alignment := wdAlignParagraphLeft;
Range.Bold := 1;
//sublinhado
Range.Underline := 1;
Range.Text := Trim(dmMaster.IBDPedidoNOMECLIENTE.Value);
Document.Paragraphs.Add;
Range := Document.Paragraphs.Item(13).Range;
//tira o sublinhado
Range.Underline := 0;
Range.Text := ´A/C: Sr. ´ + Trim(dmMaster.IBDClientesCONTATO.Value);
Document.Paragraphs.Add;
Range := Document.Paragraphs.Item(14).Range;
Range.Bold := 0;
Range.Text := ´Ref.: Pedido´;
Document.Paragraphs.Add;
Document.Paragraphs.Add;
Document.Paragraphs.Add;
Document.Paragraphs.Add;
Document.Paragraphs.Add;
Range := Document.Paragraphs.Item(19).Range;
Range.Bold := 1;
Range.Text := ´FORNECEDOR: ´ + dmMaster.IBDPedidoNOMEFORNECEDOR.Value;
Document.Paragraphs.Add;
Range := Document.Paragraphs.Item(20).Range;
Range.Text := ´PED.: ´ + IntToStr(dmMaster.IBDPedidoPEDIDO.Value) + ´/´ +
FormatDateTime(´yy´, Date);
Range.Underline := 1;
dmMaster.IBDItemPedido.First;
iItem := 20;
sPrazo := ´´;
while not dmMaster.IBDItemPedido.Eof do
begin
Inc(iItem);
if dmMaster.IBDPrazosPedido.IsEmpty then
sPrazo := ´À VISTA´
else
begin
dmMaster.IBDPrazosPedido.First;
while not dmMaster.IBDPrazosPedido.Eof do
begin
sPrazo := sPrazo + IntToStr(dmMaster.IBDPrazosPedidoPRAZO.Value) + ´/ ´;
dmMaster.IBDPrazosPedido.Next;
end;
sPrazo := sPrazo + ´ DIAS´;
end;
Document.Paragraphs.Add;
Range := Document.Paragraphs.Item(iItem).Range;
Range.Underline := 0;
Range.Text := ´Quant.: ´ + Format(´¬6.6s´,
[FloatToStr(dmMaster.IBDItemPedidoQUANTIDADE.Value)]) + ´ ´ +
Format(´¬-3.3s´, [dmMaster.IBDItemPedidoEMBALAGEM.Value])
+ ´ ´ + Format(´¬-40.40s´, [Trim(dmMaster.IBDItemPedidoDESCRICAO.Value)])
+ ´ - PREÇO: ´ + Format(´¬12.12s´, [FormatFloat(´#,0.00´,
dmMaster.IBDItemPedidoVALORUNITARIO.Value)]) + ´ - PRAZO: ´ + sPrazo;
dmMaster.IBDItemPedido.Next;
end;
if dmMaster.IBDPedidoOBSERVACAO.Value <> ´´ then
begin
Document.Paragraphs.Add;
Inc(iItem);
Range := Document.Paragraphs.Item(iItem).Range;
Range.Text := ´OBS: ´ + DBMemo1.Lines[0];
for iLinhasOBS := 1 to (DBMemo1.Lines.Count - 1) do
begin
Document.Paragraphs.Add;
Inc(iItem);
Range := Document.Paragraphs.Item(iItem).Range;
Range.Text := ´ ´ + DBMemo1.Lines[iLinhasOBS];
end;
end;
Document.Paragraphs.Add;
Inc(iItem);
Document.Paragraphs.Add;
Inc(iItem);
Document.Paragraphs.Add;
Inc(iItem);
Document.Paragraphs.Add;
Inc(iItem);
Range := Document.Paragraphs.Item(iItem).Range;
Range.Bold := 0;
Range.Text := ´Sendo o que tínhamos para o momento´;
Document.Paragraphs.Add;
Inc(iItem);
Document.Paragraphs.Add;
Inc(iItem);
Document.Paragraphs.Add;
Inc(iItem);
Range := Document.Paragraphs.Item(iItem).Range;
Range.Text := ´Atenciosamente´;
Document.Paragraphs.Add;
Inc(iItem);
Range := Document.Paragraphs.Item(iItem).Range;
Range.Text := Trim(dmMaster.IBDFilialFANTASIA.Value);
// salvar o arquivo gerado
if not DirectoryExists(´C:\Temp´) then
CreateDir(´C:\Temp´);
Document.SaveAs(WideString(´c:\temp\teste.doc´), 0);
Document.SaveAs(FileName := WideString(´c:\temp\teste.doc´),
FileFormat := 0, //formato nativo do word
SaveNativePictureFormat := 1); // true
end;
no lugar desse emoticon é o número ´8´
GOSTEI 0
Guinther
19/02/2005
// Exportando DataSet para Word
{ Declare ComObj no uses }
procedure ExpDOC(DataSet: TDataSet; Arq: string);
var
A,D,T,R: Variant;
Row,Column: integer;
begin
A := CreateOleobject(´Word.basic´);
A.Appshow;
D := CreateOleobject(´Word.Document´);
R := D.Range;
T := D.tables.Add(
D.Range,1,DataSet.FieldCount);
for Column:=0 to DataSet.FieldCount-1 do
T.cell(1,Column+1).range.text:=
DataSet.Fields.Fields[Column].FieldName;
Row := 2;
DataSet.First;
while not DataSet.Eof do begin
T.Rows.Add;
for Column:=0 to DataSet.FieldCount-1 do
T.cell(Row,Column+1).range.text :=
DataSet.Fields.Fields[Column].DisplayText;
DataSet.next;
Row := Row+1;
end;
D.SaveAs(Arq);
D := unAssigned;
end;
{ Exemplo de utilização }
ExpDOC(ClientDataSet1,´teste.doc´);
{ Declare ComObj no uses }
procedure ExpDOC(DataSet: TDataSet; Arq: string);
var
A,D,T,R: Variant;
Row,Column: integer;
begin
A := CreateOleobject(´Word.basic´);
A.Appshow;
D := CreateOleobject(´Word.Document´);
R := D.Range;
T := D.tables.Add(
D.Range,1,DataSet.FieldCount);
for Column:=0 to DataSet.FieldCount-1 do
T.cell(1,Column+1).range.text:=
DataSet.Fields.Fields[Column].FieldName;
Row := 2;
DataSet.First;
while not DataSet.Eof do begin
T.Rows.Add;
for Column:=0 to DataSet.FieldCount-1 do
T.cell(Row,Column+1).range.text :=
DataSet.Fields.Fields[Column].DisplayText;
DataSet.next;
Row := Row+1;
end;
D.SaveAs(Arq);
D := unAssigned;
end;
{ Exemplo de utilização }
ExpDOC(ClientDataSet1,´teste.doc´);
GOSTEI 0