Excel 파일의 셀 값을 찾는 방법은 무엇입니까?

Excel 파일의 셀 값을 찾는 방법은 무엇입니까?

data.xlsx내용이 다음과 같은 Excel 스프레드시트 파일이 있다고 가정합니다.

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

A열의 해당 텍스트를 사용하여 B열의 값을 조회하고 싶습니다.

즉, 예를 들어 \getValue{<macro name to save the value in>}{<Search word>}{<Excel file name>}. 예를 들어 나중에 라텍스 문서에서 사용하기 위해 in \getValue{\rdPar}{Third Parameter}{data.xlsx}값을 저장합니다 .7\rdPar

PS 아마,이 질문도움이 되지만 필요에 맞게 답변을 편집하는 방법을 모르겠습니다.

답변1

.csv대신 사용할 수 있다고 가정하면 .xls(x)CSV 파일을 조작하기 위한 여러 도구가 있습니다(예: ) csvsimple.

일부 바퀴를 재발명하려는 경우 파일에서 키-값 구조를 \ReadCSV읽은 다음 필요할 때 해당 값을 가져올 수 있습니다. 구문은 다음과 같습니다 ..csv\getValue\ReadCSV

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

\ReadCSVCSV를 읽고 <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}

관련 정보