Von Calc zu VCS

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

SüdSauerland
***
Beiträge: 86
Registriert: Di, 07.08.2007 21:04

Re: Von Calc zu VCS

Beitrag von SüdSauerland »

Hallo Jürgen,

ich habe mal versucht per Makro, innerhalb der Datei eine neue Tabelle einzufügen (Name: daten)
Dann bringe ich die Daten VCS_Daten_Anfang & VCS_Daten & VCS_Daten_Ende in die erste Zelle (A1).
Da ich hier bei keinen automatischen „Zellen“ Umbruch mittels Chr (13) oder so hin bekommen habe muss ich die Daten in die Zwischenablage kopieren wo ich sie dann Formatiert mit Zeilenumbruch wieder einfüge (etwas Umständlich aber es funktioniert :) ). Nun kann ich die Tabelle als csv ohne automatisch Dateinamenserweiterung abspeichern, also als Termine_direkt.vcs. Danach wird die Tabelle „daten“ wieder gelöscht.

Blöd :? ist jetzt eigentlich, dass die Ursprungs Datei jetzt auch den Namen Termine_direkt.vcs trägt.
Kann man das wohl verhindern ?

Noch ein kleines Problem
Ein Bekannter hat mir mitgeteilt, dass MS Outlook nur den ersten Termin einträgt und die anderen ignoriert. Hier hatte ich mir schon überlegt, einfach jeden Termin als einzelne Datei abzulegen. Der Dateinamen sollte dann aus dem Datum und evtl noch den Beschreibungstext bestehen.
Dateianhänge
2007-08-27-Export.zip
Version 27.08 alles in einer Datei
(12.17 KiB) 125-mal heruntergeladen
Windows Win7, OpenOffice 4.x, LibreOffice 4.x

turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Von Calc zu VCS

Beitrag von turtle47 »

Naben Andreas,

das war aber eine gute Idee, zu versuchen das ganze innerhalb eines Dokumentes zu lösen.
SüdSauerland hat geschrieben:Da ich hier bei keinen automatischen „Zellen“ Umbruch mittels Chr (13) oder so hin bekommen habe
Es gibt verschiedene Arten von Zeilenumbrüchen.
Gib in der Suchfunktion des Forums mal nur "Chr" ein, dann kommen ne Menge Threads, oder in Google mal nach
chr OpenOffice Zeilenumbruch suchen.
SüdSauerland hat geschrieben:Blöd :? ist jetzt eigentlich, dass die Ursprungs Datei jetzt auch den Namen Termine_direkt.vcs trägt.
Kann man das wohl verhindern ?
Kann ich nicht bestätigen. Die Datei 2007-08-27-Export.ods bleibt so bestehen und in der Termine_direkt.vcs sind die richtigen Daten drin. Es sei denn, wenn ich in der noch geöffneten Tabelle den Speichern Button drücke, dann ist die Textformatierung in Termine_direkt.vcs ganz anders.
Um das zu verhindern füge doch am Ende der Speicherung den folgenden Code ein:

Code: Alles auswählen

odoc.close(True)
Dann wird die Datei ohne zu speichern direkt geschlossen. Ist zwar nicht ganz sauber aber wenn´s hilft.

Jetzt muss ich aber in die Kiste, um 4:30 geht´s wieder raus.

Gut´s Nächtle.

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem

turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Von Calc zu VCS

Beitrag von turtle47 »

Guten Morgen Andreas,
SüdSauerland hat geschrieben:jeden Termin als einzelne Datei abzulegen. Der Dateinamen sollte dann aus dem Datum und evtl noch den Beschreibungstext bestehen.
Ist das nicht ein wenig umständlich? Mehr zu diesem diesem Thema findest Du hier .
SüdSauerland hat geschrieben:Ein Bekannter hat mir mitgeteilt, dass MS Outlook nur den ersten Termin einträgt und die anderen ignoriert.
Könnte mir vorstellen, dass das mit dem Zeilenumbruch zusammenhängt. War das mit der Datei die aus Writer erstellt wurde auch so?
turtle47 hat geschrieben: Dann wird die Datei ohne zu speichern direkt geschlossen. Ist zwar nicht ganz sauber aber wenn´s hilft.
Dazu habe ich mir überlegt die Datei im Makro einfach wieder unter dem Originalnamen zu speichern, dann kann man darin weiterarbeiten und auch manuell speichern.

