gabrielgn
Goto Top

Bestimmte Excel-Zellen mit PHP auslesen

Hallo Zusammen,
ich habe eine kleine WebSeite, die ständig aktualisierte Daten einer Excel Tabelle braucht. Da ich nicht der Typ bin, für "jeden Tag manuell zu aktualisieren", würde ich gerne das ganze etwas automatisieren. Ich möchte dann nur die Excel Tabelle aktualisieren und mittels PHP wird sich die Seite die nötigen Werte selber auslesen.

Es ist nichts kompliziertes. Ich habe eine Tabelle aus 8 Zeilen und 2 Spalten, die eine gleiche Tabelle in der Excel-Datei wiederspiegelt, so müsste theoretisch nur jede Zelle der Tabelle auf der PHP-Seite mit der gleichen positionierten Zelle in der Excel-Datei referenzieren.

Ich hoffe ihr könnt mir dabei helfen. Vielen Dank im Voraus!

Gab

Content-Key: 34301

Url: https://administrator.de/contentid/34301

Printed on: April 24, 2024 at 23:04 o'clock

Mitglied: 16568
16568 Jun 16, 2006 at 14:28:19 (UTC)
Goto Top
Wieso gehst Du nicht den einfacheren Weg?

Das ganze von Excel selbst (VBA) in eine Textdatei einzulesen.
Sollte jeder mit Klick-und-gut zusammenbringen, und Textdateien mittels PHP einlesen auch.


Lonesome Walker
Member: gabrielgn
gabrielgn Jun 19, 2006 at 14:42:16 (UTC)
Goto Top
Hallo,
ich nochmal...
Ich habe mich heute nochmal mit dieses Problem auseinander gesetzt...Ich kam zwar ein Schritt nach vorn, aber leider noch nicht ans Ziel. Dafür brauche ich möglicherweise eure Hilfe...

Ich habe folgendes VBA-Skript im Internet gefunden und etwas angepasst (Spalten- und Zeilenanzahl):

Sub Export2Txt()
Dim x As Long, i As Integer
Dim Zeile As String
Dim Spalten
Const Zeilenzahl = 8 ' hier Zeilenanzahl der Tabelle angeben
Const Spaltenzahl = 2
' gewünschte Länge der einzelnen Spalten (Der 1. Wert 0 wird ignoriert, muss aber aus technischen Gründen sein)
Spalten = Array(0, 8, 6)

Open "test.txt" For Output As #1 ' Zieldatei öffnen

For x = 1 To Zeilenzahl ' alle angegebene Zeilen abarbeiten
Zeile = ""
For i = 1 To Spaltenzahl ' alle angegebene Spalten abarbeiten
If Len(Cells(x, i)) < Spalten(i) Then ' wenn Zelleninhalt kleiner als gewünschte Spaltenbreite
Zeile = Zeile & Cells(x, i) & Space(Spalten(i) - Len(Cells(x, i))) ' mit Leerzeichen auffüllen
Else ' sonst
Zeile = Zeile & Left(Cells(x, i), Spalten(i)) ' auf gewünschte Länge abschneiden
End If
Next i
Print #1, Zeile ' Zeile in Textdatei schreiben
Next x

' Datei schliessen
Close #1
End Sub


Leider produziert dieses Skript nichts wenn ich es ausführe (ich habe auch versucht die test.txt vor der Ausführung zu erstellen...trotzdem erfolgslos..)
Ehrlich gesagt, auch wenn ich keine Ahnung von Excel-VBA habe, fehlt mir irgendwo im code die Angabe von was exportiert werden soll...
Die Tabelle, die ich exportieren möchte ist, wie im Code beschrieben, 8 x 2 Groß... also keine riesen Sache...
Kann mir jemand bitte weiterhelfen?
Danke im Voraus!
Mitglied: 16568
16568 Jun 19, 2006 at 16:38:57 (UTC)
Goto Top
face-big-smile Das is lustich...

Erst mal solltest Du die Textdatei definieren, ungefähr so:

Dim TextObjekt, TextDatei

    Set TextObjekt = CreateObject("Scripting.FileSystemObject")  
    On Error Resume Next
    Set TextDatei = TextObjekt.CreateTextFile("C:/Temp/Test.txt", True)  
    If Err Then Exit Sub
        
    #hier Deine Operationen ...
    
    TextDatei.Close
    Set TextObjekt = Nothing

Und dann solltest Du das ganze in die Sub auto_close() setzen, damit es immer am Ende, wenn Du die Excel-Tabelle schließt, ausgeführt wird, und Du somit immer aktuelle Daten hast.


Lonesome Walker
Member: gabrielgn
gabrielgn Jun 19, 2006 at 17:07:09 (UTC)
Goto Top
Hallo,
danke für deine Hilfe. Ich weiss es ist lustig wenn jemand der keine Ahnung hat was versucht...

Nun habe ich mein Code mit deinen Ergänzungen gefüllt... doch er will trotzdem nicht funktionieren... woran kann es liegen?!

