Ausgabe in EXCEL-Mappen [Erledigt]

Einbindung von Office-Komponenten wie Word, Excel usw.

Moderator: Moderatoren

wolfgang

Ausgabe in EXCEL-Mappen [Erledigt]

Beitrag von wolfgang »

Hallo im Forum,

als wirklicher Gelegenheitsprogrammierer (weshalb ich auch schon lange nicht mehr aktiv im Forum war) stehe ich vor einem für mich fast schon unlösbarem Problem: statt viel Papier möchten meine Kunden monatliche Reports in Form einer EXCEL-Arbeitsmappe per e-mail geliefert haben. Als "schnelle" Lösung könnte ich natürlich meine Druckausgaben in eine Datei umleiten und die Daten händisch in EXCEL einfügen und die entsprechenden Zellen der Mappen mit diesem Arbeitsblatt verknüpfen. Somit müsste ich aber jeden Monat einiges an "Handarbeit" investieren.
Soweit ich aber bisher gelesen habe, sollte es mit Active-x auch eleganter und ohne Handeingriff machbar sein. Nur wie ich dazu den Einstieg finde, ist mir bisher noch nicht ganz klar:

dazu meine Bitte ans Forum:
- kennt ihr weiterführende links
- könnt ihr mir den Weg beschreiben, wie ich vorgehen muss
- habt ihr "Schnipsel" Programmcode der mir weiterhilft

vielen Dank im Voraus
wolfgang
Zuletzt geändert von wolfgang am Di, 09. Jun 2009 7:36, insgesamt 1-mal geändert.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Ausgabe in EXCEL-Mappen

Beitrag von brandelh »

Hi,

ich meine es gibt hier oder im neuen Excel Forum einiges. Auch im Source Verzeichnis von Xbase++ ab 1.90.xxx (ActiveX)

Eine andere Möglichkeit wurde hier auch beschrieben, einfach eine HTML Tabelle erstellen und als XLS abspeichern.
Das geht gut solange nur eine Tabelle (also ein Worksheet je Workbook) benötigt wird.
Wenn man dann etwas mehr Optik will, rate ich eine Mustervorlage mit Überschrift und Zeilenformatierung in Excel zu erstellen
und im HTML Format abzuspeichern. Die Überschriften stimmen ja schon, die Formatierung ist OK, somit muss man mit einem Texteditor nur noch die <TR><TD>... mit den Daten suchen.
Diese ersetzt man z.B. mit {{DATEN}} im Text und speichert das ganze als TXT Vorlage.
In deinem Programm liest du dann mit memoread() die Datei ein,
StrTran() die Daten einsetzen (Formatierung wie vorher)
und speicher als XLS ;-)
Gruß
Hubert
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2935
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Ausgabe in EXCEL-Mappen

Beitrag von Wolfgang Ciriack »

Hallo Namensvetter,
der einfachste Weg, mit dem du allerdings nichts formatieren etc. kannst, ist die Ergebnisse in eine DBF-Datei zu schreiben und die DBF-Datei in XLS umbenennen, dann wird die Datei problemlos mit Excel geöffnet.
Viele Grüße
Wolfgang
wolfgang

Re: Ausgabe in EXCEL-Mappen

Beitrag von wolfgang »

Hallo Hubert und Wolfgang,

Danke für eure schnellen Antworten.

Ich habe eine EXCEL-Datei mit einer Anzahl von 28 zu füllenden,formatierten Mappen verschiedenen Namens, an denen ich nichts ändern möchte.
Die entscheidende Frage: wie kommen die Daten in die richtige Zelle ?

Gruss wolfgang
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Ausgabe in EXCEL-Mappen

Beitrag von brandelh »

Hallo,

wenn du 1 Excel Datei mit 28 "Mappen" hast, geht nur der Weg über ActiveX.
Bei HTML hättest du zig Dateien in Unterverzeichnissen.
Allerdings lautet wenn ich es recht weiß der Excel Name genau umgehrt.
Ein XLS ist ein WorkBook (Arbeitsmappe) mit mehreren Tabellen (TAB-Seiten).

Wie man einzelne Zellen ausfüllt zeigt dir das Beispiel:
\xppw32\source\samples\activex\msexcel\excel2.prg

Bei einigen Zellen geht das ganz gut, wenn es mehr werden,
sollte man die Daten in ein Array laden und dieses auf einmal eintragen.
TOM hat das mal hier beschrieben, es ginge auch über die Zwischenablage.
Auch Formatieren ist kein Problem, aber es ist einfacher immer eine leere XLS Datei mit richtigen Formatierungen
als Grundlage zu nehmen. Beim Formatieren sollte man auch immer einen Bereich auf einmal formatieren.
Es dauert in etwa genausolang das gesamte Arbeitsblatt zu wählen und auf einen Schlag zu formatiren wie
eine Zelle einzeln zu formatieren. Wenn es aber hundert werden, wird es lahm.
Wenn die Zeit (1 bis 2 Minuten) keine Rolle spielt, kann man es machen wie man will.

Bei Datumswerten muss man noch aufpassen, wenn man in Excel nicht damit rechnen will, sollte man
diese als Text formatieren.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Ausgabe in EXCEL-Mappen

Beitrag von brandelh »

Hi,

so ich habe hier mal einige Überschriften aus dem Forum ActiveX und ActiveX/MS Office zusammen getragen.
Über die Suche habe ich nicht viel gefunden, aber allein die Überschriften sind schon aussagekräftig ;-) :

1. dbf-Datei schnell in Excel-Blatt kopieren
http://www.xbaseforum.de/viewtopic.php?f=28&t=2214

2. Excel (2007) und das Datum ...
http://www.xbaseforum.de/viewtopic.php?f=28&t=2476

3. excel copy und paste
http://www.xbaseforum.de/viewtopic.php?f=50&t=2715

und schon werden aus einem unlösbaren Problem mehrere Lösungswege :-)
Gruß
Hubert
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9362
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Ausgabe in EXCEL-Mappen

Beitrag von Tom »

Hallo, Wolfgang.

Die verschiedenen Worksheets (Arbeitsmappen) werden über "Select" angewählt. Die Lösung für Deine Problem geht nur über ActiveX:

Code: Alles auswählen

oApplication := CreateObject("Excel.Application")
oApplication:Visible:=.T.
oBook := oApplication:Workbooks:Open(cExcelFile)
oWorkSheet := oBook:Sheets(cFirstWorkSheet) // z.B. "Erste Mappe"
oWorkSheet:Select()
und jetzt die Daten setzen. Ich mache das über Range, und zwar mit der Zelladresse. Diese sei z.B. C15, und ich will den Wert "17,50" setzen:

SetExcelValue("C15",oWorkSheet,"17.50")

Und das ist die Funktion:

Code: Alles auswählen

FUNCTION SetExcelValue(cRange,oWorkSheet,cValue)
LOCAL oRange
oRange := oWorkSheet:Range(cRange)
oRange:Select()
oRange:Value := cValue
oRange := nil
RETURN nil
Herzlich,
Tom
stevie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 417
Registriert: Mo, 17. Sep 2007 18:20
Wohnort: Senftenberg
Kontaktdaten:

Re: Ausgabe in EXCEL-Mappen

Beitrag von stevie »

mal ne direkte Frage: Wenn ich per Odbcde von xls in dbf komme, geht das dann nicht auch umgedreht?
Viele Grüße
Stevie
wolfgang

Ausgabe in EXCEL-Mappen Fortsetzung

Beitrag von wolfgang »

Hallo im Forum,
habe hier mal meinen Code eingefügt, mit dem ich die Zwischenablage mit Daten füllen möchte, welche anschließend in ein entsprechendes Sheet des Workbooks einkopiert werden sollen .
Bekomme folgende Fehlermeldung:


Code: Alles auswählen

------------------------------------------------------------------------------
FEHLERPROTOKOLL von "F:\BD\BDV.EXE" Datum: 27.05.2009 11:32:28

Xbase++ Version     : Xbase++ (R) Version 1.90.331
Betriebssystem      : Windows XP 05.01 Build 02600 Service Pack 2
------------------------------------------------------------------------------
oError:args         :
          -> VALTYPE: C VALUE: Paste
          -> VALTYPE: A VALUE: {{359}, {360}, {0}, {1}, {0}, {0}, {0}, {0}, {0}, {1}, {7}, {7}, {7}}
oError:canDefault   : J
oError:canRetry     : N
oError:canSubstitute: J
oError:cargo        : NIL
oError:description  : Die Paste-Methode des Worksheet-Objektes konnte nicht ausgefhrt werden.
oError:filename     : NIL
oError:genCode      : NIL
oError:operation    : Paste
oError:osCode       :          -2146827284
oError:severity     :          2
oError:subCode      :       6500
oError:subSystem    : Automation
oError:thread       :          1
oError:tries        : NIL
------------------------------------------------------------------------------
CALLSTACK:
------------------------------------------------------------------------------

Called from EXCELARRAY(1991)
Called from EXCELTEXT(1806)
Called from DR_MBDT(107)
Called from BERICHTE(51)
Called from MAIN(113)
[/color]

auf folgenden Programmcode:

Code: Alles auswählen

m_ausgabe := {{m_lstd}, {m_bstd}, {m_wi}, {m_inst}, {m_az}, {m_mod}, {m_ko}, {m_wt}, {m_ag}, {m_n}, {m_sa}, {m_se}, {m_start}}

m_range = "B" + LTRIM(STR(R))+ ":N" + LTRIM(STR(R))
oSheet:Range("&m_Range"):Select
oSheet:Paste(m_ausgabe)
Sleep(10)
[/color]

Wie muss der Code zum Einfügen aus der Zwischenablage richtig lauten ? Bin für jeden Hinweis dankbar.

Gruss Wolfgang
Zuletzt geändert von wolfgang am Mi, 27. Mai 2009 11:42, insgesamt 2-mal geändert.
Benutzeravatar
Bertram Hansen
Foren-Moderator
Foren-Moderator
Beiträge: 1015
Registriert: Di, 27. Sep 2005 8:55
Wohnort: 51379 Leverkusen
Hat sich bedankt: 28 Mal
Danksagung erhalten: 20 Mal
Kontaktdaten:

Re: Ausgabe in EXCEL-Mappen

Beitrag von Bertram Hansen »

Hallo Wolfgang,

damit man Deinen Code besser lesen kann, solltest Du den Code formatieren.
Beispiel:

Code: Alles auswählen

Function blabla()
return nil
Was meinst Du genau mit
wolfgang hat geschrieben:Allerdings meldet der Compiler Fehler beim Aufsuchen des Feldes im Sheet, ab dem Eingefügt werden soll.
:wave:
Gruß Bertram
http://www.tobax.de
Mitglied der XUG Cologne
Mitglied der XUG Osnabrück
Beisitzer des Deutschsprachige Xbase-Entwickler e.V.

Solange Kakaobohnen an Bäumen wachsen ist Schokolade Obst!
wolfgang

Re: Ausgabe in EXCEL-Mappen

Beitrag von wolfgang »

Bertram Hansen hat geschrieben:Hallo Wolfgang,

damit man Deinen Code besser lesen kann, solltest Du den Code formatieren.
Beispiel:

Code: Alles auswählen

Function blabla()
return nil
Was meinst Du genau mit
wolfgang hat geschrieben:Allerdings meldet der Compiler Fehler beim Aufsuchen des Feldes im Sheet, ab dem Eingefügt werden soll.
Sorry, ich weiss nicht wie das funktioniert.

In der Zeile Range("B5"), wo im Sheet das Ergebnis eingefügt werden soll, meldet der Compiler "SYNTAX-Fehler". Auch bei anderer Schreibweise,
wie z.B. Range("B5").select oder Range("B5").select().
stevie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 417
Registriert: Mo, 17. Sep 2007 18:20
Wohnort: Senftenberg
Kontaktdaten:

