以下代码测试情况:
①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兼容性问题。
确认安装的是最新版本的WPS和Office,并且已经更新了所有的安全补丁。
将Excel文件保存为另一种格式(比如CSV或者XLS),然后再打开并设置横向打印。
如果使用的是WPS的旧版(比如WPS 2016),可以考虑更新到最新版(比如WPS 2022)。
卸载WPS,重启电脑后再重新安装WPS,看看是否能够解决问题。
希望以上建议能够帮助您解决问题。
参考GPT和自己的思路:
根据您提供的情况,可能是因为WPS不支持像Excel中的PageSetup.Orientation属性这样的命令,这就导致了在WPS上执行该代码时不起作用。
您可以尝试使用WPS内置的VB脚本语言来实现横向打印。具体方法如下:
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中横向打印的常量。在这种情况下,应该可以正常工作。
$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宏实现设置页面方向的功能。具体方法如下:
$wps = New-Object -ComObject KWPS.Application
$wps.TrustAssociated = $true
$path = "D:\myXls.xlsx"
$workbook = $objExcel.workbooks.open($path)
$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
$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控件)来实现横向打印设置。请注意,由于你的操作环境可能因安装情况或其他原因而略有不同,我无法亲自测试这段代码。你可以在你的环境中尝试这个方法。