使用 Office 2013 中的电子表格和模板生成随机测试

使用 Office 2013 中的电子表格和模板生成随机测试

我想要完成的任务是在 Excel 中保存一个项目库,其中包含项目的文本、正确答案、项目的标签以指示其测量内容和所基于的材料。

有了这些数据,我如何在 Word 中创建一个模板,以便我从题库中查询符合特定条件的随机题?

如果能够设计一堆项目并创建一个模板,那就太好了,这样任何时候我想要一个“新鲜”的测验,我只需刷新或单击其他一些简单的按钮序列即可。

我可以使用 Office 中的哪些工具来实现此目的?

答案1

这里有一个不使用任何 VBA 的方法。它假设你正在使用 Windows Word(它不适用于 Mac Word)并且

  • 文档中所需的项目数量是固定的(即不会随机变化)
  • 您的“题库”是一个表格形式的 Excel 表,即所有行都包含相同的列,并且第一行包含列名。
  • 您的模板的数据只需要来自单个随机选择的行,或者如果您需要来自多行的数据,那么它们有时是同一行也没关系。

假设您的 Excel 工作簿位于 c:\xl\rnd.xlsx,数据位于 Sheet1 中。

将第一列命名为 k,并将行号放入其中,因此

k
1
2
3

...

将第二列命名为 r。在单元格 B2 中输入以下公式

=COUNT(A:A)

在单元格 B3、B4 等中输入以下公式

=RANDBETWEEN(2,$B$2)

请勿使用第 2 行(其中 k=1)作为数据。

创建并填充所需的附加列(总共最多 255 个)。如果您有任何包含备注文本的列(长度超过 255 个字符),请确保将备注文本放在第 2 行。这应确保 Word 能够获取任何后续备注字段的完整文本。

在 Word 中,对于要插入的每个项目,插入以下嵌套字段,使用要插入的数据项的列名而不是“mycolumn”

{ DATABASE \d "c:\\xl\\rnd.xlsx" \s "SELECT mycolumn FROM [Sheet1$] WHERE k = { DATABASE \d "c:\\xl\\rnd.xlsx" \s "SELECT r FROM [Sheet1$]  WHERE k = 2" }" }

(确保路径名中的反斜杠双写,并且确保两对 {} 都是可以在 Windows Word 上使用 ctrl-F9 插入的特殊字段代码括号。

如果您想要从同一 Excel 行获取多个项目,请使用相同的索引行(即 k = 2)。如果您想要从不同的记录获取项目,请使用不同的索引(例如 k = 3)。

保存您的模板。

当你想创建一个新的测试(或其他)时,

  1. 打开 Excel 文件并添加所需的任何新数据,然后重新计算。保存 Excel 文件但不要关闭它。工作表。这应该会更新 RANDBETWEEN 值
  2. 复制模板(如果是普通的 .docx/m,或基于模板打开新文档(如果是 .dotx/m)并保存)
  3. 选择文档主体(ctrl-A)并按 F9 更新所有字段
  4. 假设您对结果满意,请通过选择文档主体并按 ctrl-shift-F9 来“修复”它们。
  5. 保存文档

这种方法存在缺点,包括

  • 如前所述,如果您需要来自不同行的数据,这并不能保证它们是不同的,因为对于 k 的多个值,r 可以具有相同的值。我想如果您没有太多数据,您可以重复步骤 (1) 和 (3),直到获得满意的结果。否则,就需要想办法避免获得重复的行,这可能涉及 VBA,在这种情况下,您不妨以不同的方式完成整个事情。
  • 此外,如今,Word 在每个 DATABASE 字段结果的开头插入一个段落标记,这毫无用处。可以使用数字/日期时间格式开关删除数字和日期结果的段落标记,但不能删除文本结果的段落标记。如果您必须删除这些段落标记,则需要使用“查找/替换”的可靠机制,或者(再次)使用一些 VBA。
  • DATABASE 字段在 Word 表格中不起作用(可能在其他地方也不起作用)。如果您需要将数据放在这些位置,则需要使用 SET 字段为结果设置书签,然后在需要数据的位置使用 REF 字段。

相关内容