可填写表格,表格中非空白行的计算总数

可填写表格,表格中非空白行的计算总数

各位。我正在尝试创建一个表单,用于汇总用户填写的表格中有多少个名称。本质上,找到所有非空白单元格(具有特定变量名称),每次将总数加 1,然后将总数输出到只读的可填写表单的超链接字段。执行此操作的最佳方法是什么?

我已经能够弄清楚如何对整数进行基本的求和计算,但还没有弄清楚如何对非空白单元格进行求和。

代码如下:

\documentclass[letterpaper]{article}

\usepackage{hyperref}
\usepackage[left=0.25in, right=0.25in, bottom=0.5in]{geometry}
\usepackage{fontspec}
\usepackage{xcolor}
\usepackage{textcomp}
\usepackage{fancyhdr}
\usepackage{graphicx}
\usepackage{parskip}
\usepackage{eforms}

\definecolor{light-gray}{gray}{0.85}


\newcommand{\no}{\textnumero}

\newcommand{\dimrule}{\color{light-gray}\hrule}

\newcommand{\blank}[2]{
    \textField[\BG{0.95 0.95 0.95}\W{0}\Q{1}]{#1}{#2}{1em}
}

\renewcommand{\arraystretch}{1.5}

\pagestyle{fancy}
\fancyhf{}
\rhead{Page \thepage}
\cfoot{}

\begin{document}
    \begin{Form}
        
        \begin{center}
            
            \textbf{\large{}List}
            
            \bigskip
            
            \begin{tabular}{ll}
                & Name\\
                1. & \blank{listName1}{30ex}\\
                2. & \blank{listName2}{30ex}\\
                3. & \blank{listName3}{30ex}\\
                4. & \blank{listName4}{30ex}\\
                5. & \blank{listName5}{30ex}\\
                6. & \blank{listName6}{30ex}\\
                7. & \blank{listName7}{30ex}\\
                8. & \blank{listName8}{30ex}\\
                9. & \blank{listName9}{30ex}\\
                10. & \blank{listName10}{30ex}\\
            \end{tabular}
            
            \bigskip
            
            \begin{tabular}{ll}
                Total Records Printed: & \TextField[
                calculate={
                    %%%%%%%%%%%%%%%%%%%%%%
                },
                width=20ex,
                readonly=true,
                backgroundcolor={0.95 0.95 0.95},
                bordercolor=
                ]{}\\
            \end{tabular}
        
        \end{center}
    \end{Form}
\end{document}

我曾多次尝试计算“%%%%%%%%%%%%%%%%%%”但均失败。

答案1

我建议你只使用hyperref或 包,eforms不要将它们组合在一起。由于该hyperref包还有其他用途,我建议使用它。下面,我将针对任一选择给出解决方案。

除此之外,我从您的代码中删除了一些对于这些示例不必要的包和定义。


要使用该hyperref包,您需要重新定义\blank一下宏。请注意,为了\TextField通过 JavaScript 引用,您需要为其指定一个name。您还需要命名进行计算的字段。

执行计算的脚本循环遍历名为 的字段listName1listName10检查每个字段的值是否为空。如果是,它会将 1 添加到result最终输入到名为 的字段的变量中totalRecords

\documentclass[letterpaper]{article}

\usepackage[left=0.25in, right=0.25in, bottom=0.5in]{geometry}
\usepackage{fontspec}
\usepackage{fancyhdr}

\usepackage{hyperref}
%\usepackage{eforms}

\newcommand{\blank}[2]{
    \TextField[backgroundcolor={0.95 0.95 0.95},bordercolor={},width=#2,name=#1]{}
}

\pagestyle{fancy}
\fancyhf{}
\rhead{Page \thepage}
\cfoot{}

\begin{document}
    \begin{Form}
        
        \begin{center}
            
            \textbf{\large{}List}
            
            \bigskip
            
            \begin{tabular}{ll}
                & Name\\
                1. & \blank{listName1}{30ex}\\
                2. & \blank{listName2}{30ex}\\
                3. & \blank{listName3}{30ex}\\
                4. & \blank{listName4}{30ex}\\
                5. & \blank{listName5}{30ex}\\
                6. & \blank{listName6}{30ex}\\
                7. & \blank{listName7}{30ex}\\
                8. & \blank{listName8}{30ex}\\
                9. & \blank{listName9}{30ex}\\
                10. & \blank{listName10}{30ex}\\
            \end{tabular}
            
            \bigskip
            
            \begin{tabular}{ll}
                Total Records Printed: & \TextField[
                name=totalRecords,
                calculate={
                    var result = 0;
                    for (var i = 1; i <= 10; i++) {
                        if (this.getField('listName' + i).value != '') {
                            result++;
                        }
                    }
                    event.value = result;
                },
                width=20ex,
                readonly=true,
                backgroundcolor={0.95 0.95 0.95},
                bordercolor={},
                default=0
                ]{}\\
            \end{tabular}
        
        \end{center}
    \end{Form}
\end{document}

如果您想坚持使用该eforms软件包,您可以执行以下操作(执行计算的脚本与上面的相同):

\documentclass[letterpaper]{article}

\usepackage[left=0.25in, right=0.25in, bottom=0.5in]{geometry}
\usepackage{fontspec}
\usepackage{fancyhdr}

%\usepackage{hyperref}
\usepackage{eforms}

\newcommand{\blank}[2]{
    \textField[\BG{0.95 0.95 0.95}\W{0}\Q{0}]{#1}{#2}{1em}
}

\pagestyle{fancy}
\fancyhf{}
\rhead{Page \thepage}
\cfoot{}

\begin{document}
    \begin{Form}
        
        \begin{center}
            
            \textbf{\large{}List}
            
            \bigskip
            
            \begin{tabular}{ll}
                & Name\\
                1. & \blank{listName1}{30ex}\\
                2. & \blank{listName2}{30ex}\\
                3. & \blank{listName3}{30ex}\\
                4. & \blank{listName4}{30ex}\\
                5. & \blank{listName5}{30ex}\\
                6. & \blank{listName6}{30ex}\\
                7. & \blank{listName7}{30ex}\\
                8. & \blank{listName8}{30ex}\\
                9. & \blank{listName9}{30ex}\\
                10. & \blank{listName10}{30ex}\\
            \end{tabular}
            
            \bigskip
            
            \begin{tabular}{ll}
                Total Records Printed: & \textField[
                \BG{0.95 0.95 0.95}\W{0}\Q{0}\V{0}\Ff{\FfReadOnly}
                \AA{\AACalculate{
                    var result = 0;
                    for (var i = 1; i <= 10; i++) {
                        if (this.getField('listName' + i).value != '') {
                            result++;
                        }
                    }
                    event.value = result;
                }}
                ]{totalRecords}{20ex}{1em}\\
            \end{tabular}
        
        \end{center}
    \end{Form}
\end{document}

最后,还有一种更加用户友好的方式来使用该eforms包,即使用选项useui

\documentclass[letterpaper]{article}

\usepackage[left=0.25in, right=0.25in, bottom=0.5in]{geometry}
\usepackage{fontspec}
\usepackage{fancyhdr}

%\usepackage{hyperref}
\usepackage[useui]{eforms}

\newcommand{\blank}[2]{
    \textField[\ui{bgcolor={0.95 0.95 0.95},border={invisible},align={left}}]{#1}{#2}{1em}
}

\pagestyle{fancy}
\fancyhf{}
\rhead{Page \thepage}
\cfoot{}

\begin{document}
    \begin{Form}
        
        \begin{center}
            
            \textbf{\large{}List}
            
            \bigskip
            
            \begin{tabular}{ll}
                & Name\\
                1. & \blank{listName1}{30ex}\\
                2. & \blank{listName2}{30ex}\\
                3. & \blank{listName3}{30ex}\\
                4. & \blank{listName4}{30ex}\\
                5. & \blank{listName5}{30ex}\\
                6. & \blank{listName6}{30ex}\\
                7. & \blank{listName7}{30ex}\\
                8. & \blank{listName8}{30ex}\\
                9. & \blank{listName9}{30ex}\\
                10. & \blank{listName10}{30ex}\\
            \end{tabular}
            
            \bigskip
            
            \begin{tabular}{ll}
                Total Records Printed: & \textField[\ui{
                bgcolor={0.95 0.95 0.95},border={invisible},align={left},value={0},fieldflags={readonly},
                calculate={
                    var result = 0;
                    for (var i = 1; i <= 10; i++) {
                        if (this.getField('listName' + i).value != '') {
                            result++;
                        }
                    }
                    event.value = result;
                }
                }]{totalRecords}{20ex}{1em}\\
            \end{tabular}
        
        \end{center}
    \end{Form}
\end{document}

任何一种方法都会产生以下输出:

在此处输入图片描述

相关内容