如何复制格式化的 Excel 表格以自动填充可填充 PDF?

如何复制格式化的 Excel 表格以自动填充可填充 PDF?

2021-11-10

我创建了一个 Excel VBA 脚本来创建一个与可填写税务电子表格格式相同的表格。我想将单元格从 Excel 复制到可填写税务电子表格,但当我尝试手动将 Excel 表格粘贴到 Adob​​e PDF 中时,它会粘贴到一个单元格中,而不是所有单元格中。我该如何解决这个问题?

Excel 表格:

Excel 表格

可填写的 PDF(美国税务表): https://www.irs.gov/pub/irs-pdf/f8949.pdf

2021-11-11

感谢 Jeorge 和 Nelson 的详细回复。

我决定采用 Jeorje 帖子中描述的 XML 路线,我认为我几乎已经解决了这个问题,但我遇到了最后一个问题。我需要自动执行将 XML 文件导入 PDF 文件的过程,因为我将有超过 100 个 pdf 文件。

更新:

  1. 我创建了一个 Excel VBA 脚本,该脚本将 Excel 表(上文)拆分为多个名为“<#>_form8949.xml”的 XML 文件。我已确认此方法有效,方法是使用 Adob​​e Acrobat Reader DC 将这些自动生成的 XML 文件手动导入 pdf 表单。

  2. 我创建了一个 Javascript 文件,它会自动复制原始的空 pdf 表单并将其命名为“<#>_form8949.pdf”。现在我有一个文件夹,里面有使用相同命名约定的 xml 文件和 pdf 文件(见下图)。 文件系统

  1. 我创建了一个 AutoHotKey 脚本来自动将 XML 文件导入 Adob​​e Acrobat。

谢谢。

答案1

您没有按要求完成任务,这很不幸。PDF 表单每次只能在一个字段中输入数据,仅此而已。

因此,无需一次性将表中的所有值粘贴到表单中。

但是,有一些方法可以实现您的愿望,或者我认为您想要实现的愿望,即在 Excel 中创建数据加载并将其全部加载到表单中。

有一种方法可以使用 VBA 来传输数据。通过选择一个起始字段来启动表单,或者让宏从第一个字段开始,即使它必须将 20 个字段移动到第一个条目。然后,宏在 Excel 中的数据和表单字段之间来回移动,复制 Excel 字段,移动到表单字段,放置数据,移动到下一个字段,返回 Excel 并移动到下一个字段,然后重复直到完成。

您必须编写该宏或让别人为您编写该宏。

另一种方法需要 PDF 编辑器来访问表单控件。我使用 Adob​​e Acrobat X(几年前的)。在上述程序中,找到如何访问表单创建/编辑/等。您正在寻找更多复杂的选项,例如 Acrobat X 所称的“更多表单选项”,或者可能直接显示为导入或导出表单数据。

方法是打开 IRS 表单,然后找到导出控件或菜单​​项,并导出表单数据。这将创建一个 XML 文件,您可以将其用作 Excel 文件的模板。然后,这个想法是让 Excel 公式使用您的数据创建填写的 .XML 文件,并让您将结果复制并粘贴到导出的 .XML 文件中。保存并将其导入表单。

我对此进行了精确测试,效果非常好。在电子表格中实现它需要一些工作,将每行的文本元素与公式混合以获取 .XML 文件每行的数据,但这就像猴子工作:弄清楚如何做一件事,然后以同样的方式做所有事情。您可以巧妙地处理文本片段,将裸露的 .XML 材料粘贴到列中并通过公式提取片段,混合每个字段中的数据。因此,编写一个公式,复制下来,复制并粘贴到 .XML 文件中,然后使用您的 PDF 编辑器导入 .XML 文件。

数据很明显,但可能属于“仍应提及”类别,位于看起来像这样的标签内<f1_3>HORSE</f1_3>。(您的数据是一张图片,因此无法使用,“HORSE”是我为第 1 页正文中的第一个字段选择的。您将解析出字符串<f1_3>,将数据“HORSE”与其连接,解析出字符串</f1_3>并将其连接起来,然后您就会得到该字段的条目。事实是,由于它们遵循确切的模式,“f1_3”,“f1_4”等等,并且在字符串中添加开头“<”或“</”和结尾“>”很简单,您实际上不必解析任何东西,只需使用位构建它并根据需要使下划线前后的数字递增。

Excel 中的字符串构建是一门艺术,应给予更多关注。

确保所有事情都按照预期进行,解决所有错误,这样你就“成功”了。

每年的表格变化都需要进行编辑,但由于美国国税局 (IRS) 对此比较保守(当然不是为了您的方便,而是为了他们自己的数据处理),所以多年来这种变化应该很小。

此外,由于需要填写内容,因此“标题”信息(例如最顶部的第一个字段)也很容易容纳。此外,可以确保算术正确无误,不会出现拼写错误。

在没有我所不了解的知识的情况下,您无法通过将 Excel 文件另存为 .XML 文件来从头创建 .XML 文件。试过了,它需要一个 XML 模式,而这个模式根本不存在。它不会创建一个,它不会以任何方式考虑表单文件来创建一个,也不会将导出文件用作一个。事实上,这只是一个愚蠢的烂摊子。也许有人会读到这个答案并告诉我我错过了什么。

此外,Acrobat X 要求导入来自 .XML 文件,而不是电子表格文件或 CSV。真糟糕。也许您选择的 PDF 编辑器不会这么麻烦?如果是这样,那么最好使用熟悉的工具,因为几乎可以从头到尾完成工作。

答案2

我可以创建一个脚本,通过以下方式将其复制粘贴到你的 PDF 中自动热键

安装AHK后,创建一个ahk带扩展名的新文件并输入以下代码:

#SingleInstance Force
SetTitleMatchMode, RegEx

#IfWinActive f8949.pdf ahk_exe Acrobat.exe

^v::
SetKeyDelay, 75
Clipboard = %Clipboard%
Clipboard := StrReplace(Clipboard, "`r`n", "`t")
SendRaw % Clipboard
return

双击该ahk文件,您将会看到系统托盘中出现一个绿色的小 H 图标(我的文件名为f8749.ahk):

在此处输入图片描述

这个小脚本Ctrl-V在 Adob​​e Acrobat 中替换,以便它解析您的剪贴板并输出为按键。从 Excel 复制(块仅选择您的数据;不要复制整行!首先从 2 行数据开始),选择 PDF 中的第一个单元格,然后Ctrl-V

如果缺少字符,则可能需要增加该行SetKeyDelay, 75,因为 Adob​​e Reader 似乎正在读取按键并且不会很快输出击键。如果您的计算机速度更快并且可以处理更快的输出,则可以将其调低。您可以双击该文件或右键单击绿色 H 图标以重新加载脚本。第一行#SingleInstance Force允许您双击该文件以快速重新部署。

该行#IfWinActive f8949.pdf ahk_exe Acrobat.exe取决于您的 PDF 文件的名称f8949.pdf。您可以将其更改为简单的#IfWinActive ahk_exe Acrobat.exe,但这最终会影响 Adob​​e Reader 的每个实例。

最后,完成脚本后,右键单击系统托盘图标和Exit脚本。

你可以在这里看到它的实际效果:

在此处输入图片描述

输出将模仿您在 Excel 中使用的任何格式。我测试了不同类型的数字格式(负数与括号)。

相关内容