AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Excel Bordereinstellungen

Ein Thema von ErdNussLocke · begonnen am 17. Okt 2008 · letzter Beitrag vom 14. Nov 2008
Antwort Antwort
Seite 1 von 3  1 23      
ErdNussLocke

Registriert seit: 30. Jan 2006
104 Beiträge
 
#1

Excel Bordereinstellungen

  Alt 17. Okt 2008, 11:03
Hi,

ich verwende diesen Code aus der DH, um die Daten eines Stringgrid nach Excel zu exportieren:

Delphi-Quellcode:
//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
  //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');
  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) +
          Copy(FileName,Pos('.',FileName),
          Length(FileName)-Pos('.',FileName)+1);
          if fileexists(pfadE+Form1.EExportname.text+'.xls')=true
           then deletefile(pfadE+Form1.EExportname.text+'.xls');
          XLApp.Workbooks[M].SaveAs(SaveFileName);
      end;
      Result := True;
    except
      // Error?
    end;
  finally
    //Excel beenden
      XLApp.DisplayAlerts := False;
      XLApp.Quit;
      XLAPP := Unassigned;
      Sheet := Unassigned;
  end;
end;
Das funktoniert auch wunderbar, jetzt möchte ich allerdings, dass um jede Zelle ein vollständige Rahmen gezeichnet wird
(Es soll beim Ausdrucken eine schöne Tabelle sein)
Hab schon hier gelesen
http://www.delphipraxis.net/internal...t=excel+border
aber hab es nicht geschafft es zu übertragen (verwende Excel 2007)
Kann mir wer helfen?
Danke schonmal,

MfG
ErdNussLocke
  Mit Zitat antworten Zitat
ErdNussLocke

Registriert seit: 30. Jan 2006
104 Beiträge
 
#2

Re: Excel Bordereinstellungen

  Alt 17. Okt 2008, 11:43
Sorry, eigentlich sollte das in "Object-Pascal / Delphi-Language", vllt kann es ja wer verschieben
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#3

Re: Excel Bordereinstellungen

  Alt 17. Okt 2008, 12:32
Hallo,

hab' mal mit Excel ein Makro aufgezeichnet.
Code:
Sub Makro1()
    Cells.Select
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
End Sub
Das solltest Du nach Delphi übersetzt bekommen.
  Mit Zitat antworten Zitat
ErdNussLocke

Registriert seit: 30. Jan 2006
104 Beiträge
 
#4

Re: Excel Bordereinstellungen

  Alt 20. Okt 2008, 09:26
Hi,

danke schonmal für die Antwort!
Aber muss ich dazu noch eine uses eintragen? Weil xldiagonal etc. kennt er nicht

MfG
ErdNussLocke
  Mit Zitat antworten Zitat
Benutzerbild von Reinhardtinho
Reinhardtinho

Registriert seit: 26. Feb 2007
411 Beiträge
 
Delphi 5 Enterprise
 
#5

Re: Excel Bordereinstellungen

  Alt 20. Okt 2008, 09:35
Bei mir stehen die Werte in der Excel97-Unit. Du musst mal gucken, was bei dir drauf ist, könnte auch Excel2000 oder ExcelXP heißen.
Ich habe viel von meinem Geld für Alkohol, Weiber und schnelle Autos ausgegeben ... Den Rest habe ich einfach verpraßt.

George Best - 22.05.1946 - 25.11.2005 - nordirischer Fußballspieler
  Mit Zitat antworten Zitat
ErdNussLocke

Registriert seit: 30. Jan 2006
104 Beiträge
 
#6

Re: Excel Bordereinstellungen

  Alt 20. Okt 2008, 09:46
Gut Mit ExcelXP hat er schonmal die Befehle, allerdings sagt er nun beim Exportieren, dass
die Methode 'Selection' vom Automatisierungsobjekt nicht unterstützt wird. Das sagt mir leider
nicht so viel :-/ (verwende Delphi 7, Excel 2007)

