AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) daten vom Programm nach Word oder Excel übertragen
Thema durchsuchen
Ansicht
Themen-Optionen

daten vom Programm nach Word oder Excel übertragen

Ein Thema von geisi · begonnen am 16. Aug 2005 · letzter Beitrag vom 16. Aug 2005
Antwort Antwort
geisi

Registriert seit: 19. Sep 2003
449 Beiträge
 
Delphi 6 Professional
 
#1

daten vom Programm nach Word oder Excel übertragen

  Alt 16. Aug 2005, 12:25
ich möchte ein kundenverwaltungsprogramm schreiben! zum ausdrucken habe ich ein Formular in Word und in Excel erstellt. ich möchte irgendwie die daten des kunden von meinem programm in das Formular bringen.

Ich habe das Formular unter Word gemacht, damit ich das Firmenlogo, und ein paar Umrandungen hinzufügen kann.

hat jemand eine idee, wie man so etwas implementiert?

danke im voraus
mfg geisi
  Mit Zitat antworten Zitat
padavan

Registriert seit: 12. Jan 2005
271 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: daten vom Programm nach Word oder Excel übertragen

  Alt 16. Aug 2005, 12:58
Damit ich es verstehe,
von Excel/ Word in dein Programm oder umgekehrt.

Beides dürfte auf jeden Fall mit OLE funktionieren.

Für den Fall, dass du von deinem Programm was ins Excel exportieren möchtest, hier mein Beispiel
(setzt eine funktionsfähige Installation von Excel voraus)

Einfachere Variante...

Delphi-Quellcode:
implementation
{$R *.dfm}
var Excel : Variant;


procedure TForm1.export_xls;
var i: integer;
    Attribute: Tsearchrec;
    zeile,spalte : Integer;
    app : variant;
begin
(* Excel export - Drawgrid formatieren *)
  stringgrid1.cells[1,0] := 'Interpret';
  stringgrid1.cells[2,0] := 'Title';
  stringgrid1.cells[3,0] := 'Genre';
  stringgrid1.cells[4,0] := 'Album';
  stringgrid1.cells[5,0] := 'Year';
  stringgrid1.cells[6,0] := 'Filename';
  screen.cursor := crhourglass;
  for zeile := 1 to listbox1.Count do stringgrid1.cells[0,zeile]:= Format('%d',[zeile]);
  try
    i := listbox1.Count;
    repeat
      if (getasynckeystate(vk_escape) <> 0) then break;
      Stringgrid1.Cells[1,i] := TAGInterpret;
      Stringgrid1.Cells[2,i] := TAGtitel;
      Stringgrid1.Cells[3,i] := TAGGenre;
      Stringgrid1.Cells[4,i] := TAGAlbum;
      Stringgrid1.Cells[5,i] := TAGYear;
      Stringgrid1.Cells[6,i] := Listbox1.Items[i - 1];
      i := i - 1
    until i = 0;

    try
      Excel := CreateOleObject('Excel.Application');
    except
      screen.cursor := crdefault;
      Exit;
    end;
    Excel.Workbooks.Add;
    For zeile := 1 to listbox1.Count + 1 do // so evtl. gar nicht nötig?!
      for spalte := 1 to 7 do
          Excel.Cells[zeile, spalte].Value := stringgrid1.cells[spalte-1,zeile-1];
    screen.cursor := crdefault;

    Excel.Visible := true; { für die testphase sinnvoll }
    (* Excel beenden ... *)
    // Excel.ActiveWorkBook.Saved := True; // ... verhindert unliebsame Dialoge
    // Excel.Workbooks.Close;
    except
      screen.cursor := crdefault;
      Showmessage(action_failed);
    end;
end;


oder die etwas komplizirtere mit scheinbaren Geschwindigkeitsvorteilen...

Delphi-Quellcode:
//Hilfsfunktion für StringGridToExcelSheet
function RefToCell(RowID, ColID: Integer): string;
var
  ACount, APos: Integer;
begin
  ACount := ColID div 26;
  APos := ColID mod 26;
  if APos = 0 then
  begin
    ACount := ACount - 1;
    APos := 26;
  end;

  if ACount = 0 then
     Result := Chr(Ord('A') + ColID - 1) + IntToStr(RowID);

  if ACount = 1 then
     Result := 'A' + Chr(Ord('A') + APos - 1) + IntToStr(RowID);

  if ACount > 1 then
     Result := Chr(Ord('A') + ACount - 1) + Chr(Ord('A') + APos - 1) +
     IntToStr(RowID);
