German Daten aus Datei in Excel einlesen

Wolli013

Well-Known Member
Licensed User
Longtime User
Hallo, ich habe mal wieder eine Frage, kann mann mit VBA eine Datei erstellen mit Daten, die dann in einer Formartierten Excel Tabelle auf dem PC eingelesen werden, so dass die Formatierung erhalten bleibt?

Die Excelltabelle ist immer gleich, also alle Zellen sind bekannt.
Beispiel. A1 soll das Datum rein, A2 der Wohnort, A3 die Kalenderwoche usw.

Ich habe bis jetzt im Forum nichts dazu gefunden.
 

DonManfred

Expert
Licensed User
Longtime User

pucki

Active Member
Licensed User
Grundsätzlich JA.

ich verstehe deine Frage VON B4x NACH Excel.

Ich würde die Daten von b4x einfach als CSV Datei (Text mit Trennzeichen) ausgeben.
Ich würde das mit der "StringUtils" libs unter b4x machen. https://www.b4x.com/android/help/Help_StringUtils_D.htm

Dann unter Excel entweder direkt einlesen. Dazu mit Datei -> öffnen (alle Dateien) die Textdatei öffnen. Im nachfolgenden Assistenten die Einstellungen machen, und schon ist sie drin. Allerdings "nackt" das heißt ohne Design.

Du schreibst die Datei "Formatierung (Design)" ist bekannt.

Dann einfach ein Makro nehmen und nach den Import die Zellen formatieren. Wenn es nur einen Einfach-"Norm-Formatierung" ist, kannst du es machen in den du einmal mit "aufzeichnen" das Makro aufzeichnest. Bei größeren und spezialen Änderungen im Design musst du Programmieren unter VBA oder Visual-Basic mit Objektsteuerung.

Ich hab so was schon oft gemacht, allerdings mag ich das VBA nicht, und regele das dann mit Visual Basic (2010) und der Objektsteuerung.

Gruß

Pucki

ps.: In meinen aktuell ersten Prg. unter b4x nutze ich die Libs. um mit VB erstellte Tabellen in ein Array unter b4x einzulesen.
pps : Es mag sicher eleganter Lösungen geben. Aber wenn ich eh 2 Systeme brauche .......
 

Wolli013

Well-Known Member
Licensed User
Longtime User
Erstmal vielen Dank für eure Mithilfe.
Ich muss mich aber nochmal verständlicher ausdrücken was ich vorhabe.

Es gibt eine fertig erstellte Excel Tabelle die sich auf einem Windows PC befindet, wo auch formatierungen für Uhrzeit berechnungen, Datum, Texte usw. enthalten sind.
Also leer ohne Einträge.
Ich möchte jetzt per App Daten eingeben, abspeichern usw.
Dann möchte ich per E-Mail die Datei versenden. Sie soll dann in die geöffnete, leere, Exceltabelle auf den PC eingelesen werden, so dass die Formatierungen der Exceltabelle greifen, weil in B4A bekomme ich es nicht hin, eine Exceltabelle mit Formatierungen (Uhrzeitberechnungen, Std. usw.) zu erstellen.

Ich hoffe so versteht man es besser was ich genau vorhabe.
 

mw71

Active Member
Licensed User
Longtime User
Sie soll dann in die geöffnete, leere, Exceltabelle auf den PC eingelesen werden

Moin,

dann wäre, wie schon geschrieben, eine Möglichkeit die Daten aus B4A per CSV (z.B., oder anderes geeignetes Format) zu exportieren und dann in die Excel Tabelle per Makro einlesen zu lassen.
 

Wolli013

Well-Known Member
Licensed User
Longtime User
Ich habe mal die erstellte Excel Datei angefügt.
Die Endung muss in .xlsx umbenannt werden, ich konnte die Datei sonst nicht hochladen.
Wie gesagt und darein sollen dann einfach die Daten aus einer Datei eingelesen werden.
 

Attachments

  • Wochenbericht.txt
    12.8 KB · Views: 292
