Formeln sollen nur unter Bedingungen in einem Feld sein.

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Formeln sollen nur unter Bedingungen in einem Feld sein.

Re: Formeln sollen nur unter Bedingungen in einem Feld sein.

von vierviervier » Do, 22.10.2015 08:40

Hallo in die Runde,
kurze Rückmeldung von der Kollegin: IBANs und KTOs wurden in CSV übertragen und von Starmoney importiert, der erste vollautomatisierte Sammler ist durch!!!
Will in absehbarer Zeit auf windows10 umsteigen, das ändert nichts an der Beschreibung des Dateipfades, oder?

Schon merkwürdig, wenn dann alles läuft, sich noch mal zu erinnern, was das für ein Kraftaufwand war und wie viele Leute da größere und kleinere Beiträge dazu geleistet haben.
Deswegen pack ich jetzt wieder meinen virtuellen Champagner aus (gut gekühlt versteht sich) und verteile Gläßer an:

Clag: ohne Deine Hilfe mit den Formeln zum automatisierten anzeigen der aktuellen Datensätze wäre der Versuch ein Makro für den Export zu entwerfen gar nicht möglich gewesen. Sorry, dass ich dann den Weg über die Makro-Aufzeichnung nicht weiter gegangen bin. Es war einfach überzeugend das ganze über den programmierten Code laufen zu lassen, einmal dass die Stabilität noch größer ist (sonst Gefahr, dass mal ein Häkchen anders gesetzt ist und dann das Makro falsch greift) zum anderen hat man noch mehr Gestaltungsmöglichkeiten (Dateinamen) und man kann besser auf Versions-Änderungen auf irgendeiner Ebene reagieren mit kleinen Änderungen im code. Trotzdem hast du mich dadurch mit den Fromular-Steuerelementen in Kontakt gebracht, das war allein schon eine echte Erweiterung für mich. Also vielen Dank noch mal.

Balu: hab mich ja lange gestreubt, mich auf den Weg einzulassen, aber hat sich letztendlich gelohnt und bin jetzt glücklich über 1. die bombenfeste und schlanke Lösung, die auch wirklich meinen pubsigsten Wunsch noch berücksichtigt und 2. meinen ersten ernsthaften Kontakt mit dem Makroschreiben bewirkt hat. Ist zwar alles noch sehr rudimentär (und was Karolus zuletzt wieder vorschlägt ist dann auch wieder jenseits meiner Verständnismöglichkeiten, da mach ich jetzt mal Verschnaufpause, die letzte Version von Balu ist ja perfekt und noch für mich nachvollziehbar), aber jetzt habe ich Zugang und das weiterkommen hängt jetzt von mir ab (und der Zeit die ich habe).
Aber ohne Deine Hilfe hätte meine Kollegin mindestens noch ein Jahr auf die Erleichterung warten können (wenn sie sie überhaupt bekommen hätte). Also großes Dankeschön, auch für die Geduld mit meinen Anfängerproblemen und -fragen, du bis der Vater des Erfolges dieses Themas!

Vielen Dank auch für die Beiträge von Stephan, Karolus und TrueColor und alle anderen, war immer wieder richtig aufbauend, wenn man festgesteckt hat und wieder kommt eine Antwort und es geht weiter.


Ok, das soll genügen, eine Seite 6 im Jahr des Herrn 2015 mag ich nicht verantworten, das geht dann auf deine Kappe, Karolus.

Prost, vierviervier.

Re: Formeln sollen nur unter Bedingungen in einem Feld sein.

von Karolus » Mi, 21.10.2015 17:46

Hallo
Aber einen Doppelpunkt in den Dateinamen einzubauen ist ne blöde Idee.
Stimmt, da hab ich nicht so genau hingeschaut und die übliche Zeitanzeige-konvention genommen - tuts aber ohne meckern auf einem Linuxsystem.
Werde ich trotzdem ändern, danke für den Hinweis!

Karolus

Re: Formeln sollen nur unter Bedingungen in einem Feld sein.

von TrueColor » Mi, 21.10.2015 16:30

Karolus hat geschrieben:

Code: Alles auswählen

[...]spath= dt.strftime(dt.now(),"T:/DOW_Arbeit/Listen_sonstige/"
                                "Listen_CSV/EXPORT_IBAN_"
                                "%Y-%m-%d_%H:%M:%S.csv") 
Aber einen Doppelpunkt in den Dateinamen einzubauen ist ne blöde Idee.

Re: Formeln sollen nur unter Bedingungen in einem Feld sein.

von Karolus » Mi, 21.10.2015 14:53

Hallo

Das wäre im Prinzip alles:

Code: Alles auswählen

import csv
from csv import QUOTE_ALL, QUOTE_MINIMAL
from datetime import datetime as dt



def export_csv(*args):
    spath= dt.strftime(dt.now(),"T:/DOW_Arbeit/Listen_sonstige/"
                                "Listen_CSV/EXPORT_IBAN_"
                                "%Y-%m-%d_%H-%M-%S.csv")
                         #edit Doppelpunkte in der Zeit gegen minus getauscht
    #spath = 'test_csv.csv'
    doc = XSCRIPTCONTEXT.getDocument()
    export_sheet = doc.Sheets.getByName("Tabelle1")
    cursor = export_sheet.createCursor()
    cursor.gotoEndOfUsedArea(True)
    
    with open(spath, 'w')as csvfile:
        writer = csv.writer(csvfile,
                            delimiter=';',
                            quotechar='"',
                            quoting=QUOTE_ALL )
        
        #↓↓ blöder Hack weil .FormulaArray die `echten` Formeln zurückgibt,
        #↓↓ und .DataArray **alle** numerischen Daten als Float mit Dezimal**punkt**
        for r in range(cursor.Rows.Count):
                writer.writerow([cursor.getCellByPosition(c, r).String
                                for c in range(cursor.Columns.Count)]) 

Re: Formeln sollen nur unter Bedingungen in einem Feld sein.

von TrueColor » Mi, 21.10.2015 14:04

Danke für die Info, Karolus.

Re: Formeln sollen nur unter Bedingungen in einem Feld sein.

von Karolus » Mi, 21.10.2015 12:03

Hallo
Ich habe nicht rausgefunden, warum.
Vermutlich weil das grundsätzlich kaputt ist, und ein `mm` im Formatstring eben nicht zweifelsfrei als Monats- oder Minutenanzeige zu interpretieren ist.
so gehts mit eindeutigen Formatierungszeichen
so gehts mit eindeutigen Formatierungszeichen
2015-10-21_10-52-19.png (11.98 KiB) 4904 mal betrachtet
damit ist dann auch folgendes möglich:
nur so zu Demozwecken
nur so zu Demozwecken
2015-10-21_11-44-34.png (27.94 KiB) 4904 mal betrachtet

Re: Formeln sollen nur unter Bedingungen in einem Feld sein.

von vierviervier » Mi, 21.10.2015 10:42

Hallo in die Runde,

kurze Rückmeldung: letzte Version von Balu läuft bisher einwandfrei und in makelloser Form.
Bei dem Probe-lauf in Calc mit der Form mit Leerzeichen wird beim Datum nur der Monat korrekt angezeigt, da hast du ja schon gesagt, dass das nicht läuft.

Hier noch mal für zukünftige Generationen der gesammt Code:

Code: Alles auswählen

REM Variablen deklaration.
   Dim oDok as Object
   Dim oExport as Object, oExternExportCSV as Object, oExterneCSV as Object
   Dim aExtDatArray()
   Dim sErmittlungsBlatt as String, sDatenBereich as String
   Dim myFPq(0) as New com.sun.star.beans.PropertyValue
   Dim myProps(1) as New com.sun.star.beans.PropertyValue
'
'##############################################################################################################
'
Sub ErzeugeExportDaten
REM Tabellenblatt Variablennamen definition.
   oDok = ThisComponent
   oExport = oDok.getSheets().getByName("Export")   

'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
REM Neue und leere Datei versteckt erstellen, die dann als CSV gespeichert wird.
'
   myFPq(0).name = "Hidden"
   myFPq(0).Value =  True ' REM wenn man diese versteckte Datei sehen will, einfach True durch False ersetzen.
   oExterneCSV = starDesktop.loadComponentfromURL("private:factory/scalc", "_blank", 0, myFPq())
   oExternExportCSV = oExterneCSV.sheets(0)
   
'--------------------------------------------------------------------------------
' Die Daten vom Blatt *Export* in die neue, leere und versteckte Datei kopieren.
'   
      sErmittlungsBlatt = oExport.name
      Benutzter_Datenbereich REM Aufruf der Sub.

         aExtDatArray = oExport.getCellRangeByName( sDatenBereich ).getDataArray REM Datenbereich einlesen (kopieren).
         oExternExportCSV.getCellRangeByName( sDatenBereich ).setDataArray(aExtDatArray) REM Datenbereich einfügen.
'--------------------------------------------------------------------------------
      Externe_CSV_speichern REM Aufruf der Sub.
'--------------------------------------------------------------------------------
     MsgBox("Ihre Datensätze wurden als CSV-Datei gepeichert." & Chr(13) & "Ihr Computer wünscht Ihnen noch einen schönen Tag.")       
End Sub
'
'##############################################################################################################
'
Sub Externe_CSV_speichern
   Dim sPfad as String
   Dim sCSVname as String
   Dim sCSVzusatz as String
   Dim sSpeicherString as String
   Dim DatumZeit as Date
   
   sPfad = "file:///T:/DOW_Arbeit/Listen_sonstige/Listen_CSV/" REM Den Speicherpfad vorgeben
   sCSVname =  "EXPORT_IBAN_" REM Das ist der Vorname der CSV-Datei. Der Nachname wird bei sCSVzusatz erstellt.
   DatumZeit = Now()
   sCSVzusatz = Format(Now(), "yyyy-mm-dd") & "_" & Format(Now(), "hh-mm-ss") & ".csv"
'--------------------------------------------------------------------------------
      myProps(0).Name = "FilterName"
      myProps(0).Value ="Text - txt - csv (StarCalc)"
      myProps(1).Name="FilterOptions"
      myProps(1).Value = "59,34,ANSI,1,,0,false,true,true,false"
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
         sSpeicherString = sPfad & sCSVname & sCSVzusatz REM Nun wird der Vor- und Nachname der CSV zusammen geschrieben.
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~     
' CSV-Datei speichern und schließen.

         oExterneCSV.storeAsURL(sSpeicherString, myProps()) REM Die CSV wird gespeichert
         oExterneCSV.close(True) REM Die CSV wird geschlossen.
End Sub
'
'##############################################################################################################
'
Sub Benutzter_Datenbereich
Rem Hier wird der benutzte Datenbereich eines Blattes ermittelt, und in der Stringvariable sDatenBereich zurückgegeben.
   oSheet = ThisComponent.getSheets().getByName( sErmittlungsBlatt )
   oCellCursor = oSheet.createCursor()
   oCellCursor.GotoEndOfUsedArea(True)   
   sDatenBereich = REPLACE(oCellCursor.AbsoluteName, "$" & oSheet.Name & ".", "")
End Sub

Muss jetzt noch duch die reale Praxis mit echten KTOs und IBANs + Import in Starmoney auf dem Rechner der Kollegin, dann mach ich Abschluss-Raport + anschließend den Abspann mit großer Lobhudelei und Auflistung aller Beteiligten.

Schöne Grüße, vierviervier.

Re: Formeln sollen nur unter Bedingungen in einem Feld sein.

von TrueColor » Mi, 21.10.2015 10:14

balu hat geschrieben:Quäle mich derzeit noch mit ner starken Erkältung rum, deshalb nur kurz.
Dann wünsch ich dir eine schnelle Gute Besserung!
Ich sagte ja schon das die Sache mit der Datumsformatierung nicht so einfach ist. Aber warum nicht ganz einfach so rum?

Code: Alles auswählen

sCSVzusatz = Format(Now(), "yyyy-mm-dd") & "_" & Format(Now(), "hh-mm-ss")
Interessant, nur den Datums- und den Zeit-Teil voneinander trennen.
Grad getestet. Über die MsgBox wird es korrekt formatiert ausgegeben.
DatumZeit_balu.png
DatumZeit_balu.png (1.85 KiB) 4923 mal betrachtet
Vier hat geschrieben:dass wir uns im Jahr 1905 befinden
Ja, das meinte ich, dass das nicht in Ordnung sein kann. Ich habe nicht rausgefunden, warum. Aber bei yyyymmdd-hhmmss oder der Formatierung von Balu wird ja die korrekte Zeit, incl. führender Nullen, angezeigt.

Re: Formeln sollen nur unter Bedingungen in einem Feld sein.

von balu » Di, 20.10.2015 19:32

Hallo vier³,
wie das in Calc vorher ausprobieren?
Auf zweierlei wegen?
Mit der Funktion =TEXT(), oder aber die Zelle dementsprechend per rechtsklick formatieren.

Code: Alles auswählen

=TEXT(A1;"YYYY-MM-DD")& " - " & TEXT(A2;"HH-MM-SS")
Wenn in A1 ein Datum und in A2 eine Zeit steht, dann diese Formel z.B. in B1 eingeben.

Interessant ist auch folgendes:

Code: Alles auswählen

=TEXT(A1;"YYYY MM DD")& " - " & TEXT(A3;"HH MM SS")
 
Bei der Zeit kann man zwischen den "Einheiten" leerzeichen angeben, und es kommt die korrekte Zeit dabei raus. Aber beim Datum funktioniert das nicht. Probiers mal aus.

Das was in der Formel in Anführungszeichen steht "...." kann man ja auch für die direkte Zellformatierung angeben.



Gruß
balu

Re: Formeln sollen nur unter Bedingungen in einem Feld sein.

