2021-11-10
我创建了一个 Excel VBA 脚本来创建一个与可填写税务电子表格格式相同的表格。我想将单元格从 Excel 复制到可填写税务电子表格,但当我尝试手动将 Excel 表格粘贴到 Adobe PDF 中时,它会粘贴到一个单元格中,而不是所有单元格中。我该如何解决这个问题?
Excel 表格:
可填写的 PDF(美国税务表): https://www.irs.gov/pub/irs-pdf/f8949.pdf
2021-11-11
感谢 Jeorge 和 Nelson 的详细回复。
我决定采用 Jeorje 帖子中描述的 XML 路线,我认为我几乎已经解决了这个问题,但我遇到了最后一个问题。我需要自动执行将 XML 文件导入 PDF 文件的过程,因为我将有超过 100 个 pdf 文件。
更新:
我创建了一个 Excel VBA 脚本,该脚本将 Excel 表(上文)拆分为多个名为“<#>_form8949.xml”的 XML 文件。我已确认此方法有效,方法是使用 Adobe Acrobat Reader DC 将这些自动生成的 XML 文件手动导入 pdf 表单。
我创建了一个 Javascript 文件,它会自动复制原始的空 pdf 表单并将其命名为“<#>_form8949.pdf”。现在我有一个文件夹,里面有使用相同命名约定的 xml 文件和 pdf 文件(见下图)。
- 我创建了一个 AutoHotKey 脚本来自动将 XML 文件导入 Adobe Acrobat。
谢谢。
答案1
您没有按要求完成任务,这很不幸。PDF 表单每次只能在一个字段中输入数据,仅此而已。
因此,无需一次性将表中的所有值粘贴到表单中。
但是,有一些方法可以实现您的愿望,或者我认为您想要实现的愿望,即在 Excel 中创建数据加载并将其全部加载到表单中。
有一种方法可以使用 VBA 来传输数据。通过选择一个起始字段来启动表单,或者让宏从第一个字段开始,即使它必须将 20 个字段移动到第一个条目。然后,宏在 Excel 中的数据和表单字段之间来回移动,复制 Excel 字段,移动到表单字段,放置数据,移动到下一个字段,返回 Excel 并移动到下一个字段,然后重复直到完成。
您必须编写该宏或让别人为您编写该宏。
另一种方法需要 PDF 编辑器来访问表单控件。我使用 Adobe 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在 Adobe Acrobat 中替换,以便它解析您的剪贴板并输出为按键。从 Excel 复制(块仅选择您的数据;不要复制整行!首先从 2 行数据开始),选择 PDF 中的第一个单元格,然后Ctrl-V。
如果缺少字符,则可能需要增加该行SetKeyDelay, 75
,因为 Adobe Reader 似乎正在读取按键并且不会很快输出击键。如果您的计算机速度更快并且可以处理更快的输出,则可以将其调低。您可以双击该文件或右键单击绿色 H 图标以重新加载脚本。第一行#SingleInstance Force
允许您双击该文件以快速重新部署。
该行#IfWinActive f8949.pdf ahk_exe Acrobat.exe
取决于您的 PDF 文件的名称f8949.pdf
。您可以将其更改为简单的#IfWinActive ahk_exe Acrobat.exe
,但这最终会影响 Adobe Reader 的每个实例。
最后,完成脚本后,右键单击系统托盘图标和Exit
脚本。
你可以在这里看到它的实际效果:
输出将模仿您在 Excel 中使用的任何格式。我测试了不同类型的数字格式(负数与括号)。