Last edited:

pucki

Active Member
Licensed User
Ein Makro
B4X:
' Warnung :  Dies ist ein EXCEL- MAKRO CODE
'----------------------------------------------------------------------
     ChDir "D:\puffer" ' ins verzeichnis wechseln wo die b4x Datei ist
        ' import befehl mit @ als Trennzeichen
    Workbooks.OpenText Filename:="D:\puffer\puffer.csv", _
        Origin:=-535, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
        xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
        Comma:=False, Space:=False, Other:=True, OtherChar:="@", FieldInfo:= _
        Array(Array(1, 1), Array(2, 1), Array(3, 1)), TrailingMinusNumbers:=True
   
    Rows("2:656").Select ' Makieren der Tabelle ab Zeile 2 bis zeile 656 
    Selection.Copy ' copieren
    Sheets("meine_fertigen_tabelle").Select ' Ziel Tabelle auswählen
    Range("A2").Select ' 1 Zelle der Ziel Tabelle makierern
    Application.CutCopyMode = False
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False  ' Einfügen der Inhalte ("nur Werte damit die Datei nicht zerstört wird)
Sheets("Puffer").Select ' die nackte import-tabelle auswählen 
  ActiveWindow.SelectedSheets.Delete ' und killen ;)
    End Sub

Dies wäre so ein Makro. Es importiert eine Datei wo die einzelnen Felder mit @ getrennt sind, in eine Tabelle "Puffer", dort wir ab Zelle 2 kopiert, und die Werte mit INHALT EINFÜGEN als WERTE eingefügt. Wichtig ist : KEIN EINFÜGEN BEFEHL sondern INHALT EINFÜGEN AUS DEN PULLDOWN (Rechte Maustaste). !!! In den Fenster dann WERTE auswählen. (Was das Makro übrigens macht.)

Von Hand mache ich die Befehle des Makros in ca. 20-30 Sek. Kein Witz.

Geht folgender Massen.

Datei öffnen -> alle Dateien -> Puffer.csv auswählen. ' Halt eine reine Text-Datei.
Im Assistent :
1. Fenster "Getrennt Auswählen"
2. Fenster "andere anklicken und ein @ eingeben
FERTIG Stellen klicken

Zeile 2 auswählen . Shift-Strg drücken und halten. Dann ENDE Taste drücken ' Mackiert ab Zeile 2 alles
STRG - C Drücken ' kopiert den Bereich
Ziel-Tabelle anklicken
2 Zeile 1 Zelle anklicken
in der Zelle RECHTE MAUSTASTE klicken, INHALTE EINFÜGEN - Punkt auf WERTE und OK klicken.

kleine Info. Durch den Wechsel auf "WERTE" wird, die Formatierung der Zieltabelle NICHT geändert. Man kann auf diese Weise in den man so Zellen auf sich selbst kopiert, Formeln verschwinden lassen. Ich mache das oft wenn ich die Inhalte mit Sverweis gefüllt habe, und eine Aktualisierung nicht mehr erforderlich ist.

FERTIG.

Das alles. ;)

Gruß

Pucki
 

Wolli013

Well-Known Member
Licensed User
Longtime User
Kurze Frage noch, wo speicher ich so ein Makro ab?
In Excel habe ich nur gefunden das man es sich anzeigen lassen kann aber nicht wo man es abspeichert.
 

Wolli013

Well-Known Member
Licensed User
Longtime User
Also per Hand geht es nicht, er sagt immer das es unterschiedliche Zellenbreiten sind.
Nehme ich eine Zelle wo keine breiten geändert wurden dann geht es.
Gibt es da einen Trick?
 

pucki

Active Member
Licensed User
Makros werden auf 2 arten gespeichert.

Entweder in der Datei selbst (dann zählt es auch nur für die Datei). oder in der Personal.xls . Die legt man in Excelstart und schon sind die Markos immer verfügbar. Wo du die speicherst legst du beim erstellen des Makros fest. Einfach im Menü "makros - > Aufzeichnen" wählen. Im Fenster kannst du dann die Einstellungen hinterlegen.