Re: Ausgabe in EXCEL-Mappen

Beitrag von stevie »

wolfgang hat geschrieben:
Bertram Hansen hat geschrieben:Hallo Wolfgang,

damit man Deinen Code besser lesen kann, solltest Du den Code formatieren.
Beispiel:

Code: Alles auswählen

Function blabla()
return nil
Was meinst Du genau mit
wolfgang hat geschrieben:Allerdings meldet der Compiler Fehler beim Aufsuchen des Feldes im Sheet, ab dem Eingefügt werden soll.
Sorry, ich weiss nicht wie das funktioniert.

In der Zeile Range("B5"), wo im Sheet das Ergebnis eingefügt werden soll, meldet der Compiler "SYNTAX-Fehler". Auch bei anderer Schreibweise,
wie z.B. Range("B5").select oder Range("B5").select().
Der Compiler kennt kein Range.
Range ist eine Eigenschaft von oWorksheet muss darin per oWorksheet:Range aufgerufen werden.
Viele Grüße
Stevie
Benutzeravatar
Bertram Hansen
Foren-Moderator
Foren-Moderator
Beiträge: 1015
Registriert: Di, 27. Sep 2005 8:55
Wohnort: 51379 Leverkusen
Hat sich bedankt: 28 Mal
Danksagung erhalten: 20 Mal
Kontaktdaten:

Re: Ausgabe in EXCEL-Mappen

Beitrag von Bertram Hansen »

Hallo Manfred,
Manfred hat geschrieben:Sorry, ich weiss nicht wie das funktioniert.
Einfach den Code markieren und auf das Icon

Code: Alles auswählen

 klicken (oberer Bereich), dann wird der markierte Text als Code dargestellt.

Die Lösung hat Stevie schon beschrieben. Unter Xbase++ musst Du mit dem Doppelpunkt arbeiten.
:wave:
Gruß Bertram
http://www.tobax.de
Mitglied der XUG Cologne
Mitglied der XUG Osnabrück
Beisitzer des Deutschsprachige Xbase-Entwickler e.V.

Solange Kakaobohnen an Bäumen wachsen ist Schokolade Obst!
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21193
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: Ausgabe in EXCEL-Mappen

Beitrag von Manfred »

Hi Bertram,

dass mußt Du mir jetzt mal erklären, wie Du das gemacht hast.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14654
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Ausgabe in EXCEL-Mappen

Beitrag von Jan »

Ist doch ganz einfach: Manfred und Wolfgang verwechselt. Ist doch nix neues für Dich: Du wirst halt gerne verwechselt. :badgrin:

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
wolfgang

Re: Ausgabe in EXCEL-Mappen

Beitrag von wolfgang »

Code: Alles auswählen

  oSheet:Range("B5"):Select

      && Bearbeiten:Kopieren:Inhalte einfügen:Werte     
 
      oSheet:Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False

      Selection:Copy(m_ausgabe)
      
[/color]

Jetzt wird noch ein Syntayfehler im Befehl für Einfügen der Werte angezeigt. Hast du eine Idee, wie hier die Schreibweise sein muss ?

Danke
Wolfgang
Benutzeravatar
Bertram Hansen
Foren-Moderator
Foren-Moderator
Beiträge: 1015
Registriert: Di, 27. Sep 2005 8:55
Wohnort: 51379 Leverkusen
Hat sich bedankt: 28 Mal
Danksagung erhalten: 20 Mal
Kontaktdaten:

Re: Ausgabe in EXCEL-Mappen

Beitrag von Bertram Hansen »

Sorry Manfred :roll:


Hallo Wolfgang,

schaue Dir mal das Beispiel von Christof an (hat Hubert auch schon geschrieben)
http://www.xbaseforum.de/viewtopic.php?f=28&t=2214

Das steht eigentlich alles drin. Christof fügt alle Daten auf einmal in das Excelsheet. Also zuerst alle Daten sammeln und dann über die Zwischenablage einfügen.
:wave:
Gruß Bertram
http://www.tobax.de
Mitglied der XUG Cologne
Mitglied der XUG Osnabrück
Beisitzer des Deutschsprachige Xbase-Entwickler e.V.

