Word belgesinin istenilen satırına bilgi yazmak.

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
ALUCARD
Üye
Mesajlar: 1270
Kayıt: 27 Eyl 2003 10:12
Konum: Samsun
İletişim:

Re: Word belgesinin istenilen satırına bilgi yazmak.

Mesaj gönderen ALUCARD »

arkadaşlar konu aynı olduğu için yeni başlık açmak istemiyorum.

Word dosyasına sekmeler oluşturuyorum. fakat bu dosyayı bilgisayarda saklamak istemiyorum. word dosyasını xml e dönüştürüp vt de saklamak istiyorum. sonrasında tekrar doc olarak kaydedip göstermek istiyorum.

nasıl yapacağım ile ilgili yardım ederseniz sevinirim.
بِسْمِ اللهِ الرَّحْمنِ الرَّحِيمِ
Forumun 365. Üyesi
Hiç Bir Şey İnsan Kadar Yükselemez ve Alçalamaz

Erkan ÇAĞLAR
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Word belgesinin istenilen satırına bilgi yazmak.

Mesaj gönderen mrmarman »

Merhaba.
- Aşağıda hepsinin bir arada olduğu bir örnek hazırladım. BLOB hakkında sorulabilecek benzer sorular, farklı veritabanları da olsa aynı şekilde çözümlenebilmektedir. :idea:

(1) WORD'den XML olarak kaydedeceğiz. Elimizdeki malzeme bunu gerektiriyor çünkü.
(2) Veritabanının BLOB alanlarından birine yerleştirecek ve kaydedeceğiz...
(3) Veritabanın'dan arama yapıp alacak ve WORD ile açacağız...

- Sana PDF, XPS ve XML olmak üzere (3) alternatifli bir örnek hazırladım.
// Const ile yazdığım rakamlar bu linkteki MSDN'den aldığım referanslar.
// Burası WORD'ü XML olarak kaydetmen için aşağıdaki satırı kod içerisinde göreceksin...
Doc.SaveAs( ChangeFileExt(WordDosya, '.XML'), wdExportFormatXML );

Kod: Tümünü seç

Const
  wdExportFormatPDF   = 17;
  wdExportFormatXPS   = 18;
  wdExportFormatXML   = 19;
var
  Word, Doc: Variant;
  WordDosya : String;
begin
  WordDosya := ExtractFilePath(Application.Exename) + 'word.doc';
  Word := ComObj.CreateOleObject('Word.Application');
    Word.Documents.Add;
    Doc  := Word.ActiveDocument;
      Doc.ActiveWindow.Selection.TypeText('Test Ediyorum... ĞÜŞİÖÇIğüşiöçı...') ;
    Doc.SaveAs( ChangeFileExt(WordDosya, '.XML'), wdExportFormatXML );
  Word.Quit( False );
  Doc  := UnAssigned;
  Word := UnAssigned;
end;
// Burası bu XML dosyasını veritabanındaki BLOB alana yerleştirme için aşağıdaki satırı kod içerisinde göreceksin...
Parametre olarak : Parameters.ParamByName('O_WordXML').LoadFromFile(XMLDosya, ftBLOB);
Field Olarak : TBlobField( FieldByName('O_WordXML') ).LoadFromFile(XMLDosya);

Kod: Tümünü seç

Var
  WordDosya,
  Ad, Soyad, XMLDosya : String;
begin
  WordDosya := ExtractFilePath(Application.Exename) + 'word.doc';

  Ad        := 'Muharrem';
  Soyad     := 'ARMAN';
  XMLDosya  := ChangeFileExt(WordDosya, '.XML');

  With TAdoQuery.Create(nil) do
  begin
    Try
      Connection := AdoConnection1;
      SQL.Clear; // Create edildiğinden gerekli değil ama alışkanlık kaybolmasın...
      SQL.Add('INSERT INTO TestTable');
      SQL.Add('( O_Adi, O_Soyadi, O_WordXML ) ');
      SQL.Add('  VALUES  ');
      SQL.Add('( :O_Adi, :O_Soyadi, :O_WordXML ) ');
      Parameters.ParamByName('O_Adi').Value    := Ad;
      Parameters.ParamByName('O_Soyadi').Value := Soyad;
      Parameters.ParamByName('O_WordXML').LoadFromFile(XMLDosya, ftBLOB);
      ExecSQL;
    Finally
      Free;
    End;
  end;
end;
// Bu da son olarak geri okumak için aşağıdaki satırı kod içerisinde göreceksin...
TBlobField( FieldByName('O_WordXML') ).SaveToFile(XMLDosya);

Kod: Tümünü seç

Var
  Word : Variant;
  Ad, Soyad, XMLDosya : String;
