Excel2Latex - Workaround : Codierung, Ausrichtung an Komma

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: Excel2Latex - Workaround : Codierung, Ausrichtung an Komma

Temporäre Lösung

von B.O.D » Mi 18. Okt 2017, 12:22

Hallo Latex-Freunde,

ich habe den Quellcode von Excel2Latex angepasst. Das Tool speichert nun das Tex-File in UTF-8 ab.

Für all jene, die sich dafür interessieren. Der Quell-Code wurde wie folgt angepasst. Die verwendete Quelle ist im Code einsehbar.
Public Sub SaveConversionResultToFile(ByVal pModel As IModel)
    Dim sFileName As String
    sFileName = pModel.AbsoluteFileName
    If sFileName = "" Then Exit Sub
    
    'Start: Urspruengliche Loesung
        'Open sFileName For Output As 1
        'Print #1, pModel.GetConversionResult;
        'Close #1
    'Ende: Urspruengliche Loesung
    
    'Start: UTF-8-Loesung
    'Quelle: https://stackoverflow.com/questions/2524703/save-text-file-utf-8-encoded-with-vba
        Dim fsT As Object
        'Create Stream object
        Set fsT = CreateObject("ADODB.Stream")
    
        'Specify stream type - we want To save text/string data.
        fsT.Type = 2
    
        'Specify charset For the source text data.
        fsT.Charset = "utf-8"
    
        'Open the stream And write binary data To the object
        fsT.Open
        fsT.writetext pModel.GetConversionResult
    
        'Save binary data To disk
        fsT.SaveToFile sFileName, 2
    'Ende: UTF-8-Loesung
    
End Sub
Ich für meinen Teil bin damit nun zufrieden. Möglicherweise werde ich mich verstärkt mit VBA auseinandersetzen und einige Features ergänzen, um zum Beispiel den Workaround mit dem 'catchbetweentag'-Paket zu entfernen.

Aktuell denke ich an zusätzliche Optionen, um die Tabellen-Umgebung anzupassen.

Damit ist Excel2Latex für mich das Top-Tool, wenn es um Tabellen und einen schönen und bequemen Workflow geht.

Danke für den Input

von AufDieSchnelle » Do 31. Aug 2017, 14:55

Gehen wir einmal von folgendem Beispiel aus:
\documentclass[10pt,a4paper]{scrartcl}
...
...
...
\begin{document}

\input{tbls/tbl001.tex}

\end{document}
Dann musst Du lediglich die Datei "tbl001.tex" mit einem Script erzeugen. Letztlich sind ja Tex-Dateien nichts anderes sind wie Textdateien. Du musst also wie folgt vorgehen:

- Zugriff auf Excel mittels einer Programmiersprache ODER
- Schreiben eines Makros mit VBA

dass Dir deine

- Latex-Datei 'tbl001.tex" im Ordner 'tbl' erzeugt.

Mit Ruby sieht das Erzeugen einer Datei in der Kodierung UTF-8 wie folgt aus:
File.open('c:/.../tbl/tbl001.tex', 'w:utf-8') do |f|
  f.puts "\\begin{tabular}{ll}"
   ...
   ...
  f.puts "\end{tabular}"
end
Bei Nutzung einer anderen Programmiersprache natürlich anders.

von B.O.D » Do 31. Aug 2017, 14:10

Hallo AufDieSchnelle,

du hast nicht zufällig ein Beispiel?

Beste Grüße

von AufDieSchnelle » Do 31. Aug 2017, 07:32

Hoi B.O.D.

Ich persönlich halte von diesen "Tools" nichts allzu viel, da es meistens an irgendwelchen kleinen Problemen scheitert. Daher bin ich dazu übergegangen, mir die Latex-Dateien mit Skript (z.B. Python oder Ruby) selber zu erzeugen und diese dann immer mit \input{} dorthin zu laden, wo sie benötigt werden.

Deinem Editor musst Du dann sagen, dass er vor der Latex-Kompilierung die Skriptdatei ausführen soll. So hast Du immer schön sauberen Latex-Code.

von B.O.D » Mi 30. Aug 2017, 23:15

Hallo Gemeinde,

ich habe das Problem nicht vergessen. Hier mein aktueller Lösungsweg.

Das Problem mit dem Abstand hat sich durch sorgfältiges Lesen der Doku zu siunitx erledigt.

Das Umlaut-Problem konnte ich nur bedingt lösen, indem ich ein ß-Umlaut mit \ss{} setze. Für das Excel-File bedeutet das entsprechend eine untypische Darstellung, aber das stört an sich nicht weiter, weil die Formatvorlagen ebenso sichtbar sind. Mittlerweile bin ich dazu übergegangen doppelte Tabellen zu erzeugen, d.h. die eigentliche Tabelle wird mit Bezügen 1:1 an einer anderen Stelle mit entsprechenden Formatierungen für Latex kopiert.

Ich bin mit diesem Workaround zufrieden, muss aber gestehen, dass es erst eine sinnvolle Lösung ist, wenn die Tabelle groß und weitere Latex-Befehle innerhalb der Tabelle notwendig sind. Anderweitig ist copy-paste des Inhaltes schneller.

Natürlich freue ich mich auf weitere Anregungen bzw. Feedback.

Beste Grüße
\documentclass[10pt,a4paper]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{amsmath}
\usepackage{siunitx}

\usepackage{threeparttable}
\usepackage{catchfilebetweentags}
\usepackage{tabularx}
\usepackage{booktabs}
\newcolumntype{G}{>{\raggedleft\arraybackslash}X}

\begin{filecontents}{Tabelle1.tex}
   % Table generated by Excel2LaTeX from sheet 'Tabelle1'
   		\begin{tabular}{rrrrr}
   		\toprule
   		Ueberschrift 1 & Ueberschrift 2 & Ueberschrift 3 & Ueberschrift 4 & Ueberschrift 5 \\
   		\midrule
		Starttag: \%<*Eist_HW>
		\%</Eist_HW> Endtag   		
   		
   		\%<*tag>Grö\ss{}e 1$^\text{a}$ & 200.0 & 300.0& 400.0 & 500.00 \\
   		Grö\ss{}e 2$^\text{a}$ & 20.00 & 30.00 & 40.00 & 60.00 \\
  		 Summe & 220.00 & 330.00$^\text{b}$ & 440 & 560.00 \\
   		Produkt & 4000.00 & 9000.00 & 16000.00 & 30000.00$^\text{c}$\\%</tag> \\
   		\bottomrule
   		\end{tabular}%
\end{filecontents}

\begin{document}

\begin{table}[htbp]
	\centering
  	\caption{Anwendung von Excel2LaTeX mit Workaround}\label{tab:beispiel}
   		\begin{threeparttable}
   		{\inputencoding{ansinew}   
   		\sisetup{
   			table-figures-decimal = 1,
   			table-space-text-post = $^\text{a}$
   		}
    		\begin{tabularx}{\textwidth}{
    			X 
    			S [table-align-text-post = false]
    			S [table-align-text-post = false]
    			S [table-align-text-post = false]
    			S [table-align-text-post = false]}
    			\toprule
    			Formel &
    			\multicolumn{1}{X}{Versuch 1} &
    			\multicolumn{1}{X}{Versuch 2} &
    			\multicolumn{1}{X}{Versuch 3} &
    			\multicolumn{1}{X}{Versuch 4} \\
    			\midrule
    			\ExecuteMetaData[Tabelle1.tex]{tag}
 				\bottomrule
 			\end{tabularx}
 		}
    		\begin{tablenotes}
				\item[$^\text{a}$] ß mit \ss{} als vorläufige Lösung
				\item[$^\text{b}$] Erläuterung zur Summe von Versuch 2
				\item[$^\text{c}$] Erläuterung zum Produkt von Versuch 4
			\end{tablenotes}
		\end{threeparttable}	
\end{table}

%\CatchFileBetweenTags{testfile1}{file1.tex}{tag}

\end{document}
Dateianhänge
test.pdf
(45.69 KiB) 290-mal heruntergeladen

von B.O.D » Mi 3. Mai 2017, 08:18

