powershell调用WPS设置excel横向打印出不了效果

以下代码测试情况:
①A电脑仅安装office,正常运行;
②B电脑仅安装WPS,不正常;
③C电脑同时安装了office和WPS,但设置了.xlsx格式文档的默认打开程序为office,正常运行;
④D电脑同时安装了office和WPS,但设置了.xlsx格式文档的默认打开程序为WPS,不正常.
因此,推断就是WPS的问题,请解决上述情形②,④,代码亲自测试达到效果秒采纳。

补充:很显然,调用WPS设置横向打印的命令不是$ws.PageSetup.Orientation = 2,那么是什么呢?设置WPS兼容office这些选项都试过了不行!


$xlFixedFormat = "Microsoft.Office.Interop.Excel.xlFixedFormatType" -as [type] #设置excel文件类型
$objExcel = New-Object -ComObject excel.application #创建excel对象
$objExcel.visible = $False 

$path="D:\myXls.xlsx"
$workbook = $objExcel.workbooks.open($path) #获取工作簿对象
$ws=$workbook.WorkSheets.item(1)#获取工作表对象,也可以通过item("Sheet1")
$workbook.activate()#激活工作簿
$ws.activate()#激活工作表

$ws.PageSetup.Orientation = 2  #设置横向打印。————其他代码都没问题,就是这一句在安装了WPS,且设置excel默认打开方式为WPS的电脑上出不了效果

$workbook.save()#保存工作簿
$workbook.close()#关闭工作簿
echo "hi5f5t"
$objExcel.Quit()#退出Excel程序
该回答引用于gpt与自己的思路:

该回答引用于gpt与自己的思路:

根据您提供的信息,推断出问题可能是因为WPS对于PageSetup.Orientation的设置方式与Office不同。试试下面这个代码替换掉原来的一句设置横向打印的代码($ws.PageSetup.Orientation = 2),看是否能够解决问题:

$ws.PageSetup.Orientation = [Microsoft.Office.Interop.Excel.XlPageOrientation]::xlLandscape

如果还是不行,可以尝试使用以下代码强制将Excel文件用Office打开,然后再执行设置横向打印的代码:

$excelPath = "D:\myXls.xlsx"
$officePath = "C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE"
Start-Process -FilePath $officePath -ArgumentList $excelPath
$objExcel = New-Object -ComObject excel.application
$objExcel.visible = $False 
 
$workbook = $objExcel.workbooks.open($excelPath)
$ws = $workbook.WorkSheets.item(1)
$workbook.activate()
$ws.activate()
 
$ws.PageSetup.Orientation = [Microsoft.Office.Interop.Excel.XlPageOrientation]::xlLandscape

$workbook.save()
$workbook.close()
echo "hi5f5t"
$objExcel.Quit()

这样可以确保Excel文件始终使用Office打开,避免可能存在的WPS兼容性问题。

  • 如果上述方法都无法解决问题,还可以尝试以下几个步骤:
  1. 确认安装的是最新版本的WPS和Office,并且已经更新了所有的安全补丁。

  2. 将Excel文件保存为另一种格式(比如CSV或者XLS),然后再打开并设置横向打印。

  3. 如果使用的是WPS的旧版(比如WPS 2016),可以考虑更新到最新版(比如WPS 2022)。

  4. 卸载WPS,重启电脑后再重新安装WPS,看看是否能够解决问题。

希望以上建议能够帮助您解决问题。

参考GPT和自己的思路:

根据您提供的情况,可能是因为WPS不支持像Excel中的PageSetup.Orientation属性这样的命令,这就导致了在WPS上执行该代码时不起作用。

您可以尝试使用WPS内置的VB脚本语言来实现横向打印。具体方法如下:

  1. 打开WPS,点击“启动”,选择“VBA编辑器”。
  2. 在“工具”菜单中,选择“引用”。
  3. 选择“Microsoft Excel 16.0 对象库”并勾选。
  4. 在新建的“模块1”窗口中,输入以下代码:

Sub SetPageOrientation()

Dim objExcel As Excel.Application 
Dim objWorkbook As Excel.Workbook 
Dim objWorksheet As Excel.Worksheet 

Set objExcel = CreateObject("Excel.Application") 
Set objWorkbook = objExcel.Workbooks.Open("D:\myXls.xlsx") 
Set objWorksheet = objWorkbook.Worksheets("Sheet1") 

objWorksheet.PageSetup.Orientation = xlLandscape 

objWorkbook.SaveAs "D:\myXls_landscape.xlsx" 
objWorkbook.Close 
objExcel.Quit 

End Sub

在上面的代码中,“xlLandscape”是Excel中横向打印的常量。在这种情况下,应该可以正常工作。

  1. 运行该代码,将Excel工作簿保存为“myXls_landscape.xlsx”。
  2. 然后您可以在PowerShell中打开新文件来查看结果:

$objExcel = New-Object -ComObject excel.application
$objExcel.visible = $False
$path="D:\myXls_landscape.xlsx"
$workbook = $objExcel.workbooks.open($path)
$ws=$workbook.WorkSheets.item(1)
$workbook.activate()
$ws.activate()
$workbook.save()
$workbook.close()
$objExcel.Quit()

以上是一种方法,如果您有其他的解决方案也可以尝试。希望能对您有所帮助!

参考GPT和自己的思路,根据你的测试情形,推测WPS在处理 PageSetup.Orientation 属性时可能存在兼容性问题。你可以尝试以下方案:

情形②

1.更改默认打开程序为Office,然后再测试一下是否可以正常工作。
2.如果无法更改默认打开程序,则尝试将电脑上的WPS卸载,重新安装 Office 或 Microsoft Excel,并且确保已经安装了适当的Interop Assemblies。
情形④

1.更改默认打开程序为Office,然后再测试一下是否可以正常工作。
2.在 WPS 中打开 Excel 文件,然后手动在页面设置中将打印方向设置为横向。然后关闭文件并再次运行 PowerShell 脚本,看看是否正常工作。
3.如果上述两种方案都不起作用,则建议将问题报告给 WPS 开发人员,并寻求其帮助解决。
关于设置横向打印的命令,不同的 Excel 版本和不同的语言环境可能会有所不同。你可以尝试以下命令:

$ws.PageSetup.Orientation = $xlPortrait # 竖向打印
$ws.PageSetup.Orientation = $xlLandscape # 横向打印

其中 $xlPortrait 和 $xlLandscape 是用于指定打印方向的常量。不同语言环境中,这些常量的值可能不同。你可以在 PowerShell 中输入 $xlPortrait 或 $xlLandscape,然后按下 TAB 键来自动完成常量名称,并查看其实际取值。

参考GPT和自己的思路:
WPS和Office对Excel的操作方法可能有所不同,可以试试使用WPS自己的COM组件对象,而不是Office的。以下是可以尝试的修改方案:

$wpsFixedFormat = "Kingsoft.Office.Interop.Excel.xlFixedFormatType" -as [type] #设置excel文件类型
$objWPS = New-Object -ComObject ks.Excel.Application #创建WPS Excel对象
$objWPS.visible = $False

$path="D:\myXls.xlsx"
$workbook = $objWPS.workbooks.open($path) #获取工作簿对象
$ws=$workbook.WorkSheets.item(1)#获取工作表对象,也可以通过item("Sheet1")
$workbook.activate()#激活工作簿
$ws.activate()#激活工作表

$ws.PageSetup.Orientation = 2 #设置横向打印。使用WPS的COM组件

$workbook.save()#保存工作簿
$workbook.close()#关闭工作簿
echo "hi5f5t"
$objWPS.Quit()#退出WPS Excel程序

另外,如果以上修改还是不行,可以考虑将文件保存为WPS支持的格式,比如.wps后缀,再打开设置横向打印。

看看目标电脑上的wps库是否存在。

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
在调用WPS的时候,可以使用WPS自带的VBA宏实现设置页面方向的功能。具体方法如下:

  1. 为WPS设置信任访问:
$wps = New-Object -ComObject KWPS.Application
$wps.TrustAssociated = $true
  1. 打开要操作的Excel文件:
$path = "D:\myXls.xlsx"
$workbook = $objExcel.workbooks.open($path)
  1. 在WPS中运行VBA宏:
$macro = $workbook.Name + "!Module1.set_orient"
$wps.Run($macro)

这里的Module1是指Excel中所嵌入的VBA代码模块的名称,set_orient是VBA宏的函数名称,VBA代码如下:

Sub set_orient()
    Application.ActiveSheet.PageSetup.Orientation = xlLandscape
End Sub
  1. 保存并关闭Excel文件,退出WPS:
$workbook.Save()
$workbook.Close()
$wps.Quit()

综合代码如下:

$xlFixedFormat = "Microsoft.Office.Interop.Excel.xlFixedFormatType" -as [type]
$objExcel = New-Object -ComObject excel.application
$objExcel.visible = $False 

$path="D:\myXls.xlsx"
$workbook = $objExcel.workbooks.open($path)
$ws=$workbook.WorkSheets.item(1)

# 设置WPS允许访问宏
$wps = New-Object -ComObject KWPS.Application
$wps.TrustAssociated = $true

# 调用WPS运行VBA宏设置页面方向
$macro = $workbook.Name + "!Module1.set_orient"
$wps.Run($macro)

# 保存并关闭Excel文件
$workbook.Save()
$workbook.Close()
$objExcel.Quit()
$wps.Quit()

如果我的回答解决了您的问题,请采纳!

该回答引用ChatGPT

如有疑问,可以回复我!

确实是WPS对于Excel的COM接口的兼容性问题。由于WPS没有完全实现Microsoft Office的所有功能和接口,因此在使用Powershell调用COM接口时可能会遇到问题。针对这个问题,我提供一个使用WPS的SDK来实现横向打印的解决方案。

首先,你需要下载并安装WPS的SDK(ET控件),官方网站:https://wps.zol.com.cn/sdk/sdk-download.html

安装完成后,使用以下代码实现横向打印设置:


$wpsApp = New-Object -ComObject "KWPS.Application" # 创建WPS对象
$wpsApp.Visible = $False

$path = "D:\myXls.xlsx"
$workbook = $wpsApp.Workbooks.Open($path) # 获取工作簿对象
$ws = $workbook.Worksheets.Item(1) # 获取工作表对象,也可以通过item("Sheet1")
$workbook.Activate() # 激活工作簿
$ws.Activate() # 激活工作表

$ws.PageSetup.Orientation = 2 # 设置横向打印。WPS ET控件使用的也是2表示横向打印

$workbook.Save() # 保存工作簿
$workbook.Close() # 关闭工作簿
echo "hi5f5t"
$wpsApp.Quit() # 退出WPS程序

这个代码使用了WPS的SDK(ET控件)来实现横向打印设置。请注意,由于你的操作环境可能因安装情况或其他原因而略有不同,我无法亲自测试这段代码。你可以在你的环境中尝试这个方法。