end;
//StringGrid-Inhalt nach Excel exportieren
function StringGridToExcelSheet(Grid: TStringGrid; SheetName, FileName: string;
  ShowExcel: Boolean): Boolean;
const
  xlWBATWorksheet = -4167;
var
  SheetCount, SheetColCount, SheetRowCount, BookCount: Integer;
  XLApp, Sheet, Data: OLEVariant;
  I, J, N, M: Integer;
  SaveFileName : String;
begin
  screen.cursor := crhourglass;
  //notwendige Sheetanzahl feststellen
  SheetCount := (Grid.ColCount div 256) + 1;
  if Grid.ColCount mod 256 = 0 then
     SheetCount := SheetCount - 1;
  //notwendige Bookanzahl feststellen
  BookCount := (Grid.RowCount div 65536) + 1;
  if Grid.RowCount mod 65536 = 0 then
     BookCount := BookCount - 1;

  //Create Excel-OLE Object
  Result := False;
  XLApp := CreateOleObject('Excel.Application');
// XLApp := GetActiveOleObject('Excel.Application');

  try
    //Excelsheet anzeigen
    if ShowExcel = false then
       XLApp.Visible := False
    else
       XLApp.Visible := True;
    //Workbook hinzufügen
    for M := 1 to BookCount do
    begin
        XLApp.Workbooks.Add(xlWBATWorksheet);
        //Sheets anlegen
        for N := 1 to SheetCount - 1 do
        begin
          XLApp.Worksheets.Add;
        end;
    end;
    //Sheet ColAnzahl feststellen
    if Grid.ColCount <= 256 then
       SheetColCount := Grid.ColCount
    else
       SheetColCount := 256;
    //Sheet RowAnzahl feststellen
    if Grid.RowCount <= 65536 then
       SheetRowCount := Grid.RowCount
    else
       SheetRowCount := 65536;

    //Sheets befüllen
    for M := 1 to BookCount do
    begin
        for N := 1 to SheetCount do
        begin
          //Daten aus Grid holen
          Data := VarArrayCreate([1, Grid.RowCount, 1, SheetColCount], varVariant);
          for I := 0 to SheetColCount - 1 do
            for J := 0 to SheetRowCount - 1 do
              if ((I+256*(N-1)) <= Grid.ColCount) and ((J+65536*(M-1)) <= Grid.RowCount) then
                Data[J + 1, I + 1] := Grid.Cells[I+256*(N-1), J+65536*(M-1)];

          XLApp.Worksheets[N].Select;
          XLApp.Workbooks[M].Worksheets[N].Name := SheetName + IntToStr(N);
          //Zellen als String Formatieren
          XLApp.Workbooks[M].Worksheets[N].Range[RefToCell(1, 1), RefToCell(SheetRowCount,
            SheetColCount)].Select;
          XLApp.Selection.NumberFormat := '@';
          XLApp.Workbooks[M].Worksheets[N].Range['A1'].Select;
          //Daten dem Excelsheet übergeben
          Sheet := XLApp.Workbooks[M].WorkSheets[N];
          Sheet.Range[RefToCell(1, 1), RefToCell(SheetRowCount,SheetColCount)].Value := Data;
        end;
    end;
    //Save Excel Worksheet
    try
      for M := 1 to BookCount do
      begin
          SaveFileName := Copy(FileName,1,Pos('.',FileName)-1) + IntToStr(M) +
          Copy(FileName,Pos('.',FileName),
          Length(FileName)-Pos('.',FileName)+1);
          XLApp.Workbooks[M].SaveAs(SaveFileName);
      end;
      Result := True;
    except
      // Error?
    end;
  finally
    //Excel beenden
    if (not VarIsEmpty(XLApp)) and (ShowExcel = false) then
    begin
      XLApp.DisplayAlerts := False;
      XLApp.Quit;
      XLAPP := Unassigned;
      Sheet := Unassigned;
    end;
  end;
  screen.cursor := crdefault;
end;


//Aufruf
StringGridToExcelSheet(StringGrid1, 'Mappe1', Edit1.text,True)
Beide Codefragmente habe ich bei mir im Einsatz, deshalb daher evtl. noch ein paar spezielle Dinge wie TAG Interpret usw.
Mit dieser Funktion lese ich TAGs von MP3s aus und exportiere sie ins Excel

Gruß
Padavan
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

Re: daten vom Programm nach Word oder Excel übertragen

  Alt 16. Aug 2005, 13:39
Oder hast du das Formular als Fertige DOC Datei gespeichert und willst die Daten da eintragen?
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz