Excel Tabellen nach der Erzeugung bearbeiten

Nutzung, Komponenten, .NET

Moderator: Moderatoren

Antworten
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Excel Tabellen nach der Erzeugung bearbeiten

Beitrag von Koverhage »

Hallo,

mit Word läuft der nachstehende Code, aber mit Excel nicht.
was muss ich in Excel anders machen ?

oExcel := oExcel:dynamicCast(ActiveXObject())
oExcel:Quit := {||lExcelFinished := .T.}
oExcel:visible := .T.
lExcelFinished := .F.

// Fülle Tabelle mit daten füllen


// Hier Excel geöffnet lassen bis durch User beendet wird
Do WHILE !lExcelFinished
// Just wait
EndDo
Alfred
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 476
Registriert: Do, 03. Mai 2007 12:37
Wohnort: München

Beitrag von Alfred »

Hallo Koverhage,

unter "ActiveX\Daten aus Excel auslesen" findest Du ein Beispiel von mir, wie man Exceldaten mit alaska bearbeiten kann. Dass mit dem dynamicCast ist mir bislang noch nicht untergekommen.

Gruß
Alfred
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Koverhage »

Hallo Alfred,

wenn ich mit Word was mache, hat der User die Möglichkeit das erzeugte Dokument zu bearbeiten.
Siehe auch ActiveX und Word. Es wird über Dynamiccast ein Ereignis erzeuht wenn der User den Close Button klickt.

Bloss unter Excel funktioniert das nicht.


Wenn der User eine Excel-Tabelle erstellen lässt, möchte er diese direkt bearbeiten und nicht erst wieder Excel starten und das Dokument laden.

Klaus
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Rolf Ramacher »

Hallo Klaus,

mußt du nicht folgendes vorher machen ?

oExcel:=CreateObject("Excel.Application")

jedenfalls bei Word schon.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Koverhage »

Rolf,

das habe ich gemacht. Wollte nicht den ganzen Code posten, um die Anzahl der Sterne hochzutreiben.
Aber nun doch:

#include "Common.ch"
#include "firma.def"

#define HKEY_LOCAL_MACHINE 0x80000002

// $LASTMESSAGE = 0051028

#if XPPVER > 01890000
#include "activex.ch"
#include "excel.ch"
#pragma library( "ascom10.lib" )
#endif

//////////////////////////////////////////////////////////////////////
// Erstellt aus der Kundentabelle eine Excel-Tabelle
//////////////////////////////////////////////////////////////////////
FUNCTION Kunde2Excel(cFile,cSaveAs,lDruOrEdit)
LOCAL oExcel, oBook, oSheet
LOCAL Header1 := LGTrans(('Cdb')->sprache,'5001001','LG-Nummer')
local mess2 := LGTrans(('Cdb')->sprache,'0051002','Microsoft Excel ist nicht installiert')
local lExcelFinished := .f.
local i := 0
LOCAL nEvent := 0, mp1, mp2
LOCAL nRow := 0
LOCAL cPathExcel := cWin2Dos( DC_RegQuery(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\Excel.exe", "") )

#if XPPVER > 01890000

default cSaveAs to CurDrive()+':\'+CurDir()+"\AbrStat"+strtran(dtoc(date()),".","")
default lDruOrEdit to .f.

// Create the "Excel.Application" object
oExcel := CreateObject("Excel.Application")
IF Empty( oExcel )
MsgBox( mess2 )
RETURN NIL
ENDIF

// Avoid message boxes such as "File already exists".
oExcel:DisplayAlerts := .F.
oExcel:Visible := .T.
// Also ensure the Excel application is Visible and block keyboard and mouse
// macht das ganze ein wenig schneller
oExcel:Interactive := .F.

if lDruOrEdit
oExcel := oExcel:dynamicCast(ActiveXObject())
oExcel:Quit := {||lExcelFinished := .T.}
lExcelFinished := .F.
endif

// Add a workbook to the Excel application. Query for
// the active sheet (sheet-1) and set up page/paper
// orientation.
oBook := oExcel:workbooks:Add()
i := oBook:Worksheets():count()
if i > 1
for n := i to 2 STEP -1
oBook:Worksheets(n):delete()
next
endif
oSheet := oBook:ActiveSheet
oSheet:PageSetup:Orientation := xlLandscape
// Rename the sheet
oBook:Worksheets(1):name := Header14

// Erstmal die šberschrift aufbereiten

oExcel:Range("A1"):Value := Header1 //zuweisen eines Wertes in eine Zelle der aktiven Tabelle
oExcel:Range("A1"):Font():Size := 10 //Schriftgrösse ändern
oExcel:Range("A1"):Font():Name := "Times" //Schrift festlegen
oExcel:Range("A1"):Font():Bold := .t.

// Open source table, reset the row counter used
// to determine the row# inside the excel
// sheet later on.
("kd")->(dbgotop())
nRow := 2

// Format the columns. Column #1 is for the part
// name, all others visualize numerice values
// Number Format z.B.
// "-#,##0.000 ", wobei mehrere Formate vorhanden sein k”nnen, diese
// m
Alfred
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 476
Registriert: Do, 03. Mai 2007 12:37
Wohnort: München

Beitrag von Alfred »

Hallo Klaus,

habe deinen Programmcode zu Testzwecken abgeändert und Excel läuft
bei mir an. Excel bei mir 2002 SP3.

Bin aber auch der Meinung es auch einen Lösungsansatz ohne dynamicCast
gibt. Komme aber erst Morgen dazu.

Gruß
Alfred
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Koverhage »

Alfred,

auch wenn Du lDruOrEdit auf .t. setzt ?

Bekomme folgende Fehlermeldung

Fehler Automation/6500
Beschreibung: Mitglied nicht gefunden
Member-Variable is f

eingesetzte Word Version :

Microsoft Office Word 2003

------------------------------------------------------------------------------
FEHLERPROTOKOLL von "D:\wexe\le0.EXE" Datum: 04.11.2007 11:50:55

Xbase++ Version : Xbase++ (R) Version 1.90.331
Betriebssystem : Windows XP 05.01 Build 02600 Service Pack 2
------------------------------------------------------------------------------
oError:args :
-> VALTYPE: C VALUE: Quit
-> VALTYPE: B VALUE: {||lExcelFinished := .T.}
oError:canDefault : J
oError:canRetry : N
oError:canSubstitute: J
oError:cargo : NIL
oError:description : Mitglied nicht gefunden.
Member-Variable ist f r dieses Objekt unbekannt
oError:filename : NIL
oError:genCode : NIL
oError:operation : Quit
oError:osCode : -2147352573
oError:severity : 2
oError:subCode : 6500
oError:subSystem : Automation
oError:thread : 1
oError:tries : NIL
------------------------------------------------------------------------------
CALLSTACK:
------------------------------------------------------------------------------

Called from ABRSTAT2EXCEL(1399)
Called from (B)XSAMPLE_160(6130)
Called from DC_XBPPUSHBUTTON:ACTION(498)
Called from (B)DC_XBPPUSHBUTTON:INIT(124)
Called from DC_GETLIST:EVENTLOOP(3854)
Called from DC_GETLIST:READGUI(3293)
Called from DC_READGUI(82)
Called from XSAMPLE_160(6287)
Called from LE500(238)
Called from (B)CREATEMENUSYSTEM(1845)
Called from MAIN(327)
Alfred
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 476
Registriert: Do, 03. Mai 2007 12:37
Wohnort: München

Beitrag von Alfred »

Hallo Klaus,

wieso steht da Microsoft Word!!!! 2003 in der Fehlermeldung?

Gruß
Alfred
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Koverhage »

Das habe ich eingefügt sollte MS Office 2003 sein!
Alfred
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 476
Registriert: Do, 03. Mai 2007 12:37
Wohnort: München

Beitrag von Alfred »

Hallo Klaus,

funktioniert auch mit .t.

Hatte aber seltsamer Weise kurzfristig die selbe Fehlermeldung.

Schau dir mal mit ed die Datei an, nicht dass da irgend ein Müll drinn steht.

Hast du mal den Taskmanager auf Excel.Exe durchgesehen, die nicht
abgeschlossen wurden?

Mein Sohn hat 2003. Werde dass heute Abend mal testen.

Gruß
Alfred
Alfred
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 476
Registriert: Do, 03. Mai 2007 12:37
Wohnort: München

Beitrag von Alfred »

Hallo Klaus,

sende mir doch eine e-mail. Dann übersende ich dir die funktionierende *.exe.

Gruß
Alfred
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Koverhage »

Alfred,

sichtbar ist im Quellcode nichts zu finden was Probleme machen könnte.
Excel ist auch nicht aktiv (erst wenn diese Funktion aufgerufen wird)
und wird auch sofort aus dem Speicher entfernt wenn die Anwendung (nach erstellen der Log-Datei) beendet wird.

E-Mail Adresse habe ich Dir geschickt.
Alfred
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 476
Registriert: Do, 03. Mai 2007 12:37
Wohnort: München

Beitrag von Alfred »

Hallo Klaus,

funktioniert auch mit Excel 2003.

Gruß
Alfred
Antworten