Solange Kakaobohnen an Bäumen wachsen ist Schokolade Obst!
wolfgang

Re: Ausgabe in EXCEL-Mappen

Beitrag von wolfgang »

Bertram Hansen hat geschrieben:Sorry Manfred :roll:


Hallo Wolfgang,

schaue Dir mal das Beispiel von Christof an (hat Hubert auch schon geschrieben)
http://www.xbaseforum.de/viewtopic.php?f=28&t=2214

Das steht eigentlich alles drin. Christof fügt alle Daten auf einmal in das Excelsheet. Also zuerst alle Daten sammeln und dann über die Zwischenablage einfügen.
Ich glaube du siehst da etwas falsch. Meine errechnete Tabelle habe ich als Array in der Speichervariablen m_ausgabe stehen. Diesen Inhalt will ich jetzt in einer Aktion in eine ausgewählte Mappe meiner EXCEL-Datei über "Einfügen - Werte" - damit mir die Formatierung erhalten bleibt, hineinkopieren.
Ich stelle meine Codierung nochmal übersichtlich ein; vielleicht sieht ja dann jemand, wo meine Fehler liegen.

Wolfgang
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12908
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Ausgabe in EXCEL-Mappen

Beitrag von AUGE_OHR »

wolfgang hat geschrieben:
Bertram Hansen hat geschrieben:schaue Dir mal das Beispiel von Christof an (hat Hubert auch schon geschrieben)http://www.xbaseforum.de/viewtopic.php?f=28&t=2214
Ich glaube du siehst da etwas falsch. Meine errechnete Tabelle habe ich als Array in der Speichervariablen m_ausgabe stehen. Diesen Inhalt will ich jetzt in einer Aktion in eine ausgewählte Mappe meiner EXCEL-Datei über "Einfügen - Werte" - damit mir die Formatierung erhalten bleibt, hineinkopieren.
du musst mal weiter runter gehen da ist wohl das was du suchst

Code: Alles auswählen

oSheet:range( "A6:F" + LTRIM( STR( 6 + nTreff ) ) ) :value := aData
aData ist dein Array und in diesem Fall wäre der "Datenbereich" von A6:Fxxx.
gruss by OHR
Jimmy
wolfgang

Re: Ausgabe in EXCEL-Mappen

Beitrag von wolfgang »

