Documents.Open返回值为null
上个月出现的一个问题,将解决方法记录一下~
【问题】无法通过SAP系统外部OS命令(SM69)执行OS服务器上Powershell文件对Office文档的相关命令操作(打开文档等命令)。
【现象】执行外部OS命令的程序被挂起,迟迟没有响应(进程无法结束)。
【解决方法】建立文件夹:C:\windows\syswow64\config\systemprofile\Desktop
PowerShell程序功能:对指定的Word文档执行密码保护操作。
执行的PowerShell程序代码如下:
Param(
[string]$filePath, #Word文档地址(通过SAP程序赋予值)
[string]$newpassword #给Word文档设定的密码(通过SAP程序赋予值)
) $ErrorActionPreference = "STOP"
$Word = $null try{
#启动Word应用
$Word.visible = $false
#打开指定Word文档
$doc = $Word.documents.Open($filePath)
$doc.Activate()
#设定密码
$doc.Protect(3,[ref]$true,[ref]$newpassword)
#关闭文档
$doc.Close()
Write-Host 0
}catch{
$error[0]
Write-Host 255
}finally{
Write-Host "finally"
#Start-Sleep 2
#关闭Word应用
$Word.Quit()
#"BulletProofOnCorruption"
#(Get-ItemProperty -Path 'HKCU:\Software\Microsoft\Office\16.0\Word\Options\').BulletProofOnCorruption
#"BulletProofOnCorruption"
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($Word) | Out-Null
[System.GC]::Collect()
[System.GC]::WaitForPendingFinalizers()
#Remove-Variable $Word
}
【解决思路】
通过插入$error[0] >> C:/Document/ps_error.txt;(路径可以自定义,需确保路径中的文件夹存在)
打开 C:/Document/ps_error.txt,便可以检查该程序执行时问题出在哪里:
catch{
$error[0] > C:/Document/ps_error.txt;
Write-Host 255
}
我这边的错误日志显示的是$doc.Activate()返回值为空(null)。
由于 $doc = $Word.documents.Open($filePath),也就是说:
$Word.documents.Open($filePath)返回值为null
在程序被挂起之际,由于在资源管理器中可以看见Microsoft Word应用有在启动,所以可以确定$Word的值没有问题。

另外通过插入$filePath > C:/Document/ps_filePath.txt;(路径可以自定义,需确保路径中的文件夹存在)
确定$filePath的值确实有被赋予进来。
$filePath > C:/Document/ps_filePath.txt;
因此问题便出在documents.Open上,该命令没有被正常执行。
查了许多的资料,这种功能(通过非交互式客户端应用程序进行Microsoft Office应用程序的“自动化”)似乎不被微软所支持。
https://support.microsoft.com/zh-cn/help/257757/considerations-for-server-side-automation-of-office
而在网上许多类似的问题(Documents.Open returns null),
最为有效的解决方式就是建立虚拟桌面文件夹:
C:\windows\syswow64\config\systemprofile\Desktop
32位系统的话可能是
C:\windows\system32\config\systemprofile\Desktop
虽然不清楚是什么原理,但是问题成功解决了,目前也没有发现有什么其他负面影响。
另外,如果SAP ERP有用到WWI功能的话,WWI(SP41以上)会自动生成该Desktop文件夹。
估计非SAP产品在用到这类功能(通过非交互式客户端应用程序进行Microsoft Office应用程序的自动化)也会遇到同样的现象,
或许可以尝试一下这种办法。
Documents.Open返回值为null的更多相关文章
- 解决 XMLHttpRequest status = 0 问题 及 返回值为null问题
1.XMLHttpRequest status = 0 问题 XMLHttpRequest的说明:http://www.w3.org/TR/XMLHttpRequest/ . The status a ...
- SPFarm.local返回值为null
创建了一个控制台应用程序,想输出SP2010服务器场下所有对象模型信息,结果:SPFarm.local返回值为null. 经查询解决方法: 1 .net framework版本要使用3.5: 2 目标 ...
- .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
最近在项目中与别的公司对接业务,对方是Java语言,需要调用对方的WebServices,结果常规的添加web引用的方法可以传过去值,但是返回值为null 查了很多资料,没有解决方法 思考应该是.Ne ...
- spring jdbcTemplate query 返回值为null
spring jdbcTemplate query 返回值为null 今天使用以下方法从数据库中查询数据,返回列表 public List<BookBean> getBooks(){ St ...
- IOS开发中返回值为null时的处理
在IOS开发中,如果得到了null返回值很容易造成程序崩溃,null和nil的判断方法不同. nil的判断方法: if(data==nil) { NSLog(@"data is n ...
- 关于递归函数返回值为null的问题
public function gettopcateid($cate_id){ $pid=db('cate')->where('cate_id',$cate_id)->find(); if ...
- SpringBoot中配置不序列化返回值为null的属性
package com.weiresearch.properties; import com.fasterxml.jackson.annotation.JsonInclude;import com.f ...
- MyBatis resultType用Map 返回值中有NULL则缺少字段 返回值全NULL则map为null
这个问题我大概花了2个小时才找到结果 总共需要2个设置 这里是对应springboot中的配置写法 @select("select sum(a) a,sum(b) b from XXX wh ...
- struts下ajax提交与页面进行提示 返回值为null
@Override public String execute() throws Exception { if ("none".equals(task)) { ...
随机推荐
- C语言之联合体
联合union是一个能在同一个存储空间存储不同类型数据的类型 联合体所占的内存长度等于其最长成员的长度,也有叫做共用体 联合体虽然可以有多个成员,但同一时间只能存放其中一种 对于联合体来讲最基本的原则 ...
- nginx加php(一)
yum install nginx 安装php7.3https://kifarunix.com/installing-php-7-3-3-on-centos-7-6/ yum install epel ...
- [转帖]Linux /tmp目录下执行脚本失败提示Permission denied
Linux /tmp目录下执行脚本失败提示Permission denied https://www.cnblogs.com/linyfeng/p/11087655.html 国产化的环境上 就有一个 ...
- 小菜鸟之JAVA输入输出
Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观 ...
- python_0基础开始_day04
第四节 一.列表 list 数据类型之一,存储大量的,不同类型的数据 列表中只要用逗号隔开的就是一个元素 有序可变的. 1.1列表的索引 列表和字符串一样也拥有索引,但是列表可以修改: lst = [ ...
- 分布式唯一ID生成器Twitter
分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的. 有些时候我们希望能使用一种简单一 ...
- ajax调用,action返回的中文为乱码的解决方案
原文:ajax调用,action返回的中文为乱码的解决方案 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.c ...
- WPF中Matrix介绍
最近在做一些图形变换操作的功能,图形变换涉及大学中的矩阵运算部分的知识,又重新复习了一下矩阵.这里做一下记录.由于不知道矩阵如何输入,一个个截图又麻烦,所以这里就全部用截图了^-^.
- JavaScript的数组方法(array)
数组方法: 1. concat() 合并数组 2. join() 将数组的元素拼接成字符串,并指定分隔符 3. push() 往数组末尾添加一个元素,并返回新的数组的长度 4. reverse( ...
- IDEA导入Eclipse 非Maven的Web项目