Sub Export2Txt()
Dim TextObjekt, TextDatei

Set TextObjekt = CreateObject("Scripting.FileSystemObject")
On Error Resume Next
Set TextDatei = TextObjekt.CreateTextFile("C:/test.txt", True)
If Err Then Exit Sub

Dim x As Long, i As Integer
Dim Zeile As String
Dim Spalten
Const Zeilenzahl = 8 ' hier Zeilenanzahl der Tabelle angeben
Const Spaltenzahl = 2
' gewünschte Länge der einzelnen Spalten (Der 1. Wert 0 wird ignoriert, muss aber aus technischen Gründen sein)
Spalten = Array(0, 8, 6)

Open "test.txt" For Output As #1 ' Zieldatei öffnen

For x = 1 To Zeilenzahl ' alle angegebene Zeilen abarbeiten
Zeile = ""
For i = 1 To Spaltenzahl ' alle angegebene Spalten abarbeiten
If Len(Cells(x, i)) < Spalten(i) Then ' wenn Zelleninhalt kleiner als gewünschte Spaltenbreite
Zeile = Zeile & Cells(x, i) & Space(Spalten(i) - Len(Cells(x, i))) ' mit Leerzeichen auffüllen
Else ' sonst
Zeile = Zeile & Left(Cells(x, i), Spalten(i)) ' auf gewünschte Länge abschneiden
End If
Next i
Print #1, Zeile ' Zeile in Textdatei schreiben
Next x

TextDatei.Close
Set TextObjekt = Nothing
' Datei schliessen
Close #1
End Sub


Die Textdatei wird zwar generiert, doch sie ist leer.
Mitglied: 16568
16568 Jun 19, 2006 at 17:18:04 (UTC)
Goto Top
Ja, welches Tabellenblatt soll er denn nehmen?

Nicht böse gemeint, aber ich würde Dein Profil mal anpassen.
Ein Programmierer sieht den Fehler in Deinem Quelltext nämlich SOFORT.


Lonesome Walker
Member: gabrielgn
gabrielgn Jun 19, 2006 at 17:52:15 (UTC)
Goto Top
Im ersten Beitrag von mir steht:

"Ehrlich gesagt, auch wenn ich keine Ahnung von Excel-VBA habe, fehlt mir irgendwo im code die Angabe von was exportiert werden soll..."

Es folgt, dass meine Tabelle eine 8x2 Tabelle ist..also nichts großartiges.
Könnt Ihr mir helfen den Code aufzubauen?

Nicht Böse gemeint... Also ich mein Profil dürfte ich so lassen wie es ist...
Mitglied: 16568
16568 Jun 19, 2006 at 19:18:57 (UTC)
Goto Top
Was ich mit meinem oberen Posting gemeint hatte:

Dir fehlen die rudimentärsten Kenntnisse des Programmierens!!!

Hier der korrigierte Source (und das ist der letzte für Dich):

Sub Auto_close()

Dim TextObjekt, TextDatei
Dim x As Long, i As Integer
Dim Zeile As String
Dim Spalten
Const Zeilenzahl = 8 ' hier Zeilenanzahl der Tabelle angeben  
Const Spaltenzahl = 2
Spalten = Array(0, 8, 6) ' gewünschte Länge der einzelnen Spalten (Der 1. Wert 0 wird ignoriert, muss aber aus technischen Gründen sein)  

Set TextObjekt = CreateObject("Scripting.FileSystemObject")  
On Error Resume Next
Set TextDatei = TextObjekt.CreateTextFile("C:\test.txt", True)  
If Err Then Exit Sub

TextDatei.Close ' hiermit wird die Datei wieder geschlossen  
Set TextObjekt = Nothing ' Objekt wird getiltet ;-)  

Open "C:\test.txt" For Output As #1 ' Zieldatei öffnen  

For x = 1 To Zeilenzahl ' alle angegebene Zeilen abarbeiten  
Zeile = ""  
For i = 1 To Spaltenzahl ' alle angegebene Spalten abarbeiten  
If Len(Cells(x, i)) < Spalten(i) Then ' wenn Zelleninhalt kleiner als gewünschte Spaltenbreite  
Zeile = Zeile & Cells(x, i) & Space(Spalten(i) - Len(Cells(x, i))) ' mit Leerzeichen auffüllen  
Else ' sonst  
Zeile = Zeile & Left(Cells(x, i), Spalten(i)) ' auf gewünschte Länge abschneiden  
End If
Next i
Print #1, Zeile ' Zeile in Textdatei schreiben  
Next x

Close #1 ' Datei schliessen  

End Sub


Ist sicher optimierbar (da bin ich mir wirklich sicher face-big-smile ), aber ich arbeite nicht für andere umsonst (denn der Fehler ist entweder Faulheit, oder pure Ignoranz der Programmier-Technik...)


Lonesome Walker
Member: gabrielgn
gabrielgn Jun 20, 2006 at 08:58:48 (UTC)
Goto Top
Danke, es hat geklappt...auch wenn es nicht gerade die netteste Hilfe war.