von vierviervier » Di, 20.10.2015 16:48

Hallo Balu,
na ja, die Entschuldigung kann ich leider nur halb annehmen, die andere Hälfte geht ja doch auf mich, weil ja nun mal die gezielte Fehlersuche auf Basis der Hinweise, die der Fehler gibt (hier: Endung fehlt) ein Teil des Programmierens ist. Aber man lernt - auch bei der Fehlersuche.

Danke für deinen Vorschlag (im übrigen läuft zZ immer noch dein Original stabil draußen an der Wirklichkeitsfront), und jetzt wieder eine von diesen bösen Anfänger-Fragen: wie das in Calc vorher ausprobieren? (es mit "=" in die Befehlszeile stellen ergibt Err.508, aber das meinst du wahrscheinlich nicht).

Aber kurier dich erst mal aus, ich hoffe ich habe Dich mit meiner fatalen Kombination von Perfektionismus und Programmiertechnischem Analphabetentum nicht ins Bett gebracht

Gute Besserung, vierviervier.

Re: Formeln sollen nur unter Bedingungen in einem Feld sein.

von balu » Di, 20.10.2015 16:33

Hallo.

Quäle mich derzeit noch mit ner starken Erkältung rum, deshalb nur kurz.

Karolus hat geschrieben: damit ihr
Wen meinst Du?

Karolus hat geschrieben: vernünftig*** zu programmieren
Vernünftig und vernünftig sind zwei verschiedene Paar Schuhe.



TrueColor hat geschrieben: Oh, ich glaube, dass ist dann auf meinem Mist gewachsen.
Okay, dann entschuldige ich mich bei dir, vier³.


Ich sagte ja schon das die Sache mit der Datumsformatierung nicht so einfach ist. Aber warum nicht ganz einfach so rum?

Code: Alles auswählen

sCSVzusatz = Format(Now(), "yyyy-mm-dd") & "_" & Format(Now(), "hh-mm-ss")
Tipp am Rande.
Die Formatierung erst mal inCalc ausprobieren.



Gruß
balu

Re: Formeln sollen nur unter Bedingungen in einem Feld sein.

von vierviervier » Di, 20.10.2015 15:17

Hallo True Color,

aber unabhängig von den Strichen ist doch letzter Stand, dass wir uns im Jahr 1905 befinden, oder blick ich nicht mehr durch? Ansonsten gibts noch die Original-Version von balu, aber da sind nur die Minuten mit führenden Null versehen und mein Versuch analog Zeilen für Monat, Tag... reinzuschreiben sind kläglich gescheitert.
Schöne Grüße, vierviervier.

Re: Formeln sollen nur unter Bedingungen in einem Feld sein.

von TrueColor » Di, 20.10.2015 14:37

Karolus hat geschrieben:Mal ganz nebebei gefragt - wie grausam muss der Basic-code eigentlich aussehen, damit ihr eventuell mal darüber nachdenkt diese triviale Geschichte vernünftig*** zu programmieren?
Deine Fußnote fehlt ;-)

Wenn du das auf meine Code beziehst, ich brauchte was, um die einzelnen Teile des Datum-Zeit-Stempels in den Beobachter zu werfen, deswegen so aufgebläht.

Re: Formeln sollen nur unter Bedingungen in einem Feld sein.

von TrueColor » Di, 20.10.2015 14:31

vierviervier hat geschrieben:@truecolor: naja, auf die Striche würde ich jetzt nicht bestehen. Wichtig ist die Reihenfolge Jahr Monat ... und das die fehlenden Nullen ergänzt werden, damit man die Datensätze dann zeitlich mit einem Klick ordnen kann.
Dann lass den ganzen Krampf weg, und mach's, wie oben schon mal beschrieben ;-)

Re: Formeln sollen nur unter Bedingungen in einem Feld sein.

von vierviervier » Di, 20.10.2015 14:22

@truecolor: naja, auf die Striche würde ich jetzt nicht bestehen. Wichtig ist die Reihenfolge Jahr Monat ... und das die fehlenden Nullen ergänzt werden, damit man die Datensätze dann zeitlich mit einem Klick ordnen kann.

@Karolus: ich erinnere mich, du hast mir mal beim Löschen einer Datei per Basic aus der Patsche geholfen; damals wußte ich gar nicht was da passiert und hab nur stur deine Anweisungen ausgeführt. Jetzt hab ich ja zumindest mal den äußeren Rahmen umrissen (IDE), aber das jetzt programmmäßig lösen, da muss ich erst noch ordentlich Zeit investieren, die ich leider momentan einfach nicht habe.

Schöne Grüße, vierviervier

Nach oben