begin
  Ad        := 'Muharrem';
  Soyad     := 'ARMAN';
  XMLDosya  := ExtractFilePath(Application.Exename) + 'word2.xml';

  With TAdoQuery.Create(nil) do
  begin
    Try
      Connection := ADOConnection1;
      SQL.Clear; // Create edildiğinden gerekli değil ama alışkanlık kaybolmasın...
      SQL.Add('SELECT * FROM TestTable');
      SQL.Add('WHERE O_Adi = :O_Adi AND O_Soyadi = :O_Soyadi');
      SQL.Add('ORDER BY KaySiraNo DESC');
      Parameters.ParamByName('O_Adi').Value    := Ad;
      Parameters.ParamByName('O_Soyadi').Value := Soyad;
      Active := True;
      if NOT EOF then
      begin
        TBlobField( FieldByName('O_WordXML') ).SaveToFile(XMLDosya);
         if FileExists( XMLDosya ) then begin
           Word := ComObj.CreateOleObject('Word.Application');
           Try
             Word.Documents.Open( XMLDosya );
             Word.Visible := True;
           Finally
             Word := UnAssigned;
           End;
         end;
      end;
      Active := False;
    Finally
      Free;
    End;
  end;
end;
Resim
Resim ....Resim
Kullanıcı avatarı
ALUCARD
Üye
Mesajlar: 1270
Kayıt: 27 Eyl 2003 10:12
Konum: Samsun
İletişim:

Re: Word belgesinin istenilen satırına bilgi yazmak.

Mesaj gönderen ALUCARD »

hocam dediğiniz işlemleri yapıyorum ama word sayfasını boş kaydediyor.

Kaydetmek İçin

Kod: Tümünü seç

procedure TForm1.Button3Click(Sender: TObject);
Const
  wdExportFormatPDF   = 17;
  wdExportFormatXPS   = 18;
  wdExportFormatXML   = 19;
var
  Word, Doc: Variant;
  WordDosya : String;
  Ad, Soyad, XMLDosya : String;

  begin
  // WORD DOSYASINI XMLE ÇEVİR
  WordDosya := FileOpenDialogWord.FileName;
  Word := ComObj.CreateOleObject('Word.Application');
    Word.Documents.Add;
    Doc  := Word.ActiveDocument;
    Doc.SaveAs( ChangeFileExt(WordDosya, '.XML'), wdExportFormatXML );
   Word.Quit( False );
  Doc  := UnAssigned;
  Word := UnAssigned;
  // XML DOSYASINI VT YE KAYDET
  XMLDosya  := ChangeFileExt(WordDosya, '.XML');
  memo1.Lines.LoadFromFile(XMLDosya);

  IBDSablonlar.Edit;
  IBDSablonlarSABLON.Value := MEMO1.Text;;
  IBDSablonlarDOSYAADI.Value := WordDosya;
  IBDSablonlar.Post;
  DeleteFile(XMLDosya)

end;
Geri Çıkarmak için

Kod: Tümünü seç

procedure TForm1.Button4Click(Sender: TObject);
Var
  Word : Variant;
  Ad, Soyad, XMLDosya : String;
begin
  Ad        := 'Erkan ';
  Soyad     := 'ÇAĞLAR';
  XMLDosya  := ExtractFilePath(Application.Exename) + 'word.doc';

    Try
        memo1.Text := IBDSablonlarSABLON.Value;
        memo1.Lines.SaveToFile(XMLDosya);
         if FileExists( XMLDosya ) then begin
           Word := ComObj.CreateOleObject('Word.Application');
           Try
             Word.Documents.Open( XMLDosya );
             Word.Visible := True;
           Finally
             Word := UnAssigned;
           End;
         end;
    Finally

    End;
  end;
buda tablom (belki burda bi yanlışlık vardır.)

Kod: Tümünü seç

CREATE TABLE TBLSABLONLAR (
    SABLONID    INTEGER NOT NULL,
    SABLONADI   VARCHAR(50),
    SABLONTURU  VARCHAR(50),
    SABLON      BLOB SUB_TYPE 1 SEGMENT SIZE 500,
    DOSYAADI    VARCHAR(200)
);
بِسْمِ اللهِ الرَّحْمنِ الرَّحِيمِ
Forumun 365. Üyesi
Hiç Bir Şey İnsan Kadar Yükselemez ve Alçalamaz

Erkan ÇAĞLAR
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Word belgesinin istenilen satırına bilgi yazmak.

Mesaj gönderen mrmarman »

Word dökümanını açmıyor, boş bir döküman ekliyorsun ve o boş olanı kaydediyorsun. Dolayısı ile boş döküman dediğin sorunla karşılaşıyorsun.

Kod: Tümünü seç

    Word.Documents.Add;
olan yere dikkatini çekerim 8)
Resim
Resim ....Resim
Kullanıcı avatarı
ALUCARD
Üye
Mesajlar: 1270
Kayıt: 27 Eyl 2003 10:12
Konum: Samsun
İletişim:

Re: Word belgesinin istenilen satırına bilgi yazmak.

Mesaj gönderen ALUCARD »

Kod: Tümünü seç

 
  .
  .
  .
   WordDosya := FileOpenDialogWord.FileName;
   Word := ComObj.CreateOleObject('Word.Application');
   Word.Documents.Open(WordDosya);
   Doc  := Word.ActiveDocument;
   Doc.SaveAs( ChangeFileExt(WordDosya, '.XML'), wdExportFormatXML );
  . 
  .
  .
   
kodu bu şekilde yazınca çalıştı. teşekkürler hocam
بِسْمِ اللهِ الرَّحْمنِ الرَّحِيمِ
Forumun 365. Üyesi
Hiç Bir Şey İnsan Kadar Yükselemez ve Alçalamaz

Erkan ÇAĞLAR
Cevapla