MfG`
ErdNussLocke
  Mit Zitat antworten Zitat
Benutzerbild von Reinhardtinho
Reinhardtinho

Registriert seit: 26. Feb 2007
411 Beiträge
 
Delphi 5 Enterprise
 
#7

Re: Excel Bordereinstellungen

  Alt 20. Okt 2008, 09:52
Zeig mal deinen Code, das Makro muss ja nach Delphi übersetzt werden.
Ich habe viel von meinem Geld für Alkohol, Weiber und schnelle Autos ausgegeben ... Den Rest habe ich einfach verpraßt.

George Best - 22.05.1946 - 25.11.2005 - nordirischer Fußballspieler
  Mit Zitat antworten Zitat
ErdNussLocke

Registriert seit: 30. Jan 2006
104 Beiträge
 
#8

Re: Excel Bordereinstellungen

  Alt 20. Okt 2008, 10:04
Inzwischen zeigt er "Mitglied nicht gefunden".

Delphi-Quellcode:
    //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;

//Macro

          XLApp.Selection.Borders(xlDiagonalDown).LineStyle := xlNone;
          XLApp.Selection.Borders(xlDiagonalUp).LineStyle := xlNone ;
          XLApp.Selection.Borders(xlEdgeLeft).LineStyle := xlContinuous;
          XLApp.Selection.Borders(xlEdgeLeft).Weight := xlThin;
          XLApp.Selection.Borders(xlEdgeLeft).ColorIndex := xlAutomatic;
          XLApp.Selection.Borders(xlEdgeTop).LineStyle := xlContinuous;
          XLApp.Selection.Borders(xlEdgeTop).Weight := xlThin;
          XLApp.Selection.Borders(xlEdgeTop).ColorIndex := xlAutomatic;
          XLApp.Selection.Borders(xlEdgeBottom).LineStyle := xlContinuous;
          XLApp.Selection.Borders(xlEdgeBottom).Weight := xlThin;
          XLApp.Selection.Borders(xlEdgeBottom).ColorIndex := xlAutomatic;
          XLApp.Selection.Borders(xlEdgeRight).LineStyle := xlContinuous;
          XLApp.Selection.Borders(xlEdgeRight).Weight := xlThin;
          XLApp.Selection.Borders(xlEdgeRight).ColorIndex := xlAutomatic;
          XLApp.Selection.Borders(xlInsideVertical).LineStyle := xlContinuous;
          XLApp.Selection.Borders(xlInsideVertical).Weight := xlThin;
          XLApp.Selection.Borders(xlInsideVertical).ColorIndex := xlAutomatic;
          XLApp.Selection.Borders(xlInsideHorizontal).LineStyle := xlContinuous;
          XLApp.Selection.Borders(xlInsideHorizontal).Weight := xlThin;
          XLApp.Selection.Borders(xlInsideHorizontal).ColorIndex := xlAutomatic;

//Macroende

          //Daten dem Excelsheet übergeben
          Sheet := XLApp.Workbooks[M].WorkSheets[N];
          Sheet.Range[RefToCell(1, 1), RefToCell(SheetRowCount,SheetColCount)].Value := Data;

        end;
    end;
  Mit Zitat antworten Zitat
ErdNussLocke

Registriert seit: 30. Jan 2006
104 Beiträge
 
#9

Re: Excel Bordereinstellungen

  Alt 27. Okt 2008, 11:41
Oje, war das jetzt so grob falsch, dass keiner mehr weiter mag
Sorry :-/ Aber vllt kann sich ja doch noch wer durchringen
  Mit Zitat antworten Zitat
Benutzerbild von Reinhardtinho
Reinhardtinho

Registriert seit: 26. Feb 2007
411 Beiträge
 
Delphi 5 Enterprise
 
#10

Re: Excel Bordereinstellungen

  Alt 27. Okt 2008, 11:43
An welcher Stelle kommt denn der Fehler?
Ich habe viel von meinem Geld für Alkohol, Weiber und schnelle Autos ausgegeben ... Den Rest habe ich einfach verpraßt.

George Best - 22.05.1946 - 25.11.2005 - nordirischer Fußballspieler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 13:14 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