Learning by doing ist zwar auch ganz schön, aber wenn uns von den Spezialisten hier im Forum mit ein paar Tips ein wenig geholfen würde, währe das auch ganz nett. Danke.

Einen schönen Tag wünsche ich Euch.

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem

SüdSauerland
***
Beiträge: 86
Registriert: Di, 07.08.2007 21:04

Re: Von Calc zu VCS

Beitrag von SüdSauerland »

SüdSauerland hat geschrieben:Ein Bekannter hat mir mitgeteilt, dass MS Outlook nur den ersten Termin einträgt und die anderen ignoriert.
Leider ist das wirklich so :( .
Ich habe jetzt Versucht eine Datei vom PalmDesktop und von Write mit zwei Terminen in Outlook zu importieren.
Outlook hat aber nur den ersten Termin genommen.

Somit muss man jeden Termin einzeln abspeichern werden.
Windows Win7, OpenOffice 4.x, LibreOffice 4.x

turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Von Calc zu VCS

Beitrag von turtle47 »

Hey Andreas,

schau Dir mal folgende Seite an.
Dort kann man alle Termine für die WM-2006 (ich weiß, die ist längst vorbei) in einer Datei herunterladen für den Import in Outlook.
Das Dateiformat ist *.ics und sieht für zwei Termine folgendermaßen aus:

Code: Alles auswählen

BEGIN:VCALENDAR
PRODID:WORLDCUP
VERSION:2.0
METHOD:PUBLISH
X-CALSTART:20060609T160000Z
X-CALEND:20060709T180000Z
X-WR-RELCALID:{0000002E-7066-D5C5-08E3-E99D064BE8BE}
X-WR-CALNAME:WM-Kalender
BEGIN:VEVENT
CLASS:PUBLIC
CREATED:20051216T155927Z
DESCRIPTION:
DTEND:20060709T180000Z
DTSTAMP:20060123T143707Z
DTSTART:20060709T180000Z
LAST-MODIFIED:20060120T152111Z
LOCATION:Berlin
PRIORITY:5
SEQUENCE:0
SUMMARY:Finale
TRANSP:TRANSPARENT
UID:AAAAADrBA5EqjRBEqz69uRk5f9wHAPBz+eEQr3hJpuXCzpa47v0AAAB4ABIAAPBz+eEQr3h
	JpuXCzpa47v0AAAB4MEAAAA==
X-ALT-DESC;FMTTYPE=text/html:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//E
	N">\n<HTML>\n<HEAD>\n<META NAME="Generator" CONTENT="MS Exchange Server ve
	rsion 8.0.0337.0">\n<TITLE></TITLE>\n</HEAD>\n<BODY>\n<!-- Converted from 
	text/rtf format -->\n\n<P><FONT SIZE=2 FACE="Arial CYR">Sie wollen das Spi
	el auf keinen Fall verpassen? - MAPILab Toolbox erinnert Sie per SMS!</FON
	T>\n\n<BR><FONT SIZE=2 FACE="Arial CYR">Weitere Infos zum Programm auf </F
	ONT><A HREF="http://www.mapilab.com/de/outlook/toolbox/"><U><FONT COLOR="#
	0000FF" SIZE=2 FACE="Arial CYR">http://www.mapilab.com/de/outlook/toolbox/
	</FONT></U></A>\n</P>\n\n</BODY>\n</HTML>
X-MICROSOFT-CDO-BUSYSTATUS:FREE
X-MICROSOFT-CDO-IMPORTANCE:1
X-MICROSOFT-DISALLOW-COUNTER:FALSE
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
X-MS-OLK-AUTOSTARTCHECK:FALSE
X-MS-OLK-CONFTYPE:0
END:VEVENT
BEGIN:VEVENT
CLASS:PUBLIC
CREATED:20051216T155843Z
DTEND:20060708T190000Z
DTSTAMP:20060123T143707Z
DTSTART:20060708T190000Z
LAST-MODIFIED:20060120T152054Z
LOCATION:Stuttgart
PRIORITY:5
SEQUENCE:0
SUMMARY:Spiel um dem 3. Platz
TRANSP:TRANSPARENT
UID:AAAAADrBA5EqjRBEqz69uRk5f9wHAPBz+eEQr3hJpuXCzpa47v0AAAB4ABIAAPBz+eEQr3h
	JpuXCzpa47v0AAAB4MD8AAA==
X-MICROSOFT-CDO-BUSYSTATUS:FREE
X-MICROSOFT-CDO-IMPORTANCE:1
X-MICROSOFT-DISALLOW-COUNTER:FALSE
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
X-MS-OLK-AUTOSTARTCHECK:FALSE
X-MS-OLK-CONFTYPE:0
END:VEVENT
BEGIN:VEVENT
CLASS:PUBLIC
CREATED:20051216T155818Z
DESCRIPTION:
DTEND:20060705T190000Z
DTSTAMP:20060123T143707Z
DTSTART:20060705T190000Z
LAST-MODIFIED:20060120T152047Z
LOCATION:München
PRIORITY:5
SEQUENCE:0
SUMMARY:Halbfinale 2: VF3 - VF4
TRANSP:TRANSPARENT
UID:AAAAADrBA5EqjRBEqz69uRk5f9wHAPBz+eEQr3hJpuXCzpa47v0AAAB4ABIAAPBz+eEQr3h
	JpuXCzpa47v0AAAB4MD4AAA==
X-ALT-DESC;FMTTYPE=text/html:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//E
	N">\n<HTML>\n<HEAD>\n<META NAME="Generator" CONTENT="MS Exchange Server ve
	rsion 8.0.0337.0">\n<TITLE></TITLE>\n</HEAD>\n<BODY>\n<!-- Converted from 
	text/rtf format -->\n\n<P><FONT SIZE=2 FACE="Arial CYR">Sie wollen das Spi
	el auf keinen Fall verpassen? - MAPILab Toolbox erinnert Sie per SMS!</FON
	T>\n\n<BR><FONT SIZE=2 FACE="Arial CYR">Weitere Infos zum Programm auf </F
	ONT><A HREF="http://www.mapilab.com/de/outlook/toolbox/"><U><FONT COLOR="#
	0000FF" SIZE=2 FACE="Arial CYR">http://www.mapilab.com/de/outlook/toolbox/
	</FONT></U></A>\n</P>\n\n</BODY>\n</HTML>
X-MICROSOFT-CDO-BUSYSTATUS:FREE
X-MICROSOFT-CDO-IMPORTANCE:1
X-MICROSOFT-DISALLOW-COUNTER:FALSE
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
X-MS-OLK-AUTOSTARTCHECK:FALSE
X-MS-OLK-CONFTYPE:0
END:VEVENT
Da waren wir wohl auf der falsche Fährte.
Jetzt müsste man mal zunächst mal herausfiltern welchen Teilcode man davon wirklich braucht.
Bitte doch Deinen Bekannten mal zwei Termine aus Outlook in eine Datei zu exportieren und dann schauen wir uns diesen Code mal etwas genauer an.

Edit: Oder lösche in der Von Calc erstellten vcs-Datei mal die Leerzeilen zwischen den Terminen und importiere diese nochmal in Dein Terminprogramm.

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem

SüdSauerland
***
Beiträge: 86
Registriert: Di, 07.08.2007 21:04

Re: Von Calc zu VCS

Beitrag von SüdSauerland »

Eigentlich wollte ich einen Export haben, der für alle Programme funktioniert.

Beim PalmDesktop 4.1.4 und Outlook funktionieren VCS einzel Termine.
Bei Sunbird "leider" nur ICS.
Das habe ich mit Sunbird Portabel http://www.thunderbird-forum.de/jgs_db. ... id=24&sid= (ohne Installation) ausprobiert.

Ein mit Sunbird erstellter Termin sieht als ics so aus:

Code: Alles auswählen

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN
BEGIN:VTIMEZONE
TZID:/mozilla.org/20070129_1/Europe/Berlin
X-LIC-LOCATION:Europe/Berlin
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
TZNAME:CEST
DTSTART:19700329T020000
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=3
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
TZNAME:CET
DTSTART:19701025T030000
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=10
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
CREATED:20070831T134448Z
LAST-MODIFIED:20070831T140624Z
DTSTAMP:20070831T140624Z
UID:d4962575-d119-42ca-8a98-1e76cc6903ed
SUMMARY:Test-Titel
DTSTART;TZID=/mozilla.org/20070129_1/Europe/Berlin:20070831T150000
DTEND;TZID=/mozilla.org/20070129_1/Europe/Berlin:20070831T160000
LOCATION:Test-Adresse
END:VEVENT
END:VCALENDAR
Als Kompromiss werde ich jetzt versuchen alle Termine als VCS Einzeltermin abzulegen.
Da keiner meiner Bekannten mit SunBird arbeitet (obwohl das Programm gut aussieht), muss das einfach an der Stelle reichen. Somit kann ich die Dateien beim PalmDesktop und mein Kollege mit Outlook verwenden.
Windows Win7, OpenOffice 4.x, LibreOffice 4.x

SüdSauerland
***
Beiträge: 86
Registriert: Di, 07.08.2007 21:04

Re: Von Calc zu VCS

Beitrag von SüdSauerland »

So, das ging schneller als ich dachte. :)
Hier schon einmal der „Ansatz“ der Datei.

Es werden alle Termine nacheinander abgespeichert.
Dateiname ist immer JJJJMMTT Beschreibung.vcs (Daten von dem entsprechenden Termin)

Hier die Meldungen die das Makro hervorruft. :(
Warnung beim Speichern des Dokuments 2007-08-31-Export.ods : Es wurde nur die aktuelle Tabelle gespeichert.
Wollen Sie die ausgewählte Tabelle löschen ?
Warnung beim Speichern des Dokuments 20080822 Beschreibung 1.vcs : Es wurde nur die aktuelle Tabelle gespeichert.
Wollen Sie die ausgewählte Tabelle löschen ?

usw........

Was nervt, immer die Nachfrage:
„ Wollen Sie die ausgewählte Tabelle löschen ?“ kann man hier im Makro sagen JA ?
Und das „Warnung beim Speichern ........“ kann man hier noch etwas gegen unternehmen ?


Gruß

Andreas
Dateianhänge
2007-08-31-Export.zip
Version 2007-08-31
(12.1 KiB) 178-mal heruntergeladen
Windows Win7, OpenOffice 4.x, LibreOffice 4.x

SüdSauerland
***
Beiträge: 86
Registriert: Di, 07.08.2007 21:04

Re: Von Calc zu VCS

Beitrag von SüdSauerland »

SüdSauerland hat geschrieben: Was nervt, immer die Nachfrage:
„ Wollen Sie die ausgewählte Tabelle löschen ?“ kann man hier im Makro sagen JA ?
Das Problem wurde gelöst. Danke nochmals an Karolus
Dateianhänge
2007-09-07-Export.zip
Version 2007-09-07
(12.19 KiB) 97-mal heruntergeladen
Windows Win7, OpenOffice 4.x, LibreOffice 4.x

SüdSauerland
***
Beiträge: 86
Registriert: Di, 07.08.2007 21:04

Re: Von Calc zu VCS

Beitrag von SüdSauerland »

Hallo zusammen,

nachdem ich noch einige Hilfe bekommen habe, ist jetzt die Version 2007-09-13 fertig.
Bei dieser Version sind die Dialoge beim löschen der Tabelle und beim speichern der Dateien nicht mehr vorhanden.

Es wir nun bei dem Start des Makros der aktuelle Dateiname inkl. Verzeichnis ermittelt und zum Schluss wird die Datei mit diesen Parametern wieder abgelegt (überschrieben). Das hat den Vorteil, dass man die Datei wieder als ODS Datei vorliegen hat wenn das Makro durch ist.


Danke nochmals an alle die geholfen haben !!!


Ps. Gibt es Interesse an einer Version die das Format ICS unterstützt ?
Dateianhänge
2007-09-13-Export.zip
Version 2007-09-13
(12.78 KiB) 157-mal heruntergeladen
Windows Win7, OpenOffice 4.x, LibreOffice 4.x

SüdSauerland
***
Beiträge: 86
Registriert: Di, 07.08.2007 21:04

Re: Von Calc zu VCS

Beitrag von SüdSauerland »

Hallo zusammen,
Anfang des Jahres wollte ich mein Tool "Von Calc zu VCS" nutzen und mir sind hierbei noch Fehler aufgefallen :( .
1.) Einstellige Uhrzeiten wurden nicht korrekt als VCS geschrieben
2.) Sommer und Winterzeit wurden nicht beachtet, somit verschob sich ein Termin schon einmal um eine Stunde.

