Wie kann man einen Zellenwert einer Excel-Datei nachschlagen?

Wie kann man einen Zellenwert einer Excel-Datei nachschlagen?

Angenommen, ich habe eine Excel-Tabellendatei data.xlsxmit dem Inhalt

        A             B
1  Third Parameter    7
2  First Parameter    5
3  Second Parameter   3

und ich möchte den Wert in Spalte B anhand des entsprechenden Textes in Spalte A nachschlagen.

Mit anderen Worten, ich brauche einen Latex-Befehl wie zum Beispiel \getValue{<macro name to save the value in>}{<Search word>}{<Excel file name>}. So wird zum Beispiel \getValue{\rdPar}{Third Parameter}{data.xlsx}der Wert von 7in gespeichert \rdPar, um ihn später in meinem Latex-Dokument zu verwenden.

PS Vielleicht,diese Frageist hilfreich, aber ich weiß nicht, wie ich die Antworten meinen Bedürfnissen entsprechend bearbeiten kann.

Antwort1

Vorausgesetzt, Sie können .csvanstelle von verwenden .xls(x), gibt es mehrere Tools zum Bearbeiten von CSV-Dateien, beispielsweise csvsimple.

Wenn Sie das Rad neu erfinden möchten: Sie können die Datei in eine Schlüssel-Wert-Struktur \ReadCSVeinlesen und diese Werte dann bei Bedarf abrufen. Die Syntax lautet:.csv\getValue\ReadCSV

\ReadCSV [*] {<label>} [<name>,<value>] {<file>}

\ReadCSVliest die CSV-Datei <file>, nimmt die Spalten <name>und <value>( <name>und <value>sind die Anzahl der Spalten; Standard sind <name>=1und <value>=2) und speichert sie <label>für später unter . Wenn das optionale Element *verwendet wird, wird die Datei als Zeichenfolge gelesen.

Sobald die Datei gelesen ist, können Sie die gespeicherten Werte mit folgendem Befehl abrufen \getValue:

\getValue <macro> {<name>} {<label>}

\getValueholt sich die <value>jeweilige Spalte <name>aus der unter ausgelesenen CSV-Datei <label>und speichert diese im <macro>.

In Ihrem Beispiel (Entfernen der Kopfzeile und -spalte) hätten Sie:

\ReadCSV{mydata}{test.csv}
\getValue\rdPar{Third Parameter}{mydata}
\rdPar % prints 7

Hier ist die expl3Implementierung (sie ist minimalistisch: Es gibt keine Fehlerprüfung auf falsche Eingabe, fehlende Daten usw.):

\begin{filecontents*}{test.csv}
Third Parameter  , 7
First Parameter  , 5
Second Parameter , 3
\end{filecontents*}

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn
% Step 1: reading the file
\ior_new:N \l__diaa_csv_ior
\bool_new:N \l__diaa_csv_str_bool
\NewDocumentCommand \ReadCSV { s m >{ \SplitArgument {1} {,} }O{ 1,2 } m }
  {
    \IfBooleanTF {#1}
      { \bool_set_true:N \l__diaa_csv_str_bool }
      { \bool_set_false:N \l__diaa_csv_str_bool }
    \diaa_csv_read:nnnn {#2} #3 {#4}
  }
\cs_new_protected:Npn \diaa_csv_read:nnnn #1 #2 #3 #4
  {
    \prop_new:c { g__diaa_csv_#1_prop }
    \ior_open:NnTF \l__diaa_csv_ior {#4}
      { \__diaa_csv_read:cnn { g__diaa_csv_#1_prop } {#2} {#3} }
      { \msg_error:nnn { diaa } { file-not-found } {#4} }
  }
\msg_new:nnn { diaa } { file-not-found }
  { File~`#1'~not~found. }
\cs_new_protected:Npn \__diaa_csv_read:Nnn #1 #2 #3
  {
    \bool_if:NTF \l__diaa_csv_str_bool
      { \ior_str_map_inline:Nn }
      { \ior_map_inline:Nn }
        \l__diaa_csv_ior
        {
          \prop_put:Nxx #1
            { \clist_item:nn {##1} {#2} }
            { \clist_item:nn {##1} {#3} }
        }
  }
\cs_generate_variant:Nn \__diaa_csv_read:Nnn { c }
%
% Step 2: getting the values
\NewDocumentCommand \getValue { m m m }
  { \tl_set:Nx #1 { \diaa_csv_item:nn {#2} {#3} } }
\NewExpandableDocumentCommand \CSVItem { m m }
  { \diaa_csv_item:nn {#1} {#2} }
\cs_new:Npn \diaa_csv_item:nn #1 #2
  { \prop_item:cn { g__diaa_csv_#2_prop } {#1} }
\ExplSyntaxOff

\begin{document}

\ReadCSV{mydata}{test.csv}

\getValue\rdPar{Third Parameter}{mydata}
\rdPar

\edef\rdPar{\CSVItem{First Parameter}{mydata}}%
\rdPar

\end{document}

verwandte Informationen