![]() |
daten vom Programm nach Word oder Excel übertragen
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 |
Re: daten vom Programm nach Word oder Excel übertragen
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:
Beide Codefragmente habe ich bei mir im Einsatz, deshalb daher evtl. noch ein paar spezielle Dinge wie TAG Interpret usw.
//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) Mit dieser Funktion lese ich TAGs von MP3s aus und exportiere sie ins Excel Gruß Padavan |
Re: daten vom Programm nach Word oder Excel übertragen
Oder hast du das Formular als Fertige DOC Datei gespeichert und willst die Daten da eintragen?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz