Wenn ich mir mit `\show\pgfplotstablename` die Definition von `\pgfplotstablename` ansehe, dann steht im Log
<code><pre>> \\pgfplotstablename=macro:
->\\TestTable .</pre></code>
Das heißt `\pgfplotstablename` wird nach einem Expansionschritt zu `\TestTable`. Nun geht es nur noch darum diesem Expansionsschritt irgendwie zu forcieren. Dies kann man entweder mit `\edef` or in LuaTeX und ab TeX Live 2019 mit `\expanded` machen.
\expanded{%
\noexpand\pgfplotstablegetelem{0}{[index]1}\noexpand\of\expandafter\noexpand\pgfplotstablename
}%
Das vorangestellte `\noexpand` vor jedem Makro verhindert die Expansion. Die Konstruktion `\expandafter\noexpand\pgfplotstablename` führt dazu, dass TeX zunächst über `\noexpand` drüber springt und `\pgfplotstablename` einmalig expandiert. Danach steht dann dort `\noexpand\TestTable` und alles ist gut.
\documentclass[border=5pt]{standalone}
\usepackage{pgfplotstable}
\pgfplotstableread[header=false]{
A B
1 2
0 2
1 0
0 2
0 2
1 0
}\TestTable
\begin{document}
\pgfplotstabletypeset[string type,
every head row/.style={output empty row},% keinen header anzeigen
% works funny (with speech mark...)
columns/0/.style = {
string replace={0}{\pgfplotstablename\pgfplotsretval},
},
% works not
columns/1/.style = {
string replace={0}{%\pgfplotstablename % \pgfplotsretval
\show\pgfplotstablename
\expanded{%
\noexpand\pgfplotstablegetelem{0}{[index]1}\noexpand\of\expandafter\noexpand\pgfplotstablename
}%
\pgfplotsretval
}
},
]{\TestTable}
% Test: \pgfplotstablegetelem{0}{[index]0}\of\TestTable \pgfplotsretval
% \pgfplotstablegetelem{0}{[index]1}\of\TestTable \pgfplotsretval
\end{document}
[![alt text][1]][1]
[1]: https://texwelt.de/wissen/upfiles/test_474.png