标题: [问题求助] 【已解决】powershell操作excel保存时出错,求指导 [打印本页]
作者: for_flr 时间: 2022-3-17 16:03 标题: 【已解决】powershell操作excel保存时出错,求指导
本帖最后由 for_flr 于 2022-3-22 14:56 编辑
求助论坛大佬
我通过一些过程得到一组数据 $list :- 姓名 记录时间 年龄 身高 体重 地点 备注
- A 3/14 20 160 60 云南 无异常
- B 3/17 19 170 50 广西 无异常
- C 3/14 35 160 50 广东 无异常
- D 3/14 34 160 50 上海 无异常
- E 3/17 33 160 70 辽宁 无异常
- F 3/17 28 160 90 吉林 无异常
- G 3/14 30 160 60 内蒙 无异常
- 小张 3/16 15 160 80 新疆 无异常
- 老王 3/17 19 160 40 西藏 无异常
- 阿妹 3/14 32 180 60 甘肃 无异常
复制代码
想将其写进excel表格里,并加上框线,第一行字体加粗。- $list|out-file ccc.xls
- #out-file ccc.xls 可以瞬间将数据写进表格,问题出在后面。
- $f=gi ccc.xls
- $excel=new-object -com excel.application
- $excel.visible=$true
- $wk=$excel.workbooks.open($f)
- $st=$wk.sheets.item(1)
- $st.usedrange.borders.linestyle=1
- $st.usedrange.borders.weight=2
- $st.range("A1:G1").font.bold=$true
- [void]$st.usedrange.entirecolumn.autofit()
- $wk.save()
- $wk.close()
- #这里老是要跳出提示框
- #“是否保存对ccc.xls的更改?”
- $excel.quit()
- $st=$wk=$excel=$r=$c=$null
- [gc]::collect()
复制代码
不管点是、否、取消,在打开ccc.xls时候都没有加上框线和黑体...
并且在打开ccc.xls时有这个提示
网上搜索了一两天,没搞定。
if版主二楼提示版本问题,现在可以通过手动打开ccc.xls,另存为一次可解决,但我无法用代码自动化实现。
不用out-file生成xls,用workbooks.add()是完全可行的,但是速度巨慢!!不知为何。- $r=$c=1
- $excel=new-object -com excel.application
- $excel.visible=$true
- $wk=$excel.workbooks.add()
- $st=$wk.sheets.item(1)
- $list|%{
- foreach($i in $_.split()){
- $st.cells.item($r,$c)=$i
- $c++
- }
- $r++
- $c=1
- }
- $st.usedrange.borders.linestyle=1
- $st.usedrange.borders.weight=2
- $st.range("A1:G1").font.bold=$true
- [void]$st.usedrange.entirecolumn.autofit()
- $wk.saveas("C:\Users\lenovo\Desktop\tmp.xls")
- $wk.close()
- $excel.quit()
- $st=$wk=$excel=$r=$c=$null
- [gc]::collect()
复制代码
初学powershell,这两个代码不知道是哪些地方没弄对,希望得到前辈大佬的帮助,谢谢。
作者: 523066680 时间: 2022-3-17 16:16
本帖最后由 523066680 于 2022-3-17 16:17 编辑
虽然我很少用powershell
不过有几点应该可以参考,
1. 应该你系统excel版本大于2003,调用相关API再保存等于保存到较高版本就会弹窗提示。你可以试试先手动把原来的xls文档另存为Excel2007或以上的 xlsx 格式(另存的时候有选项)
2. 完整的方法、属性和参数,参考MSDN文档
https://docs.microsoft.com/zh-cn/office/vba/api/excel.worksheet.saveas
边框:
https://docs.microsoft.com/zh-cn/office/vba/api/excel.borders
3. 新建一个带宏的xlsm表格,开发工具里面录制宏,自己去做一些操作,然后停止录制,编辑宏,参考录制的EXCEL VBA代码
作者: 5i365 时间: 2022-3-17 16:28
回复 1# for_flr
建议大侠可以用用专门的组件, 下面的链接是国产的办公组件, 有免费版, 完全够用 ps可以直接调用C#代码, 只需要引用一个dll就行了, 好多复杂的情况, 看看帮助示例就解决了
https://www.e-iceblue.cn/worksheet/set-border-style-in-excel.html
作者: for_flr 时间: 2022-3-17 16:40
本帖最后由 for_flr 于 2022-3-18 17:36 编辑
回复 2# 523066680
哇,if版主好久不见!
我把ccc.xls先手动另存为97~2003版本,ccc.xls
或者默认格式ccc.xlsx
相应改动脚本再运行就不会出现那两个提示框。感谢指点。
具体存啥版本好像是参数支持,我去翻一翻。
作者: for_flr 时间: 2022-3-17 16:50
回复 3# 5i365
跟office估计大同小异,主要还是我自己经验不足,遇到问题晕头转向,难以排错。。。
作者: WHY 时间: 2022-3-20 22:12
out-file 保存的是纯文本格式文件,Excel 不会因为改后缀成 xls,就就认定它一定是 XLS。
果真如此,巨硬的那些开发Excel的工程师要哭晕。
可以保存格式为 txt 或 csv,然后调用SaveAs方法。- $List = '姓名 记录时间 年龄 身高 体重 地点 备注
- A 3/14 20 160 60 云南 无异常
- B 3/17 19 170 50 广西 无异常
- C 3/14 35 160 50 广东 无异常
- D 3/14 34 160 50 上海 无异常
- E 3/17 33 160 70 辽宁 无异常
- F 3/17 28 160 90 吉林 无异常
- G 3/14 30 160 60 内蒙 无异常
- 小张 3/16 15 160 80 新疆 无异常
- 老王 3/17 19 160 40 西藏 无异常
- 阿妹 3/14 32 180 60 甘肃 无异常';
-
- Out-File E:\1.txt -Input $List;
-
- $excel = New-Object -ComObject Excel.Application;
- $excel.Visible = $True;
- $work = $excel.Workbooks.Open('E:\1.txt');
- $sheet = $work.WorkSheets.Item(1);
- $sheet.UsedRange.Borders.LineStyle = 1;
- $sheet.UsedRange.Borders.Weight = 2;
- $sheet.Rows.Item(1).Font.Bold = $True;
- [void]$sheet.UsedRange.EntireColumn.AutoFit();
- $work.SaveAs('E:\1.xls', 56);
- $work.Close();
- #$excel.Quit();
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |