Avatar billede assassin Juniormester
16. december 2002 - 14:09 Der er 10 kommentarer og
1 løsning

Flet med MS Word

Jeg har oprettet et word dokument og kan også sagtens skrive til dokumentet.

Nu er mit spørgsmål:

Hvordan kan jeg styre placeringen af teksten?

f.eks. hvis det åbne word dokument er et skema, som skal udfyldes.

Håber det er forståeligt.

Jeg har søgt på eksperten, men kan ikke finde noget.
Avatar billede nca Juniormester
17. december 2002 - 08:16 #1
Du skal lave en skabelon i Word. I denne skabelon skal du indsætte tekst de steder, hvor dit program skal skrive noget. Herefter kan du fra Delphi bruge kommandoen "ReplaceText" for at få din variable sat ind et bestemt sted i dokumentet.
Avatar billede assassin Juniormester
17. december 2002 - 09:03 #2
Jeg opretter mit dokument på følgende måde:

procedure TForm3.Button1Click(Sender: TObject);
var
  Test, Test1  : Integer;
  AString      : Variant;
  WordDokument : String;
begin
  if OpenDialog.Execute then
  begin
    WordDokument := Opendialog.FileName;
    MSWord := CreateOLEObject('Word.Application');    //Word 8
    MSWord.Documents.Open(FileName:=Opendialog.FileName, ReadOnly:=True);
    MSWord.Visible := 1;  // Hvis MSWord.Visible = 1 så bliver det vist
  end;
end;

>>nca: Kan du fortælle mig, hvor jeg skal indsætte ReplaceText?
Avatar billede assassin Juniormester
17. december 2002 - 09:04 #3
Kan det ikke lade sig gøre at lave en kommentar, uden at skulle accepter, eller afvise svaret?
Avatar billede nca Juniormester
17. december 2002 - 11:21 #4
Prøv at ta' et kik på denne procedure:

var
Template, ItemIndex, VarFalse, Placement, Format: Olevariant;
R: Range;
Rnge, Searchtext: OleVariant;
begin
  wordapplication1.connect;
  wordapplication1.visible:=true;
  VarFalse:=False;
  Template:='Virusrapport.dot';
  WordApplication1.Caption := 'Delphi virusrapport';
  WordApplication1.Documents.Add(Template,Varfalse);
  WordApplication1.Options.CheckSpellingAsYouType := False;
  WordApplication1.Options.CheckGrammarAsYouType := False;
  ItemIndex:=1;
  WordDocument1.ConnectTo(WordApplication1.Documents.Item(ItemIndex));
  R:= WordDocument1.Range;
  If not ReplaceText('<Måned>',maaned,R) then
    ShowMessage('Kan ikke indsætte månedsnavn i rapporten!');
  If not ReplaceText('<År>',Aar,R) then
    ShowMessage('Kan ikke indsætte årstallet i rapporten!');
  If not ReplaceText('<antal>',IntToStr(Alarmer),R) then
    ShowMessage('Kan ikke indsætte antal vira i rapporten!');
  Placement:=wdInLine;
  Format := wdPasteBitmap;
  R:=Worddocument1.Paragraphs.Item(7).Range;
  Clipboard.Assign(Image1.Picture.Bitmap);
  R.PasteSpecial(EmptyParam, EmptyParam, Placement,EmptyParam, Format, EmptyParam, EmptyParam);
  //Worddocument1.InlineShapes.AddPicture('C:\Dump1.bmp',EmptyParam, EmptyParam, R);    }
  R:=Worddocument1.Paragraphs.Item(12).Range;
  Clipboard.Assign(Image2.Picture.Bitmap);
  R.PasteSpecial(EmptyParam, EmptyParam, Placement,EmptyParam, Format, EmptyParam, EmptyParam);
end;
Avatar billede assassin Juniormester
17. december 2002 - 11:59 #5
Jeg kan godt nok ikke få det til at virke.

jeg får fejlen undeclared identifier.

Der må være en 'pænere' måde at gøre det på.

Jeg har prøvet at søge på replaceText i hjælpen  - uden held.
Avatar billede nca Juniormester
17. december 2002 - 12:21 #6
Har du oprettet en ny skabelon i Word? Du kan se, at jeg bruger én der hedder VirusRapport.doc.
Inde i skabelonen har jeg skrevet <Måned> (Husk <>). Så laver jeg ReplaceText('<Måned>',maaned,R), hvor maaned er en strengvariable fra Delphi, som altså bliver indsat på det sted, hvor der står <Måned> i skabelonen. Jeg kan ikke huske hvad R står for.
Avatar billede assassin Juniormester
17. december 2002 - 12:35 #7
Ja, det er jeg med på, men jeg får som sagt fejlen undeclared identifier ved replaceText.

P.S: R:= WordDocument1.Range;
Avatar billede nca Juniormester
17. december 2002 - 13:01 #8
Jeg ved ikke hvad 'undeclared identifier' hentyder til, måske din variabel.
Prøv evt. disse link:
http://hometown.aol.com/charliecal/TechPapers/DelphiWord.htm
http://www.inprise.nl/delphi/papers/microexcel/me3.html
Avatar billede assassin Juniormester
19. december 2002 - 08:56 #9
Jeg kan ikke finde noget om placering af tekst i word-dokument i ovenstående artikler.

Er der ikke nogen, som har et bud på hvordan det skal gøres.

Jeg kan som sagt ikke få replacetext til at virke.

Jeg lader spørgsmålet være åbent til imorgen, hvorefter det vil blive lukket.
Avatar billede assassin Juniormester
19. december 2002 - 15:53 #10
Jeg har selv fundet ud af det:

Der er oprettet 3 bookmarks i worddokumentet: BmNavn, BmAdresse og BmPostNr.

Nu bliver teksten lige nøjagtigt placeret hvor jeg vil have dem.

>>nca, du får alligevel points, som tak for hjælpen.

Det er jo ved at være jul :-)

procedure TForm3.Button1Click(Sender: TObject);
var
  WordDokument : String;
  Range :Variant;
begin
  if OpenDialog.Execute then
  begin
    WordDokument := Opendialog.FileName;
    MSWord := CreateOLEObject('Word.Application');    //Word 8
    MSWord.Documents.Open(FileName:=Opendialog.FileName, ReadOnly:=False);
    MSWord.Visible := 1;  // MSWord bliver vist

    // Denne metode kræver at der i word dokumentet er oprettet bookmarks.
    MSWord.ActiveDocument.Bookmarks.Item('BmNavn').Select;
    Range := MsWord.Selection.Range;
    Range.insertAfter('Personens navn');

    MSWord.ActiveDocument.Bookmarks.Item('BmAdresse').Select;
    Range := MsWord.Selection.Range;
    Range.insertAfter('Personens adresse');
    MSWord.ActiveDocument.Bookmarks.Item('BmPostNr').Select;
    Range := MsWord.Selection.Range;
    Range.insertAfter('Personens postnummer og by');
  end;
end;
Avatar billede nca Juniormester
19. december 2002 - 15:55 #11
Jamen jeg takker.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester