PureDispHelper Userlib - Update Include für Unicode Support

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag 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:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

:allright:
Sehr hilfreich, werde es beim nächstem Update hinzufügen!

//edit
done!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag 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:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
gekkonier
Beiträge: 314
Registriert: 20.04.2007 09:06
Wohnort: Wien

Beitrag 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
Benutzeravatar
gekkonier
Beiträge: 314
Registriert: 20.04.2007 09:06
Wohnort: Wien

Beitrag 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!
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag 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
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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
a²+b²=mc²
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag 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
Zuletzt geändert von Falko am 30.06.2007 23:42, insgesamt 2-mal geändert.
Bild
Win11 Pro 64-Bit, PB_6.11b1
Antworten