Excel ファイルのセルの値を検索するにはどうすればよいでしょうか?

Excel ファイルのセルの値を検索するにはどうすればよいでしょうか?

Excelスプレッドシートファイルdata.xlsxの内容が

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

列 A の対応するテキストを使用して、列 B の値を検索したいと思います。

つまり、たとえば のような Latex コマンドが必要です。\getValue{<macro name to save the value in>}{<Search word>}{<Excel file name>}つまり、たとえばは\getValue{\rdPar}{Third Parameter}{data.xlsx}の値をLaTeX ドキュメントで後で使用するために に保存します。7\rdPar

追伸 たぶん、この質問役に立ちますが、自分のニーズに合わせて回答を編集する方法がわかりません。

答え1

.csvの代わりにを使用できると仮定すると.xls(x)、CSV ファイルを操作するためのツールがいくつかあります (例csvsimple: )。

ただし、車輪を再発明したい場合は、 を使用してファイルをキー値構造に\ReadCSV読み込み、必要に応じてそれらの値を取得できます。 の構文は次のとおりです。.csv\getValue\ReadCSV

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

\ReadCSVは CSV を読み取り<file>、列<name><value>(<name>と は<value>列の数です。デフォルトは<name>=1と です<value>=2) を取得して、後で使用するために に保存します<label>。オプション*が使用されている場合、ファイルは文字列として読み取られます。

ファイルが読み込まれたら、次のコマンドを使用して保存された値を取得できます\getValue

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

\getValueは、 で読み込まれた CSV ファイル内の<value>それぞれの列を取得し、 に保存します。<name><label><macro>

あなたの例(ヘッダー行と列を削除)では、次のようになります。

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

実装は次のとおりですexpl3(最小限のものであり、間違った入力や欠落したデータなどのエラー チェックはありません)。

\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}

関連情報