Daten aus mehreren Excelspalten in Textdatei übernehmen
Hallo,
ich habe eine Libre-Office Calc-Datei (jedoch als .xlsx gespeichert) mit Zeitangaben (z.B. 04:38), die automatisch addiert werden.
Die Ergebnisse der Zeitangaben werden automatisch in eine andere Spalte "H" übernommen.
In Spalte "G" stehen jedoch auch noch Einträge (G7 - G78).
Nun sollen die Einträge aus den Spalten "G + H" (also G7 - H78) zusammengeführt und dann in eine Textdatei (.txt) übertragen werden.
Meine Lösungsversuche bisher:
Nun habe ich mit dem Befehl "=VERKETTEN(G7;H7)" in der Zelle J7 und dann runterziehen bis J78 schon mal Teil 1 geschafft.
Leider werden die Zeitangaben nicht korrekt übernommen. In den entsprechenden Zellen steht nun z.B. "INDEX 01 0,1875".
Dort sollte aber eigentlich stehen "INDEX 01 04:30:00".
Ich habe jetzt alle Zellen, die diesen Eintrag enthalten mal mit "Uhrzeit" formatiert. Aber da änderte sich nichts...
Offenbar werden die Zeitangaben mit "Dezimalzahl Standard" oder "Text" übertragen. Ich suchte nun also eine Möglichkeit, zunächst mal über eine Hilfsspalte die Zeitangaben in Dezimalzahlen zu übernehmen, aber eben so, wie Uhrzeiten geschrieben werden --> 04:30:00
Das wiederum habe ich eben mit der Formel "=TEXT(H15; "hh:mm:ss")" versucht, die auch zunächst mal funktioniert.
Jedoch nur bis zum Eintrag "21:44:00". Ab dem folgenden Eintrag springt der Eintrag quasi auf den nächsten Tag um.
Da soll nämlich eigentlich "27:05:00" stehen. Aber es erscheint der Text "03:05:00".
OK... auch das gelölst
Mit der Formel "=TEXT(H15; "[HH]:MM:SS")" geht es. Jetzt steht dort "27:05:00".
Aber wie übertrage ich jetzt den Inhalt der verketteten Spalte in eine Textdatei (.txt)?
Könnt Ihr hier weiterhelfen?
Danke und Grüße,
BN
ich habe eine Libre-Office Calc-Datei (jedoch als .xlsx gespeichert) mit Zeitangaben (z.B. 04:38), die automatisch addiert werden.
Die Ergebnisse der Zeitangaben werden automatisch in eine andere Spalte "H" übernommen.
In Spalte "G" stehen jedoch auch noch Einträge (G7 - G78).
Nun sollen die Einträge aus den Spalten "G + H" (also G7 - H78) zusammengeführt und dann in eine Textdatei (.txt) übertragen werden.
Meine Lösungsversuche bisher:
Nun habe ich mit dem Befehl "=VERKETTEN(G7;H7)" in der Zelle J7 und dann runterziehen bis J78 schon mal Teil 1 geschafft.
Leider werden die Zeitangaben nicht korrekt übernommen. In den entsprechenden Zellen steht nun z.B. "INDEX 01 0,1875".
Dort sollte aber eigentlich stehen "INDEX 01 04:30:00".
Ich habe jetzt alle Zellen, die diesen Eintrag enthalten mal mit "Uhrzeit" formatiert. Aber da änderte sich nichts...
Offenbar werden die Zeitangaben mit "Dezimalzahl Standard" oder "Text" übertragen. Ich suchte nun also eine Möglichkeit, zunächst mal über eine Hilfsspalte die Zeitangaben in Dezimalzahlen zu übernehmen, aber eben so, wie Uhrzeiten geschrieben werden --> 04:30:00
Das wiederum habe ich eben mit der Formel "=TEXT(H15; "hh:mm:ss")" versucht, die auch zunächst mal funktioniert.
Jedoch nur bis zum Eintrag "21:44:00". Ab dem folgenden Eintrag springt der Eintrag quasi auf den nächsten Tag um.
Da soll nämlich eigentlich "27:05:00" stehen. Aber es erscheint der Text "03:05:00".
OK... auch das gelölst
Mit der Formel "=TEXT(H15; "[HH]:MM:SS")" geht es. Jetzt steht dort "27:05:00".
Aber wie übertrage ich jetzt den Inhalt der verketteten Spalte in eine Textdatei (.txt)?
Könnt Ihr hier weiterhelfen?
Danke und Grüße,
BN
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 668571
Url: https://administrator.de/contentid/668571
Ausgedruckt am: 18.11.2024 um 21:11 Uhr
28 Kommentare
Neuester Kommentar
Aber wie übertrage ich jetzt den Inhalt der verketteten Spalte in eine Textdatei (.txt)?
Von Hand ??Markieren
CTRL+C
Textdatei öffnen
CTRL+V
Oder Speichern unter > *.csv
usw. usw.
Automatisiert, z.B. Powershell
$mappe = "D:\Ordner\Mappe.xlsx"
$export = "D:\Ordner\export.txt"
if(!(Get-Module -ListAvailable -Name ImportExcel)){
Install-Module ImportExcel -Scope CurrentUser
}
(Import-Excel -Path $mappe -StartColumn 10 -EndColumn 10 -NoHeader).P1 | set-content -Path $export
$mappe = "D:\Ordner\Mappe.xlsx"
$export = "D:\Ordner\export.txt"
Add-Type -AssemblyName Microsoft.Office.Interop.Excel
$objExcel = New-Object -Com Excel.Application -Property @{Visible = $true}
$wb = $objExcel.Workbooks.Open($mappe)
$ws = $wb.Sheets.Item(1)
$ws.Range("J1:J" + $ws.Cells($ws.Rows.Count,"J").End([Microsoft.Office.Interop.Excel.XlDirection]::xlUp).Row).Value() | set-content -Path $export
[void][System.Runtime.InteropServices.Marshal]::ReleaseComObject($objExcel)
$wb.Close($false)
$ojExcel.Quit()
Sub ExportToText()
Dim fso As Object, txtFile As Object, r as long, c as long
Const FILEPATH = "D:\Daten\export.txt"
Set fso = CreateObject("Scripting.FileSystemObject")
Set txtFile = fso.OpenTextFile(FILEPATH, 2, True)
' export data to textfile from first sheet
With ThisComponent.Sheets(0)
' export Range J1:J15 of the sheet
set exportRange = .getCellRangeByName("J1:J15").getRangeAddress()
for c = exportRange.startColumn to exportRange.endColumn
for r = exportRange.startRow to exportRange.endRow
txtFile.WriteLine(.getCellByPosition(c,r).getString())
Next
Next
End with
' close text file
txtFile.Close
Set fso = Nothing
Set txtFile = Nothing
End Sub
usw.
Einfach nur den Cursor während der Formeleingabe auf die gewünschte Zelle in dem Blatt bewegen schon stehts da von selbst
=TEXT(Tabelle1!C8;"[HH]:MM:SS")
Klappt hier einwandfrei 😋
Auch der Code wurde getestet und funktioniert ebenso problemlos.
weil dort kein Hinweis darauf ist, dass der Bereich im Tabellenblatt 2 zu finden ist
Einfach Code in Ruhe Zeile für Zeile lesen und verstehen, dann entdeckst du folgende Zeile: ....With Sheets(1)
Aus ner 1 ne 2 machen schaffst du dann auch noch selbst 😋Auch der Code wurde getestet und funktioniert ebenso problemlos.
Vielleicht liegt es auch daran, dass ich ja mit "Libre Office Calc" arbeite
Joa, die Info hätte in den Eingangspost gehört, da erklären sich auch deine Probleme sofort MS-Excel ≠ LibreOffice, klar das das da so nicht läuft der Code war ausschließlich für MS-Office und läuft dort in der Art nicht muss man erst umschreiben...Zitat von @BN2023:
Es fehlt nur noch eine Lösung für das kopieren des Codes in die Textdatei... vielleicht als Batch?
Nein fehlt nicht, steht doch oben im ersten Post! Erster Code ist Powershell der ist universell für alle xlsx egal ob LibreOffice oder MS Office, kannst du aber auch in ne Batch packen wenn du willst. Es fehlt nur noch eine Lösung für das kopieren des Codes in die Textdatei... vielleicht als Batch?
powershell -EP ByPass -File "D:\script.ps1"
p.s. Habe den VBA/Basic Code an Libre Office im ersten Post angepasst damit er damit funktioniert - wurde hier getestet und funktioniert. Jetzt hast du's ehrlich gesagt auf dem Silbertablett, den Rest kannst du selbst in der Doku nachschlagen ... 🖖
Bitte dann den Thread auch schließen.
Es sei denn, man darf da keine Einträge wie "%USERPROFILE% machen...
Nope darfst du nicht, in Strings wird keine automatische Expansion von Umgebungsvariablen vorgenommen, um das gewünschte zu erreichen schreibst du das stattdessen so ...Dim FILEPATH as String
FILEPATH = Environ("USERPROFILE") & "\Desktop\cuesheet.cue"
Kenne mich mit VBA leider überhaupt nicht aus
Auch du darfst gerne lesen und lernenhttps://help.libreoffice.org/latest/de/text/sbasic/shared/main0601.html? ...
ich habe eine Libre-Office Calc-Datei (jedoch als .xlsx gespeichert)
That's by design wenn du als xlsx speicherst , solche Mappen dürfen per se keine Makros und Steuerelemente haben nur die *.xlsm Varianten dürfen das und deswegen werden die dann entfernt, speichere als *.ods dann lüppt dat auch.Zitat von @BN2023:
Dann werde ich es später einfach auch mal mit *.xlsm testen, ob das auch funktioniert. Ansonsten lasse ich es einfach als *.ods.
Nein das geht aus LibreOffice nicht, *.xlsm ist nur für Mappen mit Makros innerhalb von MS-Office und inkompatibel mit LibreOffice.Dann werde ich es später einfach auch mal mit *.xlsm testen, ob das auch funktioniert. Ansonsten lasse ich es einfach als *.ods.
Du solltest hier also strikt LibreOffice Docs mit Makros von solchen mit MS-Office Makros trennen und auch die Dateiendung entsprechend wählen als *.ods.
LibreOffice "Basic" ≠ MS Office "VBA".
Danke nochmal fürs Helfen...
Bidde.
Einfach den alten Code nehmen der war doch schon für MS-Office gedacht 😉.
Sub Cuesheet
Dim fso As Object, txtFile As Object, cell as Range, FILEPATH as String
FILEPATH = Environ("USERPROFILE") & "\Desktop\cuesheet.cue"
Set fso = CreateObject("Scripting.FileSystemObject")
Set txtFile = fso.OpenTextFile(FILEPATH, 2, True)
With Sheets(2)
For Each cell In .Range("E3:E" & .Cells(Rows.Count, "E").End(xlUp).Row)
txtFile.WriteLine cell.Value
Next
End With
txtFile.Close
Set fso = Nothing
Set txtFile = Nothing
End Sub
Never ending story mal wieder ...
Me out.
CreateObject("WScript.Shell").Run(FILEPATH,1,FALSE)