问题标签 [office-automation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
63 浏览

vba - 在 Office 自动化中分离代码和文档

我目前正在开发一个 vba 项目,以帮助文档开发人员更好更快地完成工作。

该工具在开发过程中很有帮助,但是在文档完成后不再需要它。

那么,关于如何自动导出没有 vba 代码的纯文档有什么想法吗?还是我应该通过打开 vba 并删除其所有代码来愚蠢地做到这一点?

此外,有没有办法自动将 vba 代码应用于现有文档?

0 投票
1 回答
1950 浏览

c# - 使用 office 2010 COM 的 asp.net Web 服务

我正在编写一个 Web 服务,并且想将 .docx 或 .doc 更改为 .xps。我正在使用 office com 来帮助我保存为 .xps 格式,如下所示:

但是,当我尝试通过 web 方法调用时出现异常:

System.Runtime.InteropServices.COMException: Word 发生问题。在 System.Dynamic.ComRuntimeHelpers.CheckThrowException(Int32 hresult, ExcepInfo& excepInfo, UInt32 argErr, String message) at CallSite.Target(Closure , CallSite , ComObject , Object ) at System.Dynamic .UpdateDelegates.UpdateAndExecute2[T0,T1,Tret](CallSite 站点,T0 arg0,T1 arg1)在 CallSite.Target(闭包,CallSite,对象,对象)在 System.Dynamic.UpdateDelegates.UpdateAndExecute2[T0,T1,Tret]( CallSite 站点,T0 arg0,T1 arg1) 在 DocProcessService.OfficeToXps.ConvertFromWord(String sourceFilePath, String& resultFilePath) 在 C:\Users\Icicle\Documents\Fotomax WP7\DocProcessService\DocProcessService\OfficeHelper\OfficeToXps.cs: DocProcessService 的第 145 行。 C 中的 OfficeToXps.ConvertToXps(String sourceFilePath, String& resultFilePath):\Users\Icicle\Documents\Fotomax WP7\DocProcessService\DocProcessService\OfficeHelper\OfficeToXps.cs:C:\Users\Icicle\Documents\Fotomax WP7\DocProcessService\ DocProcessService.DocDownload.GetDocPreviewUrl(String m_userName, String m_orgFileName) 的第 63 行DocProcessService\DocDownload.asmx.cs:第 90 行

使用office另存为xps的代码在我的WPF项目中运行良好。如何在我的 asp.net 4.0 网络服务中使用它?谢谢。

0 投票
4 回答
26432 浏览

c# - 如何关闭正在运行的 Word 文档实例?(C#)

我可以看到很多非常相似的线程,但似乎没有什么能给我一个应该非常基本的解决方案。

在我的 winforms 应用程序中,我需要关闭一个正在运行的 word 文档实例(从应用程序本身打开)。当我从应用程序中打开 word 文档时,我会在列表中对其进行跟踪。现在我怎样才能关闭同一个文档?

这是我尝试过的:

我得到了很多文档对象的方法,但只有一个.Close()to close 有这样的参数:ref object SaveChanges, ref object OriginalFormat, ref object RouteDocument我不明白。

理想的方式是什么?谢谢..

编辑:

  1. 我无法关闭整个 Word 应用程序 (WinWord),因为用户可能打开了其他 Word 文件。

  2. 我只需要终止单词实例(类似Process.Kill()),而不提示用户是否保存等。

0 投票
1 回答
201 浏览

c++ - MS Office 的 COM 插件无法在受限用户帐户中加载

我为 Word 创建了一个工具栏。它是一个 COM 插件,用 C++ 编写。它在 XP 中由管理员帐户启动 Word 时起作用。但是,当 Word 从受限帐户启动时,它甚至都不会加载。我将此代码放在 DllMain 中:

从管理员帐户运行 Word 时会显示该消息框,但从受限帐户运行时不会显示该消息框。我正在使用 Word 2003 的 XP 机器上对此进行测试。

0 投票
2 回答
1373 浏览

wpf - 用于(Excel)自动化插件(不是 VSTO)的全局键盘挂钩

为这篇文章的长度道歉,但我认为背景对于传达我想要实现的目标是必要的。

我的任务是更新旧的 Excel UDF 插件(它以前使用来自 Steve Dalton 的 JNI 书中的 api 代码以及几乎所有其他可以想象的技术)。这些函数对 Excel 的计算模型非常不友好——这些函数需要几个范围并将数据写回它们(在另一个线程中),同时允许用户编辑这些数据(然后将其保存并上传到远程服务器)。所有这些都使得加载速度非常慢,但为用户提供了必要的灵活性,可以根据需要更改数据。

我已经将它迁移到 C#(它通过 WSDL 从远程 Java 服务器获取数据),但我发现大多数函数被调用了 50 多次,而且它的运行速度比原始插件慢得多(它是一个自动化插件,使用Extensibility.IDTExtensibility2 - 所以这里没有可用的 VSTO 技巧)。

绝望之下,我决定尝试将 UDF 的大片重写为数组函数并且不接受输入(Excel 会抱怨覆盖数组)——显然这现在快了几个数量级,但比用户缺少关键要求可以修改输出数据。

意识到 Excel 没有提供任何编辑提交前验证回调事件(我玩过 Worksheet.OnEntry 并添加了一个 VBComponent 但在覆盖数组或列表数据验证的错误之前没有触发它)。

我认为实现一个全局键盘钩子会很简单,所以开始编写一些 Windows 表单来拦截编辑(只是一个用于单个表单条目的 TextBox 和一个用于具有列表数据验证的单元格的 ComboBox),并将数据从剪贴板复制到选定的范围。

目前,所有这些都是由定制的上下文菜单条目(或双击)驱动的,用户不会接受 - 我必须至少能够拦截 F2、Ctl+V 和在活动单元格上直接键入. 但我不知道如何在自动化插件中注册全局键盘挂钩。

所以我的问题是;是否可以拦截每次编辑尝试并提供我自己的处理?或者如果失败了,我如何注册一个全局键盘钩子来拦截 F2、Ctl+V 并在活动单元格上直接键入?

我已经尝试过在 WPF / C# 中使用全局键盘钩子 (WH_KEYBOARD_LL)找到的钩子,但无法让 App.xaml + App.xaml.cs 在这种情况下工作(这是我第一次遇到 C# 和 Windows 编程) ,所以可能有人只需要在 App.xaml + App.xaml.cs 配置()中启发我。

请注意; 这不是 VSTO 插件,它是使用 Extensibility.IDTExtensibility2 实现的。

更新编辑: @TimWilliams 和@CharlesWilliams 询问为什么我以前的版本(在它的函数参数上进行了读写)有如此多的重复调用。

所有的函数都有一个强制性的 id 键参数,大多数也需要一个日期或日期范围,以下是发生的事情(在相当大的工作簿中,大约 30 张图表):

  1. 首次加载工作簿时,函数调用 all fire 并使用陈旧(以前保存的)值,但这些被忽略,因为每个函数中 C# 的第一行是对支持模型的(快速)测试,以查看模型是否已加载,没有函数参数被检查/解组。

  2. 用户选择通过 web 服务或先前序列化的文件加载模型。

  3. 视觉更新被禁用,设置表按顺序填充了一些数据;一些关键日期(日期的开始和结束 - 不同工作表上的各种日期范围用 EMONTH +/- 12 计算),一些其他静态数据(作者/编辑名称等),最后是强制性的关键 id(标识模型数据)

  4. 现在自动化插件中的每个函数的方法都有 id 键,因此如果找到数据,则返回它,否则使用函数参数的默认值。(注意:模型维护函数请求的对象字段的副本,因此它知道已输出什么。对于进一步的调用,如果缓存层中存在数据,则更新它(原始模型数据或先前模型数据的手动克隆缓存值)与传入的函数参数 - 缓存层和模型数据的差异稍后上传到 Web 服务) - 没有很好地解释“缓存”实际上是与模型数据相同的数据结构的包装器

  5. 如果返回数据(表示第一次加载),则将其放入由工作线程提供服务的阻塞队列,该工作线程将数据写回指定的范围。

糟糕的性能似乎源于非常长的依赖函数链(混淆 Excel?),以及函数似乎在它们的依赖项之前被调用的事实,例如

给定 DATE_RANGE 是链 A1-An,An=EMONTH(An-1,12) 其中 A1 是来自已填充的设置页面的常量 LAST_DATE

然后 fn(MODEL_ID, DATE_RANGE) 在命名单元格 MODEL_ID 填充后调用,但 DATE_RANGE 的值不正确,并且在每个 EMONTH 完成时重复调用 fn,并且函数方法尝试将范围转换为日期(如果日期无效,则提前返回)。同时,工作线程开始抛出应用程序繁忙异常(因此将范围写入重新排队并休眠 250 毫秒的任意时间)。最终,争论平息了,但您将有机会先制作并开始喝咖啡(甚至可能还会研磨咖啡豆)。

编写了这个可怕的代码后,我考虑将日期写入设置表,然后在更新 MODEL_ID 之前等待计算停止 - 这将在某种程度上减少函数调用的数量。然而,只截取编辑,将这些更新保存在模型中并将相应的范围标记为脏似乎更干净。

我认为可用的选项是;

  • 在编辑拦截版本中,尝试使用 vb 钩子 OnKey 调用每个可能的 ASCII 函数以回调到参数化的 C# 命令(VB 代码至少可以在循环中生成)
  • 尝试将编辑拦截版本作为 VSTO 插件(这应该给我键绑定)
  • 使用 ExcelDNA - (以前的)读写范围参数版本看起来很诱人(这可能证明有足够的性能(这可能表明我的 Excel 处理代码中存在逻辑错误)。

(再次为篇幅和不够清晰表示歉意)

0 投票
2 回答
3442 浏览

excel - VB6/VBA 不允许加载 COM 加载项

我有一个连接到 Excel 并加载工作簿的 VB6/VBA 应用程序。多年来,它一直运行良好。我们现在已经升级到 Excel 2010 并且遇到了一些问题。故障排除后,如果我关闭 PowerPivot COM 加载项,该进程似乎可以像以前一样运行,没有任何问题。当我寻找这个的确切原因时,我想看看我是否可以只为我的应用程序关闭该加载项。我像这样加载Excel:

在测试 Excel 工作簿上,我有此代码来列出加载项。然而,只有“Excel 加载项”是唯一列出的。未列出“COM 加载项”。

在找到引用 COM 加载项的方法后,我需要阻止它加载到我的应用程序的 Excel 对象中。欢迎任何帮助或建议。

谢谢

0 投票
0 回答
777 浏览

c# - 互操作错误 WorkBook.Open?

我有这段代码可以在 SharePoint 上打开一个工作簿,当我在本地服务器上时它可以完美运行,但是当我远程访问该共享点站点 EX 时失败:

(本地 = 成功)(MachineA 到 SharePoint = 失败)

我的环境是:SharePoint 2010 Windows Server 2008 Interop 14

有任何想法吗 ?我尝试将网络服务帐户添加到 dcomcnfg 中的 Excel 应用程序,但无论如何我使用使用 TEST\administrator 帐户的 RunWithElevatedPrivilage。

0 投票
1 回答
966 浏览

excel - excel添加保存内部数据?

我是编写 excel 插件(在 C# 中)的新手,并试图找出保存一些内部数据结构的正确方法,以便下次打开文件时可以恢复状态。如果它使事情变得更容易,我可以将数据转换为 xml 或 base64 字符串。我不想维护一个单独的文件,而是想将此信息嵌入到 Excel 工作表中。

非常感谢您的帮助。

0 投票
1 回答
434 浏览

c++ - PowerPoint 自动化 c++ 更改文本大小

我正在用 C++ 向 powerpoint 2007 幻灯片添加图表,一切都在添加,但我不知道如何更改font size. 如果有人知道如何为 powerpoint 2007 执行此操作或知道在哪里可以找到解决方案,那将非常感谢

0 投票
2 回答
2483 浏览

c# - 使用 AddIn 公式和 Microsoft 对象库从 Excel 中读取计算值

我们正在尝试从其中包含加载项公式的单元格中检索计算值。示例加载项“myUtilityl.xla”在 excel 中正常工作。它检索插件函数的值=ISOWEEKNUM(F9)。但是我们无法使用 C# 和 Microsoft 对象库以编程方式检索值。加载项“myUtilityl.xla”附加到 Excel。环境是VS2010

我在这里提供示例代码。

我是 Microsoft 对象库的新手。任何帮助或线索都会非常有帮助。