Wikify Excel Spreadsheets
From NesevoWiki
Jump to navigationJump to searchBeschreibung
Das ist eine Vorversion eines VBA-Makro für Excel. Damit kann jede Excel-Tabelle sofort ohne Umwege in eine Textdatei geschrieben werden, welche dann im Wiki einfach nur eingefügt werden muss.
Anleitung zum VBA-Makro
Im Prinzip: Einfach in einem Modul im VBA-Editor einfügen und starten.
Die folgende Anleitung kann für andere Excel-Versionen leicht abweichen:
- Mit Excel die Datei öffnen, die umgewandelt werden soll
- Den VBA-Editor öffnen (Menü: Extras/Makro/Visual-Basic-Editor) oder 'Alt-F11'
- In der linken Spalte sind die geöffnetet Dokumente angezeigt
- Dort auf 'VBA-Projekt' (mit dem Namen des aktuellen Dokuments, also nicht bei Eurotools!) mit der rechten Maustaste hinklicken
- Im Kontextmenü Einfügen/Modul wählen
- Im rechten grossen Fenster erscheint eine leere weisse Seite (evtl. steht oben Option Explicit)
- Den gesamten Quelltext unten kopieren und auf diese leere weisse Seite einfügen
- Das Makro ausführen (Die Variablen Startspalte, Startzeile, Endspalte, Endzeile und Dateiname werden automatisch bei jedem Start abgefragt)
VBA-Makro
'Delimeter & Formatierungstags
Const TabellenBeginn = "{| border = " & """" & "1" & """"
Const TabellenEnde = "|}"
Const ZeilenStartDelimeter = "|"
Const ZeilenEndDelimeter = ""
Const ZeilenTrennzeichen = "|-"
Const Delimeter = "|" 'SpaltenTrennzeichen
'-----------------------------------------------------
Sub Tabelle2Wiki()
Dim fHandle, i, j As Integer
Dim StartZeile, StartSpalte, EndZeile, EndSpalte As Integer
fHandle = FreeFile()
StartZeile = Val(InputBox("Ab welcher Zeile soll umgewandelt werden ?", _
"Startzeile - Schritt 1 von 5", "1"))
'nach belieben als Zahl eintragen a=1, z=26
StartSpalte = Val(InputBox("Ab welcher Spalte soll umgewandelt werden ?" + _
vbCrLf + "(z.B. A=1, Z=26, AG=33)", _
"Startspalte - Schritt 2 von 5", "1"))
EndZeile = Val(InputBox("Bis zu welcher Zeile soll umgewandelt werden ?", _
"Endzeile - Schritt 3 von 5", "100"))
'nach belieben als Zahl eintragen a=1, z=26, Spalte AG = z+7=33
EndSpalte = Val(InputBox("Bis zu welcher Spalte soll umgewandelt werden ?" + _
vbCrLf + "(z.B. A=1, Z=26, AG=33)", _
"Endspalte - Schritt 4 von 5", "26"))
DateiName = InputBox("Wie soll die Ausgabedatei heissen (bitte ggf. den Pfad ergänzen) ?", _
"Dateiname - Schritt 5 von 5", "wiki-tabelle.txt")
Open DateiName For Output As #fHandle
Print #fHandle, TabellenBeginn 'Beginn der Tabelle
For i = StartZeile To EndZeile
For j = StartSpalte To EndSpalte
Print #fHandle, ZelleLesen(i, j)
Next j
Print #fHandle, ZeilenTrennzeichen
Next i
Print #fHandle, TabellenEnde 'Ende der Tabelle
Close #fHandle
End Sub
Function ZelleLesen(Zeile, Spalte)
Dim Inhalt, RGB_Code, FormatierungsTags As Variant
'------------------Wenn die Zelle ein datum enthält, entsprechend formatieren------------------------------
If VarType(Cells(Zeile, Spalte)) = vbDate Then
Inhalt = Format(Cells(Zeile, Spalte), "dd.mm.yyyy")
Else
Inhalt = Cells(Zeile, Spalte)
End If
'------------------Wenn Zelle leer, Space einstellen für korrekte Darstellung im Wiki----------------------
If Inhalt = "" Then Inhalt = " "
'------------------Zeilenumbrüche innerhalb der Zelle durch HTML-Zeilenumbrüche ersetzen---------------------------------
While InStr(1, Inhalt, Chr(10)) <> 0
Inhalt = Mid(Inhalt, 1, InStr(1, Inhalt, Chr(10)) - 1) & "<br/>" & Mid(Inhalt, InStr(1, Inhalt, Chr(10)) + 1)
Wend
'------------------Textinhalt der Zelle auf Fett bzw. kursiv formatieren------------------------------------
If ActiveSheet.Cells(Zeile, Spalte).Font.Bold = vbTrue And ActiveSheet.Cells(Zeile, Spalte) <> "" Then
Inhalt = "'''" & Inhalt & "'''"
End If
If ActiveSheet.Cells(Zeile, Spalte).Font.Italic = vbTrue And ActiveSheet.Cells(Zeile, Spalte) <> "" Then
Inhalt = "''" & Inhalt & "''"
End If
'------------------Hintergrundfarbe der Zelle in Wiki-Tags umsetzen-----------------------------------------
If Hex(ActiveSheet.Cells(Zeile, Spalte).Interior.Color) <> "FFFFFF" Then
RGB_Code = Format(Hex(ActiveSheet.Cells(Zeile, Spalte).Interior.Color), "000000")
While Len(RGB_Code) < 6
RGB_Code = "0" & RGB_Code
Wend
FormatierungsTags = """" & "style=background-color:#" & RGB_Code & ";" & """"
Else
FormatierungsTags = ""
End If
'------------------Horizontale Textausrichtung der Zelle in Wiki-Tags umsetzen------------------------------
If ActiveSheet.Cells(Zeile, Spalte).HorizontalAlignment = xlCenter Then
FormatierungsTags = "align=" & """" & "center" & """" & FormatierungsTags
End If
If ActiveSheet.Cells(Zeile, Spalte).HorizontalAlignment = xlRight Then
FormatierungsTags = "align=" & """" & "right" & """" & FormatierungsTags
End If
'------------------Zelleintrag zusammensetzen---------------------------------------------------------------
ZelleLesen = Delimeter & FormatierungsTags & Delimeter & Inhalt
End Function