Vielen Dank für die Antwort.
Das 'siunitx'-Paket liefert in Kombination mit den Tabellenfußnoten Probleme. Die Abstände vom hochgesetzen Buchstaben zur Zahl sind 1. unterschiedlich und 2. teilweise zu groß.

Die lokale Änderung der Codierung fand ich auch hier.
https://bugs.launchpad.net/excel2latex/+bug/944134
Leider lässt sich
{\inputencoding{ansinew}
\ExecuteMetaData[Tabelle1.tex]{tag}
 }
 
nicht anwenden. Es kommt eine Fehlermeldung, es würde ein '}' fehlen.

Es funktioniert jedoch, wenn man die Codierung der gesamten 'tabularx'-Umgebung lokal ändert. Probleme bestehen dann aber weiterhin mit dem 'ß'-Umlaut.
\documentclass[10pt,a4paper]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{amsmath}
\usepackage{siunitx}

\usepackage{threeparttable}
\usepackage{catchfilebetweentags}
\usepackage{tabularx}
\usepackage{booktabs}
\newcolumntype{G}{>{\raggedleft\arraybackslash}X}

\begin{filecontents}{Tabelle1.tex}
   % Table generated by Excel2LaTeX from sheet 'Tabelle1'
   \begin{tabular}{rrrrr}
   \toprule
   Ueberschrift 1 & Ueberschrift 2 & Ueberschrift 3 & Ueberschrift 4 & Ueberschrift 5 \\
   \midrule
   \%<*tag>Grösse 1$^\text{a}$ & 200.00 & 300.00 & 400.00 & 500.00 \\
   Groesse 2$^\text{a}$ & 20.00 & 30.00 & 40.00 & 60.00 \\
   Summe & 220.00 & 330.00$^\text{b}$ & 440.00 & 560.00 \\
   Produkt & 4000.00 & 9000.00 & 16000.00 & 30000.00$^\text{c}$\\%</tag> \\
   \bottomrule
   \end{tabular}%
\end{filecontents}

\begin{document}

\begin{table}[htbp]
	\centering
  	\caption{Anwendung von Excel2LaTeX mit Workaround}\label{tab:beispiel}
   		\begin{threeparttable}
   		{\inputencoding{ansinew}
    		\begin{tabularx}{\textwidth}{X S S S S}
    			\toprule
    			\multicolumn{1}{l}{Formel} &
    			\multicolumn{1}{r}{Versuch} &
    			\multicolumn{1}{r}{Versuch} &
    			\multicolumn{1}{r}{Versuch} &
    			\multicolumn{1}{r}{Versuch} \\
    			\midrule
    			\ExecuteMetaData[Tabelle1.tex]{tag}
 				\bottomrule
 			\end{tabularx}
 		}
    		\begin{tablenotes}
				\item[$^\text{a}$] Wie Codierung ändern??
				\item[$^\text{b}$] Erläuterung zur Summe von Versuch 2
				\item[$^\text{c}$] Erläuterung zum Produkt von Versuch 4
			\end{tablenotes}
		\end{threeparttable}	
\end{table}
\end{document}
Ist das anhand vom Code erklärbar oder ist das eine Wechselwirkung unterschiedlicher Pakete?

Beste Grüße
Dateianhänge
test.pdf
(45.13 KiB) 311-mal heruntergeladen

von u_fischer » Sa 29. Apr 2017, 16:59

Ausrichtungen von Zahlen kannst du mit siunitx machen, siehe dessen Dokumentation.

Die input-Kodierung kannst du lokal mit \inputencoding{ansinew} ändern (ich nehme mal an excel speichert als ansinew), besser wäre es natürlich, wenn excel/excel2latex utf8 erzeugen würde.

Excel2Latex - Workaround : Codierung, Ausrichtung an Komma

von B.O.D » Fr 28. Apr 2017, 16:11

Hallo Gemeinde,

ich nutze gerne Excel2Latex, wenn es um Tabellen geht, jedoch möchte ich mittlerweile etwas mehr Spielraum haben, d.h. Tabellenbreite, Positionierung, Tabellenfußnoten etc.

