GARANTIR DESCONTO

Fórum criar/gerar documento word #269296

19/02/2005

0

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


Lindomar.des

Lindomar.des

Responder

Posts

19/02/2005

Massuda

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.


Responder

Gostei + 0

19/02/2005

Lindomar.des

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.


Responder

Gostei + 0

19/02/2005

M

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.


Responder

Gostei + 0

19/02/2005

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;


Responder

Gostei + 0

19/02/2005

Lindomar.des

[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;


no lugar desse emoticon é o número ´8´


Responder

Gostei + 0

19/02/2005

Guinther

// 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´);


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar