🍀 Das LibreOffice Forum braucht HEUTE Ihre Hilfe! 🍀
❤️ Spenden Sie jetzt und sichern Sie die Zukunft unseres LibreOffice-Forums ❤️
Ihre Spende hilft, die Community offen, werbefrei (bei Registrierung) und lebendig zu halten. Vielen lieben Dank!

🙏 DANKE >> << DANKE 🙏

>> Das LibreOffice-Forum lebt von Ihnen – und von vielen Experten, die freiwillig und kostenlos ihr Wissen teilen.<<
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

makrobasierter Datenimport aus csv Datei

CALC ist die Tabellenkalkulation, die Sie immer wollten.
Antworten
CIS
Beiträge: 4
Registriert: Do 16. Jan 2014, 11:12

makrobasierter Datenimport aus csv Datei

Beitrag von CIS » Sa 10. Mai 2014, 09:31

Hallo liebe Community :)

Ich habe da ein recht kompliziertes Problem, was ich gerne durch ein Makro lösen würde.

Folgende Aufgabenstellung:
Jede Woche erhält man eine CSV Datei import.csv (1 Datenblatt). Die hier enthaltenen Datensätze sollen in eine erfassung.xls (8 Datenblätter) importiert werden, allerdings nicht 1:1. Vielmehr sollen nur einzelne Spalten, teilweise nach vorheriger verkettung und berechnung, in spezielle zielspalten eines einzigen datenblattes der datei erfassung.xls.

Leider habe ich noch nie ein Makro unter LO bzw OOO gescripted, beherrsche aber andere Script- & Programmiersprachen. Da das mein erstes Makro wird und der Quellcode, sowie ich nach ertsen Stöbern in den Dokus erahnen darf, nicht gerade klein werden dürfte, wollte ich dieses Vorhaben mal mit erfahrenen Hasen besprechen :idea:

Die Dateien:
Die import.csv hat folgende relevante Spalten:
A Buchungstag
C Umsatzart
D Buchungstext <-- in Abh. der Umsatzart ist hier der Empfänger/Auftraggeber genannt
E Betrag <-- in Abh. des Vorzeichens eine Einnahme oder Ausgabe

Die erfassung.xls...
... hat u.a. die gleich aufgebauten Datenblätter "Rechnungsausgang" und "Rechnunsgeingang". Einige davon befüllen sich selbst (Formeln) anderere sollen wie folgt durch das Makro befüllt werden. Das Makro soll entscheiden können, ob ein Eintrag in das Datenblatt "Rechnungseingang" oder Rechnungsausgang" soll:

D Buchungstag -> soll 1:1 von Buchungstag A übernommen werden
F Empfänger -> Wenn Umsatzart C = "Lastschrift" oder "Gutschrift" Dann Wert aus Buchungstext D per Stringvergleich mit Datenbereich in Zieltabelle
G Bemerkung -> soll 1:1 von Buchungstext D übernommen werden
H netto -> soll standartmäßig dem Betrag E abzgl 19% MWST (erstmal)
I MWST -> soll "19%" gesetzt werden standartmäßig (erstmal)


Erste Rezeptidee:
Ich persönlich würde jetzt nach folgendem Prinzip vorgehen (Was meint Ihr ?):
1. Um dem Problem mit der unterschiedlichen Anordnung von Spalten übersichtlich zu begegnen, die relevanten Werte aus der Quelldatei erstmal in ein entsprechendes Array einlesen
2. Dieses Array dann zeilenweise in die Zieldatei schreiben

Logik:

Code: Alles auswählen

lese import.csv zeilenweise in ein array "importwerte";
erstelle ein weiteres array "angepasstewerte";
#main
{
  für jeden zeile in array "importwerte"
  {
    schreibe wie folgt eie zeile in angepasste werte
    {
      angepasstewerte[x][Buchungstag] = importwerte[x][Buchungstag];
      wenn ((importwerte[x][Umsatzart] == "Lastschrift") ODER (importwerte[x][Umsatzart] == "Gutschrift") ODER (importwerte[x][Umsatzart] == "Überweisung"))
      {
	angepasstewerte[x][empfänger] = empfängersuche(importwerte[x][Buchungstext];
      } sonst {
      angepasstewerte[x][empfänger] = "Barkasse"
      }
      angepasstewerte[x][bemerkung] = importwerte[x][Buchungstext]
      angepasstewerte[x][MWST] = "19%"
      angepasstewerte[x][netto] = importwerte[x][betrag] * 0,84
    }
  }
  erstelle variable letzter-eingang;
  erstelle variable letzter-ausgang;
  letzter-eingang = ermittle erste leere zelle in spalte D datenblatt "Rechnungseingang"
  letzter-eingang = ermittle erste leere zelle in spalte D datenblatt "Rechnungseingang"
  
  für jede zeile in array "importwerte"
  {
    wenn(importwerte[x][netto] < 0)
    {
      
      gehe in zeile "letzter-ausgang" von datenblatt "Rechnungsausgang"
      spaltenweise die vorgefertigten werte aus array index in zielspalten einfügen    
      letzter-ausgang += 1;
    } sonst {
    
      gehe in zeile "letzter-ausgang" von datenblatt "Rechnungsausgang"
      spaltenweise die vorgefertigten werte aus array index in zielspalten einfügen    
      letzter-eingang += 1;
    }
  }
  
  
}

function empfängersuche(string zudurchsuchen)
{
  lese bereich a0-a45 aus datenblatt "stammdaten" in array "kontakte";
  für jeden "eintrag" in "kontakte"
  {
    wenn "eintrag" in "zudurchsuchen" enthalten
    {
      funktion mit rückgabewert "eintrag" beenden;
    }
  }
}
So ungefähr versuche ich anhand der Dokus im Web mal zu basteln ^^

paljass
* LO-Experte *
Beiträge: 702
Registriert: Fr 18. Mär 2011, 15:34

Re: makrobasierter Datenimport aus csv Datei

Beitrag von paljass » Sa 10. Mai 2014, 10:10

Moin,
was ich gerne durch ein Makro lösen würde.
... und warum fragst du dann nicht im dafür vorgesehenen Forum für Programmierung nach?

Gruß
paljass


An alle, die das LibreOffice-Forum gern nutzen:
Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das laufende.
Einfach per Kreditkarte oder PayPal. Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.



❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten