首页 > 解决方案 > Mac C# 应用程序打开 Word 模板,将文本从应用程序表单/窗口 texboxes 插入到 .docx 文本字段并保存它们

问题描述

我有一个与工作相关的目标是创建一个应用程序,它是一个带有文本字段的程序窗口,单击按钮会打开一个 Word 文件模板,将文本从文本框插入 .docx 文本字段并将文件保存在光盘上。我对 Windows.Forms C# 有一些 exp,在那里我成功地制作了一个执行这些确切命令的程序。完美运行。

几年后,我改用 Macbook,我需要在上面做同样的事情。你能推荐一些选择(视觉工作室与否)?我下载了适用于 Mac 的 Visual Studio (C#),它似乎比在 Win 上更复杂 - 在额外的 Xcode 窗口中设计器,按钮需要“手动”分配它们的功能,......

我听说在 Mac 上编程更好,但第一印象看起来不是这样。现在展望未来 - 我可以使用 Interop.word 来操作 MS Office 文件吗?如果该程序可以在 Mac OS 和 Win 上运行,那就太好了。可能的?

我是一个业余程序员,这就是我问的目的——你们能推荐这个项目适合的平台、方法、应用程序类型、设置等,而不是首先从错误的方向开始吗?

标签: c#macostemplatestextms-word

解决方案


不确定这个问题是否在本网站的“范围内”(可以说任何答案都是“基于意见的”,但简短的回答是,如果您需要 Interop,目前在 Mac 上是唯一简单的方法那就是使用VBA。我什至认为目前没有任何其他方法可以在Mac上使用Interop。

但是,尽管 Mac Word VBA 将执行VBA 用户表单,但 Mac Word VBA 编辑器不允许您创建或编辑用户表单布局或底层代码。因此,您必须在 Windows 平台上创建和维护您的代码。(您甚至无法在 Mac 版本上成功导入用户表单 (.frm/.frx),因此您无法导出/编辑 VBA/重新导入代码。)

此外,并非 Windows Word 上可用的所有内容都可以在 Mac Word 上使用,或者通过 Mac 上的对象模型提供。例如,Mac 上没有 ActiveX 控件。但是,在我看来,VBA 可以满足您的需求。

为避免使用 VBA 用户表单,您可能会使用包含标准旧版 Word 表单字段的 Word 文档来收集数据,并可能使用 Word 宏按钮来启动代码执行。

从技术上讲,现在有 3 种使用 Interop 的替代方案(忘记了 VSTO,它最终还是使用了对象模型并且在 Mac AFAIK 上不可用)

  1. 直接使用 .docx 格式

  2. (仅限 Mac)使用 Applescript

  3. 使用微软的 office-js 基于 web 的界面(目前基本使用 JavaScript/TypeScript)

(1) 有一些图书馆可以让你做 (1)。说得更多是“意见”,但从 VS+C# 开始,如果您使用正确版本的 .NET Framework,您可能能够使用标准的 Microsoft Open Office XML 包。

(2) Applescript 使用“Apple Events”来处理 Word。这有点像在 Windows 上使用 VBScript 来控制 Word。它使用的“对象模型”与 VBA 使用的类似,但并未真正维护,因此 Word 中的许多类型的对象根本不可用。同样,对于您提出的建议,Applescript 似乎允许您以您需要的方式修改文档。

(1) 和 (2) 都没有为您提供显示表单以收集数据的简单工具。Applescript 为您提供了一个提示工具。除此之外,这又是一个寻找合适方法并学习使用它的问题。

(3) office-js 具有在 Windows 和 Mac(以及基于设备/Web 的 Word 版本)上工作的吸引力,具有通过表单与用户交流的标准方式(使用基于 HTML 的表单Word 中显示的面板)。但是,它提供了与 VBA 或 Applescript 完全不同的 Word API,您必须对其进行研究以确定您是否可以使用它来做您需要的事情。Windows 上的 Visual Studio 对此有一些支持,但 Mac 上的当前版本的 VS 不支持。


推荐阅读