Also per Hand geht es nicht, er sagt immer das es unterschiedliche Zellenbreiten sind.
Nehme ich eine Zelle wo keine breiten geändert wurden dann geht es.
Gibt es da einen Trick?

JA INHALTE EINFÜGEN. Das ist ein BEFEHL der NIX mit Einfügen (auch STRG-V) zu tun hat. RECHTE MAUSTASTE !!!!!!!! Drücken wenn was in der Zwischenablage ist.

http://www.pctipp.ch/tipps-tricks/kummerkasten/office/artikel/excel-inhalte-einfuegen-werte-statt-formeln-29262/
Dort wird es auch nochmal erklärt. !!! Der letzte Satz ist allerdings Schwachsinn da direkte Werte eh kein Bezug haben ;)

ich hab geschrieben du sollst auf die Zeile klicken (das bedeutet du klickst IMMER die 2 <- zwei an. NICHT die Zelle). Und NICHT Einfügen. SONDERN INHALTE EINFÜGEN - PUNKT AUF WERTE . !!! Das ist was ganz anders.

Einfach genau so klicken wie ich es oben in den "von Hand beschrieben habe" das geht perfekt. *tested*

Von Hand mache ich die Befehle des Makros in ca. 20-30 Sek. Kein Witz.
Ab da.

Gruß

Pucki
 

Wolli013

Well-Known Member
Licensed User
Longtime User
Es geht jetzt, besten Dank für deine Hilfe.
Ich musste immer Werte und Zahlen auswählen sonst geht es nicht.
 

pucki

Active Member
Licensed User
Ist ja Sinn der Operation.

Dadurch behält man ja die Formatierung.

Beim normalen Kopieren Kopiert Excel die GESAMTE Zelle(n). Also ALLE Eigenschaften. Berechnungen werden dabei "angepasst" im Bezug. Wenn man eine Zelle kopieren will und den Bezug auf die selbe Zelle wie vorher haben will muss man die Formel in der Zelle fixen.

z.b.
a1 = 10 ' wert
a2 = a1 * 10 ' ergibt 100

wenn du die Zelle a2 nun nach b2 kopiert ergibt der Wert 0 weil in der Formel der Zelle steht "b1 * 10" . Excel hat den Bezug angepasst.

Willst du das verhindern weil in a1 z.b. eine Preiserhöhung steht machst du folgendes.

a2 = $a$1 * 10

wenn du die Zelle a2 nun nach b2 kopiert ergibt der Wert 100 weil in der Formel der Zelle steht " $a$1 * 100" . Excel hat den Bezug angepasst.

INHALTE Einfügen ist was besonders.

Da wird NUR der Inhalt der Zellen ausgetauscht und zwar so wie DU das willst. Kannst'e alles im Fenster einstellen. Sogar die Richtung ändern (Transponieren).

Bei deinen speziellen Problem hast du ja EINE Tabelle die du "schön" gemacht hast. Also Schriftart, Zellenhöhe/Breite / und so weiter. Fügst du nun mit Inhalte einfügen -> Werte neue Zahlen ein, ist das das selbe als wenn du sie von Hand eintippst.

Soviel zu einen kleinen Excel-Kurs wie funktioniert Excel ;) Und glaub mir das kopieren in Excel muss man echt üben ich hab da schon mindestens 1000ende Fehler gesehen.

Du kannst sogar bei "suchen und ersetzen" das $ Zeichen in der Formel wieder entfernen ;)

Wichtiger Hinweis : Achte darauf das du kein Komma-Fehler hast. Das testest du in den du 2-3 Zellen markierst. Excel zeigt dir dann unten rechts die Summe an, wenn alles ok ist.

Gruß

Pucki

ps. : Sorry wenn ich es so genau erkläre aber ich halt dich für einen Anfänger in Sachen Excel. Ist nicht böse gemeint ;), ich bin auch Anfänger in B4x + B4r. ;)
 
Top