Diese Fehler sind nun behoben :D .
Sollten euch noch weitere auffallen bitte melden.

Gruß
SüdSauerland

Hier nun die neue Version Stand 01-05-2010
2010-05-01-Export.zip
Version 2010-05-01
(14.99 KiB) 168-mal heruntergeladen
Windows Win7, OpenOffice 4.x, LibreOffice 4.x

Uwe

Re: Von Calc zu VCS

Beitrag von Uwe »

Hallo,
ich bin auf diesen Beitrag gestoßen und habe ein vergleichbares Makro geschrieben.

Dies exportiert alle Termine in EINE Datei (ICS) und diese kann sowohl von Outlook als auch Thunderbird importiert werden. Das Makro kann sicherlich problemlos noch ergänzt werden (Erinnerung, Notiz, etc.)
Vielleicht hilft es jemanden!

Uwe

Re: Von Calc zu VCS

Beitrag von Uwe »

Sorry ich weiß nicht wie man Anhänge hochlädt :- ( aus diesem Grund hier der Code

Code: Alles auswählen

option explicit

sub WriteICS
    Dim oSheet as Object
    Dim posR as integer, datei as integer
    Dim s as string, d as date
    'Aktuelles Datenblatt
	oSheet = ThisComponent.CurrentController.ActiveSheet
    
    'Datei öffnen, bestehend wird gelöscht
	Datei = Freefile
	open GetExport() for output as Datei
	
	'Schreibt den Header der Kalenderdatei
    print #datei,"BEGIN:VCALENDAR"
    print #datei,"VERSION:2.0"

	'Startzelle #6 setzen
	posR=5
	'ausführen bis zu einer Leerzelle
    Do Until osheet.getCellByPosition(0, posR).string=""
      
      'Testmeldungen
      'msgbox posR & " - " & osheet.getCellByPosition(0, posR).string
      
      'Neuer Termin
      print #datei,"BEGIN:VEVENT"

      print #datei,"SUMMARY:" & Umlaut(osheet.getCellByPosition(4, posR).string)
      print #datei,"CATEGORIES:" & Umlaut(osheet.getCellByPosition(5, posR).string)
 
      'Startdatum
      d=osheet.getCellByPosition(0, posR).value
      s=Format(d, "yyyymmdd")
      
      'Termindauer Tag oder Stunden ?
      If Left(UCase(osheet.getCellByPosition(3, posR).string), 1) = "T" Then
        'Tag
        print #datei, "DTSTART:" & s
       'Mindestdauer 1 Tag
        if osheet.getCellByPosition(2, posR).value<1 then osheet.getCellByPosition(2, posR).value=1
        print #datei, "DTEND:" & Format(d + osheet.getCellByPosition(2, posR).value, "yyyymmdd")
      Else
        'oder Stunden
        print #datei,"DTSTART;" & "TZID=Europe/Berlin:" & s & "T" & Format(osheet.getCellByPosition(1, posR).Value, "hhmmss")
        'Mindestdauer 0,1 h
        If osheet.getCellByPosition(2, posR).Value < 0.1 Then osheet.getCellByPosition(2, posR).Value =0.1
        print #datei, "DTEND;" & s & Format(d + osheet.getCellByPosition(2, posR).Value / 24, "hhmmss")
      End If     
            
      print #datei,"END:VEVENT"
 
       'Nächste Zeille
      posR=posR+1
    Loop
    
    'Datei schließen
    print #datei,"END:VCALENDAR"
    close #datei
    
    MsgBox posr-5 & " Termine in " & Getexport() & " geschrieben!"
end sub

Public Function Umlaut(pString As String) As String
'//********************************************************
'// Diese Funktion ersetzt in einem String sämtliche
'// Umlaute, egal ob gross oder klein geschrieben
'//
'// Original dieser Funktion aus der Tips&Tricks-Sammlung
'// von Reinhard Kraasch (www.kraasch.de)
'//
'//********************************************************
  Dim I As Integer, Ch As String * 1, Ch1 As String * 1, _
  IsUpCase As Boolean, Res As String
  If IsNull(pString) Then Umlaut = Null: Exit Function
  Res = ""
  For I = 1 To Len(pString)
    Ch = Mid(pString, I, 1)
    Ch1 = IIf(I < Len(pString), Mid(pString, I + 1, 1), " ")
    ' Nächstes Zeichen ist kein Kleinbuchstabe:
    IsUpCase = (Asc(Ch1) = Asc(UCase(Ch1)))
    Select Case Asc(Ch)
      Case Asc("Ä"): Res = Res & IIf(IsUpCase, "AE", "Ae")
      Case Asc("Ö"): Res = Res & IIf(IsUpCase, "OE", "Oe")
      Case Asc("Ü"): Res = Res & IIf(IsUpCase, "UE", "Ue")
      Case Asc("ä"): Res = Res & "ae"
      Case Asc("ö"): Res = Res & "oe"
      Case Asc("ü"): Res = Res & "ue"
      Case Asc("ß"): Res = Res & "ss"
      Case Else: Res = Res & Ch
    End Select
  Next I
  Umlaut = Res
End Function

private function GetExport as string
Dim s as String
	' 1 = Windows
	' 3 = MacOS
	' 4 = Unix
	s="export.ics"
	select case GetGUIType()
	  case 1
	     s="c:\puffer\"+s
	  case 4
	     s="/home/"+s
	end select
	GetExport=s
end function
Die Termine beginnen ab Zeile 6 und die Spalten sind wie folgt belegt:

A= Startdtatum
B= Beginn (Uhrzeit, nur bei Stundentermie)
C= Dauer (Tage oder Stunden)
D= Einheit der Dauer bei C (T,t = Tag - sonst in Stunden 1,5 für 1 1/2h)
E= Betreff
F= Kategorie

Also Viel Spaß Uwe

Uwe

Re: Von Calc zu VCS

Beitrag von Uwe »

Nachtrag, da Outlook doch seine Eigenarten hat, hier das überarbeitete Nakro für Outllok und Thunderbird / Lightning:

Das Makro ist sowohl Linux als auch Windoof tauglich! Bitte ggf. den Pfad bei der Funktion GetExport anpassen!

Code: Alles auswählen

option explicit

'Startzelle #6 festlegen
Private const StartZeile=5

sub WriteICS
    Dim oSheet as Object
    Dim posR as integer, outFile as integer
    Dim s as string, d as date, l as long
    'Aktuelles Datenblatt
	oSheet = ThisComponent.CurrentController.ActiveSheet
    
    'outFile öffnen, bestehende wird überschrieben
	outFile = Freefile
	open GetExport() for output as outFile
	
	'Schreibt den Header der Kalenderdatei
    print #outFile,"BEGIN:VCALENDAR"
    print #outFile,"VERSION:2.0"
    'für Outlook
	print #outFile,"METHOD:REQUEST"

	posR=StartZeile
	'ausführen bis zu einer Leerzelle
    Do Until osheet.getCellByPosition(0, posR).string=""
      
      'Testmeldungen
      'msgbox posR & " - " & osheet.getCellByPosition(0, posR).string
      
      'Neuer Termin
      print #outFile,"BEGIN:VEVENT"
      
      'Mindestangaben:
      s=osheet.getCellByPosition(4, posR).string
      'Leere Beschreibung abfangen
      if s="" then s="Keine Angaben ?!?"
      print #outFile,"SUMMARY:" & Umlaut(s)
 
      'Termindauer Tag oder Stunden ?
      If Left(UCase(osheet.getCellByPosition(3, posR).string), 1) = "T" Then
        'Tag
        print #outFile, "DTSTART:" & IcsDateTime(osheet.getCellByPosition(0, posR).value)
       'Mindestdauer 1 Tag
        if osheet.getCellByPosition(2, posR).value<1 then osheet.getCellByPosition(2, posR).value=1
        print #outFile, "DTEND:" & IcsDateTime(osheet.getCellByPosition(0, posR).value + osheet.getCellByPosition(2, posR).value)
      Else
        'oder Stunden
        'Start= Datum + Uhrzeit
        d=osheet.getCellByPosition(0, posR).value + osheet.getCellByPosition(1, posR).Value
        print #outFile,"DTSTART:" & IcsDateTime(d,true)
        'Mindestdauer 0,1 h
        If osheet.getCellByPosition(2, posR).Value < 0.1 Then osheet.getCellByPosition(2, posR).Value =0.1
        print #outFile, "DTEND:" & IcsDateTime(d+osheet.getCellByPosition(2, posR).Value / 24,true)
      End If     

	  'darauf besteht Outlook, insbesondere ist die UID sinnlos, 
	  'da dies offensichtlich von Outlook generiert wird
      print #outFile,"DTSTAMP:" & icsdatetime(now(),true)
	  print #outFile,"UID:"


      'optionale Angaben
     
      'Bemerkung
      s=osheet.getCellByPosition(7, posR).string
      if s<>"" then print #outFile,"DESCRIPTION:" & Umlaut(s)

      'Kategorie
      s=osheet.getCellByPosition(8, posR).string
      if s<>"" then print #outFile,"CATEGORIES:" & Umlaut(s)
      
      'Alarm
      d=osheet.getCellByPosition(5, posR).value
      if d>0 then
        print #outFile,"BEGIN:VALARM"
        print #outFile,"ACTION:DISPLAY"
        'Alarmzeitraum Tag oder Stunden ?
        If Left(UCase(osheet.getCellByPosition(6, posR).string), 1) = "T" Then
          'Nur ganze Tage
          l=d \ 1
          if l<1 then l=1
          s=l & "D"
        else
          s="T"
          'Stunden
          l=d \ 1
          if l>0 then s=s & l & "H"
          'Minuten
          l=(d-l)*60
          if l>0 then s=s & l & "M"          
        endif
        print #outFile,"TRIGGER;VALUE=DURATION:-P" & s
        print #outFile,"END:VALARM"
      end if

      print #outFile,"END:VEVENT"
 
      'Nächste Zeile
      posR=posR+1
    Loop
    
    'outFile schließen
    print #outFile,"END:VCALENDAR"
    close #outFile
    
    MsgBox posr-StartZeile & " Termine in " & Getexport() & " geschrieben!"
end sub

Public Function Umlaut(pString As String) As String
'//********************************************************
'// Diese Funktion ersetzt in einem String sämtliche
'// Umlaute, egal ob gross oder klein geschrieben
'//
'// Original dieser Funktion aus der Tips&Tricks-Sammlung
'// von Reinhard Kraasch (www.kraasch.de)
'//
'//********************************************************
  Dim I As Integer, Ch As String * 1, Ch1 As String * 1, _
  IsUpCase As Boolean, Res As String
  If IsNull(pString) Then Umlaut = Null: Exit Function
  Res = ""
  For I = 1 To Len(pString)
    Ch = Mid(pString, I, 1)
    Ch1 = IIf(I < Len(pString), Mid(pString, I + 1, 1), " ")
    ' Nächstes Zeichen ist kein Kleinbuchstabe:
    IsUpCase = (Asc(Ch1) = Asc(UCase(Ch1)))
    Select Case Asc(Ch)
      Case Asc("Ä"): Res = Res & IIf(IsUpCase, "AE", "Ae")
      Case Asc("Ö"): Res = Res & IIf(IsUpCase, "OE", "Oe")
      Case Asc("Ü"): Res = Res & IIf(IsUpCase, "UE", "Ue")
      Case Asc("ä"): Res = Res & "ae"
      Case Asc("ö"): Res = Res & "oe"
      Case Asc("ü"): Res = Res & "ue"
      Case Asc("ß"): Res = Res & "ss"
      Case Else: Res = Res & Ch
    End Select
  Next I
  Umlaut = Res
End Function

private function GetExport as string
Dim s as String
	' 1 = Windows
	' 3 = MacOS
	' 4 = Unix
	s="export.ics"
	select case GetGUIType()
	  case 1
	     s="c:\puffer\"+s
	  case 4
	     s="/tmp/"+s
	end select
	GetExport=s
end function

private function IcsDateTime(Datum as Date, optional Uhrzeit as boolean) as string
  if ismissing(Uhrzeit) then Uhrzeit=false
  IcsDateTime=Format(Datum, "yyyymmdd") &  iif(Uhrzeit, "T" & Format(datum , "hhmmss"),"")
end function
Viele Grüße

Uwe

SüdSauerland
***
Beiträge: 86
Registriert: Di, 07.08.2007 21:04

Re: Von Calc zu VCS

Beitrag von SüdSauerland »

Hallo Uwe,

pack doch mal die komplette Datei ins Forum.
Einfach die Datei Zip'en zB. mit http://www.7-zip.org und dann unten auf >>Dateianhang hochladen<< gehen und schon hast du die Datei im Forum.

Gruß SüdSauerland
Windows Win7, OpenOffice 4.x, LibreOffice 4.x

Gast

Re: Von Calc zu VCS

Beitrag von Gast »

Hallo,
Sorry ich weiß nicht wie man Anhänge hochlädt
auf >>Dateianhang hochladen<< gehen
Uwe ist nicht angemeldet und bekommt deswegen 'Datei hochladen' gar nicht zu Gesicht.
@Uwe
Melde dich hier an, wenn du Anhänge hochladen möchtest.
Sonst - irgendwo im Netz speichern, z.b. http://www.file-upload.net/
und den Link hier mitteilen.

mfG

Antworten