c# - 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 上运行,那就太好了。可能的?
我是一个业余程序员,这就是我问的目的——你们能推荐这个项目适合的平台、方法、应用程序类型、设置等,而不是首先从错误的方向开始吗?
解决方案
不确定这个问题是否在本网站的“范围内”(可以说任何答案都是“基于意见的”,但简短的回答是,如果您需要 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 上不可用)
直接使用 .docx 格式
(仅限 Mac)使用 Applescript
使用微软的 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 不支持。
推荐阅读
- java - Android RecyclerView - StaggeredGridLayoutManager 在滚动时弄乱了宽度
- python - 为图像熵重塑数组的 Valueerror
- java - JavaFX Canvas.setScaleX/Y(2) not scaling to twice the size
- linux - 如何检查 Kubernetes 作业是否正在运行
- string - 在 Azure 数据工厂中修改活动的输出
- java - 将数据从数据库存储到 bean
- regex - 正则表达式替换markdown文件的代码块标记中的所有空格
- node.js - 将文本转换为 PDF 并发送给用户下载
- mysql - 当我创建命令 sequelize 以创建关联表时,它将全部变为小写
- python - 用数字遍历列表(作为文本)