Mittels nachfolgender Basisumgebung umgehe ich die Umgebungsdefinition von Excel2Latex.
\begin{table}[htbp]
  \centering
  \caption{caption}\label{tab:beispiel}
  \begin{tabularx}{<breite>}{<ausrichtung>}
    \toprule
    \ExecuteMetaData[file]{tag}
    \bottomrule
  \end{tabularx}
\end{table}
Dabei wird für
\ExecuteMetaData[file]{tag}
das Paket 'catchfilebetweentags' benötigt, welches im obigen Beispiel zwischen den nachfolgenden Tags den Inhalt einfügt.
%<*tag>
Inhalt
%</tag>
In Excel definiere ich für die Tags Zellenformatvorlagen, sodass ich weiterhin Rechnungen durchführen lassen kann. Das ist insofern bequem, weil veränderte Zellen Einfluss auf andere Zellen nehmen, aber keine Veränderungen in der Latex-Datei notwendig sind, da lediglich die Tabelle als Tex-File neu gespeichert werden muss. Das wird dann zum Vorteil wenn man große Tabellen hat: Wer hat schon lust >100 Werte im Quellcode händisch zu ändern? Soweit so gut.

Nun zu meinen Fragen:
  • 1. Es tritt das Problem der Codierung auf, wenn man Umlaute in Excel verwendet. Wie lässt sich das lösen?

    2. Weiterhin möchte ich in der tabularx-Umgebung Inhalte am Komma ausrichten, was zum Beispiel bei Ergänzungen mittels Tabellenfußnoten notwendig wird (siehe Minimalbeispiel bzw. Anhang). Gibt es da eine Möglichkeit bzw. welche Alternativen gibt es z. B. für 'tabularx'?
Nachfolgend ein Minimalbeispiel, das funktioniert, weil keine Umlaute in der Tabelle verwendet werden. Hier definiere ich den Tabellenkopf in Latex, um die Ausrichtung anzupassen.
\documentclass[10pt,a4paper]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{amsmath}

\usepackage{threeparttable}
\usepackage{catchfilebetweentags}
\usepackage{tabularx}
\usepackage{booktabs}
\newcolumntype{G}{>{\raggedleft\arraybackslash}X}

\begin{filecontents}{Tabelle1.tex}
   % Table generated by Excel2LaTeX from sheet 'Tabelle1'
   \begin{tabular}{rrrrr}
   \toprule
   Ueberschrift 1 & Ueberschrift 2 & Ueberschrift 3 & Ueberschrift 4 & Ueberschrift 5 \\
   \midrule
   \%<*tag>Groesse 1$^\text{a}$ & 200.00 & 300.00 & 400.00 & 500.00 \\
   Groesse 2$^\text{a}$ & 20.00 & 30.00 & 40.00 & 60.00 \\
   Summe & 220.00 & 330.00$^\text{b}$ & 440.00 & 560.00 \\
   Produkt & 4000.00 & 9000.00 & 16000.00 & 30000.00$^\text{c}$\\%</tag> \\
   \bottomrule
   \end{tabular}%
\end{filecontents}

\begin{document}

\begin{table}[htbp]
	\centering
  	\caption{Anwendung von Excel2LaTeX mit Workaround}\label{tab:beispiel}
   		\begin{threeparttable}
    		\begin{tabularx}{\textwidth}{X G G G G}
    			\toprule
    			\multicolumn{1}{l}{Formel} &
    			\multicolumn{1}{r}{Versuch 1} &
    			\multicolumn{1}{r}{Versuch 2} &
    			\multicolumn{1}{r}{Versuch 3} &
    			\multicolumn{1}{r}{Versuch 4} \\\midrule
				\ExecuteMetaData[Tabelle1.tex]{tag}
 				\bottomrule
 			\end{tabularx}
    		\begin{tablenotes}
				\item[$^\text{a}$] Wie Codierung ändern??
				\item[$^\text{b}$] Erläuterung zur Summe von Versuch 2
				\item[$^\text{c}$] Erläuterung zum Produkt von Versuch 4
			\end{tablenotes}
		\end{threeparttable}	
\end{table}
\end{document}
Insgesamt bin ich für Anregungen zum Code offen.

Beste Grüße
Dateianhänge
test.pdf
(30.19 KiB) 308-mal heruntergeladen

Nach oben