[

Code: Alles auswählen

oSheet:range( "A6:F" + LTRIM( STR( 6 + nTreff ) ) ) :value := aData
aData ist dein Array und in diesem Fall wäre der "Datenbereich" von A6:Fxxx.[/quote]
Danke für deine Hinweise. Das Problem im Moment ist das Finden der "richtigen" Mappe. Zum Einfügen von Werten in EXCEL reicht es, wenn man die linke oberste Zelle eines Bereiches anspringt und ab da einfügt.
Wenn ich alles richtig gemacht habe, was ich allerdings noch bezweifle, dann steht meine Tabelle ja schon in der Zwischenablage.
wolfgang

Re: Ausgabe in EXCEL-Mappen

Beitrag von wolfgang »

wolfgang hat geschrieben:[

Code: Alles auswählen

oSheet:range( "A6:F" + LTRIM( STR( 6 + nTreff ) ) ) :value := aData
aData ist dein Array und in diesem Fall wäre der "Datenbereich" von A6:Fxxx.
Mein Code sieht jetzt so aus:

Code: Alles auswählen

m_ausgabe := {{m_slstd}, {m_sbstd}, {m_swi}, {m_sinst}, {m_saz}, {m_smod}, {m_sko}, {m_swt}, {m_sag}, {m_sn}, {m_ssa}, {m_sse}, {m_sstart}}
m_range = "B" + LTRIM(STR(R)) + ":N" + LTRIM(STR(R))
oSheet:Range("&m_Range"):Value := m_ausgabe
Sleep(40)
[/color]
In EXCEL wird jetzt aber nur der Inhalt des ersten ARRAY-Feldes bis zum Ende eingefügt. Was mache in denn jetzt falsch ?
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12908
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Ausgabe in EXCEL-Mappen

Beitrag von AUGE_OHR »

wolfgang hat geschrieben:Mein Code sieht jetzt so aus:

Code: Alles auswählen

m_ausgabe := {{m_slstd}, {m_sbstd}, {m_swi}, {m_sinst}, {m_saz}, {m_smod}, {m_sko}, {m_swt}, {m_sag}, {m_sn}, {m_ssa}, {m_sse}, {m_sstart}}
m_range = "B" + LTRIM(STR(R)) + ":N" + LTRIM(STR(R))
oSheet:Range("&m_Range"):Value := m_ausgabe
Sleep(40)
[/color]
In EXCEL wird jetzt aber nur der Inhalt des ersten ARRAY-Feldes bis zum Ende eingefügt. Was mache in denn jetzt falsch ?
ich denke die m_range ist falsch aufbaut.

müsste nachsehen, aber ich denke es ist pro/Datensatz ein Item Array.

Code: Alles auswählen

oSheet:range( "A6:F" + LTRIM( STR( 6 + nTreff ) ) ) :value := aData
links/oben nach rechts/unten ?
gruss by OHR
Jimmy
wolfgang

Re: Ausgabe in EXCEL-Mappen

Beitrag von wolfgang »

Hallo Auge_Ohr,
ich möchte den Range von links oben bis rechts unten mit den Daten füllen. Wenn ich den Code kennen würde, am liebsten immer drei Zeilen
pro Zyklus. Wenn du eine Idee hast . . . . bin dankbar für jeden Hinweis, der mich zum Ziel führt.
Schöne Pfingsttage
Wolfgang
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12908
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Ausgabe in EXCEL-Mappen

Beitrag von AUGE_OHR »

wolfgang hat geschrieben: Wenn du eine Idee hast . . . . bin dankbar für jeden Hinweis, der mich zum Ziel führt.

Code: Alles auswählen

   SELECT UMSATZ                                            // ist immer Umsatz
   OLDREC := RECNO()                                        // alte position
   //
   UMSATZ->( DBSEEK( cKDNR ) )                              // suche anfang / GO TOP
   IF FOUND()                                               // besser
      IF EOF()                                              // EOF
         MSGBOX( "Datenbank ist leer , es wird nicht gedruckt" )
         GOTO( OLDREC )
         RETURN
      ENDIF

      DO WHILE ( UMSATZ->UKDNR = cKDNR ) .AND. .NOT. EOF()
         IF EVAL( myBlock ) .AND. !DELETED()
            nTreff ++

            AADD(aData, {UMSATZ->URECHNR   ,;
                         UMSATZ->UMSATZGES ,;
                         SUBSTR( UMSATZ->URECHDAT, 1, 2 ) + "." + ;
                         SUBSTR( UMSATZ->URECHDAT, 3, 2 ) + "." + ;
                         SUBSTR( UMSATZ->URECHDAT, 5, 2 ),;
                         UMSATZ->UBEZAHLT         ,;
                         UMSATZ->USTAND           ,;
                         DTOC( UMSATZ->UBEZADAT ) })
         ENDIF
         SKIP
      ENDDO

      UMSATZ->( DBSEEK( cKDNR ) )                           // suche anfang / GO TOP
      BEGIN SEQUENCE
         // Start Excel
         oExcel := CreateObject( "Excel.Application" )

         IF NIL == oExcel
            // Excel.Application could not be created.
            MSGBOX( "Excel Verbindung konnte nicht erstellt werden" )
            *       ? "Error: ", ComLastError()
            *       ? "Description:"
            *       ? ComLastMessage()
            GOTO ( OLDREC )
            RETURN
         ELSE

*        oWait := WAITBOX( oParent, "Tabelle erstellen", .T., { 318, 340 } )

         oExcel:visible := .T.                           // NOT visible

         // If there is a problem, don't let excel pop up messages
         oExcel:Application:DisplayAlerts := .F.

          // Create a workbook from scratch
          oExcel:Application:Workbooks:new()
          oExcel:Application:Workbooks:add()

           // Office 97 Excel creates 3 worksheets by default
           // Delete 2 of them
           *         oExcel:Application:Worksheets(3):delete()
           *         oExcel:Application:Worksheets(2):delete()

           // Make the first one active
           oWorkBook := oExcel:activeWorkBook
           oExcel:Application:Worksheets( 1 ) :activate()

           // Rename the sheet
           oExcel:Application:Worksheets( 1 ) :name := UMSATZ->UKDNR

           // Speed things up by creating an object containing the cells
           oSheet := oExcel:Worksheets( 1 ) :cells

            oSheet:item( 1, 1 ) :Value := DECRYPT( KUNDEN->KDNAME )
            oSheet:item( 2, 1 ) :Value := DECRYPT( KUNDEN->STRASSE )
            oSheet:item( 3, 1 ) :Value := ALLTRIM( DECRYPT( KUNDEN->PLZ ) + " " + DECRYPT( KUNDEN->ORT ) )
            oSheet:item( 1, 6 ) :Value := DATE()
            oSheet:item( 2, 6 ) :Value := TIME()
            // Put in some values
            // Column Headings
            oSheet:item( 5, 1 ) :Value := "Rechnr."
            oSheet:item( 5, 2 ) :Value := "Umsatz"
            oSheet:item( 5, 3 ) :Value := "Datum"
            oSheet:item( 5, 4 ) :Value := "Bezahlt"
            oSheet:item( 5, 5 ) :Value := "Offen"
            oSheet:item( 5, 6 ) :Value := "EZ Datum"
            nStart := 5

            // Set number format in cells x6 to x6+nTreff
*            oSheet:range( "A6:A" + LTRIM( STR( 6 + nTreff ) ) ) :NumberFormat := "Standart"
            oSheet:range( "B6:B" + LTRIM( STR( 6 + nTreff ) ) ) :NumberFormat := "#0,00"
            oSheet:range( "C6:C" + LTRIM( STR( 6 + nTreff ) ) ) :NumberFormat := "TT.MM.JJ"
            oSheet:range( "D6:D" + LTRIM( STR( 6 + nTreff ) ) ) :NumberFormat := "#0,00"
            oSheet:range( "E6:E" + LTRIM( STR( 6 + nTreff ) ) ) :NumberFormat := "#0,00"
            oSheet:range( "F6:F" + LTRIM( STR( 6 + nTreff ) ) ) :NumberFormat := "TT.MM.JJ"

            oSheet:range( "A6:F" + LTRIM( STR( 6 + nTreff ) ) ) :value := aData
that´s it.
gruss by OHR
Jimmy
wolfgang

Re: Ausgabe in EXCEL-Mappen

Beitrag von wolfgang »

Code: Alles auswählen

m_ausgabe := {{m_slstd}, {m_sbstd}, {m_swi}, {m_sinst}, {m_saz}, {m_smod}, {m_sko}, {m_swt}, {m_sag}, {m_sn}, {m_ssa}, {m_sse}, {m_sstart}}
*  -----------------  Datenausgabe an EXCEL
R = R + 1
oSheet:Range("B" + LTRIM(STR(R)) + ":N" + LTRIM(STR(R))):value := m_ausgabe
oClipboard:Open()
sleep(50)
Der Programmablauf ist mittlerweile wie gewünscht, jedoch werden die Zellen im Bereich nicht mit den Werten der einzelnen Speichervariablen gefüllt.
Kann man die Ausgabe in irgend einer Weise formartieren ? Der Charme soll doch darin liegen, dass man direkt einen Bereich bedient und nicht jede Zelle einzeln beschreibt. Ich krieg das einfach nicht hin, egal wie oft und intensiv ich die Beispiele im Forum studiere.
.... na ja, vielleicht bin ich zu alt dafür (oder einfach zu doof)

Schönes Wochenende
wolfgang
Antworten