Seite 5 von 8

Verfasst: 30.04.2007 19:10
von mk-soft
Habe noch mal den Variant Helper erweitert.

VT_DATE(datum.Variant) gibt das Datum in PB-Datumsformat zurück
V_DATE(datum.Variant) = T_DATE(pbDate) setzt das Datum aus PB-datumsformat.

LastError und LastMessage Variablen sind nicht mehr Global.
Dafür zwei neue Funktionen zun auslesen.

-vhLastError()
-vhLastMessage()

FF
:wink:

Verfasst: 30.04.2007 19:24
von ts-soft
:allright:
Sehr hilfreich, werde es beim nächstem Update hinzufügen!

//edit
done!

Verfasst: 30.04.2007 22:12
von mk-soft
Excel Beispiel für DispHelper_Include

Code: Excel2.pb

Code: Alles auswählen

; example by Kiffi and mk-soft


IncludeFile "DispHelper_Include.pb"
IncludeFile "VariantHelper2.pb"

EnableExplicit

Define.l ExcelApp, Workbook

dhInitializeImp()
dhToggleExceptions(#True)

ExcelApp = dhCreateObject("Excel.Application")

Define.variant wert1, wert2, wert3, result, text, datum

V_DOUBLE(wert1) = 3.33333333333333
V_DOUBLE(wert2) = 4.44444444444444
V_DOUBLE(wert3) = 5.55555555555555
V_STR(text) = T_BSTR("Hallo Welt")
V_DATE(datum) = T_DATE(Date())

If ExcelApp
  
  dhPutValue(ExcelApp, ".Visible = %b", #True)
  
  dhGetValue("%o", @Workbook, ExcelApp, ".Workbooks.Add")
  
  dhPutValue(ExcelApp, "Cells(%d, %d).Value = %T", 1, 1, @"Feel")
  dhPutValue(ExcelApp, "Cells(%d, %d).Value = %T", 2, 1, @"the")
  dhPutValue(ExcelApp, "Cells(%d, %d).Value = %T", 3, 1, @"pure")
  dhPutValue(ExcelApp, "Cells(%d, %d).Value = %T", 4, 1, @"Power")
  
  dhPutValue(ExcelApp, "Cells(%d, %d).Value = %T", 1, 2, @"the")
  dhPutValue(ExcelApp, "Cells(%d, %d).Value = %T", 1, 3, @"pure")
  dhPutValue(ExcelApp, "Cells(%d, %d).Value = %T", 1, 4, @"Power")

  dhPutValue(ExcelApp, "Cells(%d, %d).Value = %v", 2, 2, wert1)
  dhPutValue(ExcelApp, "Cells(%d, %d).Value = %v", 2, 3, wert2)
  dhPutValue(ExcelApp, "Cells(%d, %d).Value = %v", 2, 4, wert3)

  dhPutValue(ExcelApp, "Cells(%d, %d).Value = %v", 3, 2, text)
  dhPutValue(ExcelApp, "Cells(%d, %d).Value = %v", 4, 2, datum)

  dhGetValue("%v", @result, ExcelApp, "Cells(%d, %d).Value", 2, 2)

  MessageRequester("PureDispHelper-ExcelDemo", "Result Cells(2,2): " + VT_STR(result))

  MessageRequester("PureDispHelper-ExcelDemo", "Click OK to close Excel")
  
  dhCallMethod(ExcelApp, ".Quit")
  
  dhReleaseObject(Workbook) : Workbook = 0
  dhReleaseObject(ExcelApp) : ExcelApp = 0
  
Else
  
  MessageRequester("PureDispHelper-ExcelDemo", "Couldn't create Excel-Object")
  
EndIf
FF :wink:

P.S. VariantHelper2.pb auf Seite 4 :wink:

Verfasst: 02.05.2007 10:48
von gekkonier
Hallo, erstmal vielen Dank für diese wunderbare Lib!

Ich hätte eine kleine Frage zur Benutzung dieser:

Und zwar würde ich damit gerne Word-Vorlagen (.dot) Daten mit documents.add verwenden. Dabei soll nicht die dot direkt geöffnet werden, sondern als Vorlagendatei verwendet werden (also wie Neu -> aus Vorlage..)

In Ruby sieht das ca. so aus:

Code: Alles auswählen

require "win32ole"
word = WIN32OLE.new('Word.Application')
word.documents.add(File.expand_path("meinevorlage.dot"))
word.Visible = 1
Weiss jemand, wie ich das mit PB4 machen kann?

Vielen Dank, Gekkonier

Verfasst: 02.05.2007 14:50
von gekkonier
Okidoki!

Bin selber draufgekommen, hier derselbe Code von Ruby auf PB übersetzt:

Code: Alles auswählen

oWord.l = dhCreateObject("Word.Application")
dhPutValue (oWord, "Visible = %b", #True)

; Documents.Add erwartet den vollen Pfad
; hier befindet sich die Date vorlage.dot im selben Pfad wie das Programm
filename.s = GetCurrentDirectory() + "vorlage.dot"
dhCallMethod (oWord, "Documents.Add(%s)", @filename)

dhReleaseObject (oWord)
oWord = 0
Nochmals danke für diese tolle Lib, so etwas hat PB gefehlt!

Verfasst: 03.05.2007 03:39
von ts-soft
Neuigkeiten immer im engl. Forum:
http://www.purebasic.fr/english/viewtopic.php?t=26744
Hab keine Lust alles 2x zu posten und hier hält sich das Interesse ja in Grenzen

Über den Download link erhaltet ihr immer die aktuelle Version!

Gruß
Thomas

Verfasst: 05.05.2007 07:20
von ts-soft
Grosses Upate auf Version 1.3

Die UserLib wird nicht mehr supported, ist aber weiterhin im Paket enthalten.

Der C-Source von Disphelper wurde angepaßt, um grössere Kompatibilität
zu PureBasic zu erreichen (dank an mk-soft :wink: )

Die libgcc.lib wurde entfernt, disphelper.lib jetzt mit PellesC kompiliert
(SourcePackage liegt bei)

Neu Identifier hinzugefügt:
Volle Unterstützung von Double, Float, Word usw.

Doku für PureBasic spezifiesche Änderungen im PDF-Format beigefügt.

Neuer VariantHelper, unterstützt jetzt auch Variant-Arrays.

Diverse Bugs beseitigt.

Gruß
Thomas

Verfasst: 30.06.2007 20:25
von Falko
@kiffi,
ich steig leider durch den VBA-Excel-Objectkram nicht so richtig durch. Vorallem, wann man was nehmen muss und vorallem, wie man es in PB dann umsetzt.

Ich suche was um z.B. eine Zelle aus einer bestehenden Exceldatei auszulesen, diese nach Überprüfung dann zu ersetzen oder zu löschen und
dann wieder die Exceldatei zu schließen.

Hättest du dafür ein kleines Beispiel für mich?

Im Vorraus schon mal danke :allright:

Gruß Falko

Verfasst: 30.06.2007 22:19
von Kiffi
Falko hat geschrieben:Hättest du dafür ein kleines Beispiel für mich?
klar :-)

als erstes musst Du die entsprechende Excel-Datei laden

Code: Alles auswählen

dhCallMethod(ExcelApp, ".Workbooks.Open(%T)", @DeineXls$)

danach kannst Du den Inhalt der Zelle auslesen:

Code: Alles auswählen

dhGetValue("%T", @ReturnValue, ExcelApp, "Cells(%d, %d).Value", 1, 1)
(wobei anzumerken ist, dass es einen Unterschied zwischen dem
angezeigten Inhalt (Cells().Text) und die dahinterliegende Formel
(Cells().Value) geben kann.)

Nun kannst Du ReturnValue auswerten.

Danach schreibst Du den neuen Wert in die Zelle:

Code: Alles auswählen

dhPutValue(ExcelApp, "Cells(%d, %d).Value = %T", 1, 1, @NewValue)

That's it! Den Rest kennste ja. :-) Obiger Beispielcode gilt allerdings nur
für das aktive WorkBook und das aktive WorkSheet. Willst Du da was
anderes haben, dann sag kurz Bescheid.

Grüße ... Kiffi

Verfasst: 30.06.2007 23:02
von Falko
Vielen Dank kiffi,

das ist genau das was ich brauchte und es funktioniert dank deiner
Hilfe prima. :allright:
Vor allem hast du mir mit einer weiteren Lösung wegen den unbekannten
Werte (String oder Zahl) mittels %T sehr geholfen. Man lernt nie aus :allright:

Hier nochmal der etwas abgeänderte Source zum Lesen und Ändern
einer Excel-Tabellen. Vorher muss selbstverständlich erst eine in
Excel geschrieben sein, die sich test.xls nennt.

Code: Alles auswählen

; example by Kiffi
Define.l ExcelApp, Workbook
Datei$=GetCurrentDirectory()+"test.xls" 


dhToggleExceptions(#True)

ExcelApp = dhCreateObject("Excel.Application")
If ExcelApp
  ;dhPutValue(ExcelApp, ".Visible = %b", #True)
  
  dhCallMethod(ExcelApp, ".Workbooks.Open(%T)", @Datei$) ; open ExcellTable
  
  dhGetValue("%T",@Workbook,ExcelApp, "Cells(%d, %d).Value",10,3); read one value
  Debug PeekS(Workbook)
  dhFreeString(Workbook); set string to free before change a new value 
  dhGetValue("%T",@Workbook,ExcelApp, "Cells(%d, %d).Value",10,4); read second value
  Debug PeekS(Workbook)
  dhFreeString(Workbook); set string to free before change a new value 
  NewValue.s="S0"
  
  dhPutValue(ExcelApp, "Cells(%d, %d).Value = %T", 10, 4, @NewValue);write a new value
  

  MessageRequester("PureDispHelper-ExcelDemo", "Click OK to close Excel")

  dhCallMethod(ExcelApp, ".Quit")

  dhReleaseObject(Workbooks) : Workbook = 0
  dhReleaseObject(ExcelApp) : ExcelApp = 0

Else

  MessageRequester("PureDispHelper-ExcelDemo", "Couldn't create Excel-Object")

EndIf
Gruß Falko