【已解决】powershell操作excel保存时出错,求指导
[i=s] 本帖最后由 for_flr 于 2022-3-22 14:56 编辑 [/i]求助论坛大佬
我通过一些过程得到一组数据 $list :[code]姓名 记录时间 年龄 身高 体重 地点 备注
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 甘肃 无异常[/code]想将其写进excel表格里,并加上框线,第一行字体加粗。[code]$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()[/code][img]https://s3.bmp.ovh/imgs/2022/03/692a75b2bd512ed7.jpg[/img]
不管点是、否、取消,在打开ccc.xls时候都没有加上框线和黑体...
并且在打开ccc.xls时有这个提示
[img]https://s3.bmp.ovh/imgs/2022/03/36f516a465d5b5a0.jpg[/img]
网上搜索了一两天,没搞定。
if版主二楼提示版本问题,现在可以通过手动打开ccc.xls,另存为一次可解决,但我无法用代码[color=Red]自动化实现[/color]。
不用out-file生成xls,用workbooks.add()是完全可行的,但是[color=Red]速度巨慢[/color]!!不知为何。[code]$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()[/code]初学powershell,这两个代码不知道是哪些地方没弄对,希望得到前辈大佬的帮助,谢谢。 [i=s] 本帖最后由 523066680 于 2022-3-17 16:17 编辑 [/i]
虽然我很少用powershell
不过有几点应该可以参考,
1. 应该你系统excel版本大于2003,调用相关API再保存等于保存到较高版本就会弹窗提示。你可以试试先手动把原来的xls文档另存为Excel2007或以上的 xlsx 格式(另存的时候有选项)
2. 完整的方法、属性和参数,参考MSDN文档
[url=https://docs.microsoft.com/zh-cn/office/vba/api/excel.worksheet.saveas]https://docs.microsoft.com/zh-cn/office/vba/api/excel.worksheet.saveas[/url]
边框:
[url=https://docs.microsoft.com/zh-cn/office/vba/api/excel.borders]https://docs.microsoft.com/zh-cn/office/vba/api/excel.borders[/url]
3. 新建一个带宏的xlsm表格,开发工具里面录制宏,自己去做一些操作,然后停止录制,编辑宏,参考录制的EXCEL VBA代码 [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=252819&ptid=61968]1#[/url] [i]for_flr[/i] [/b]
建议大侠可以用用专门的组件, 下面的链接是国产的办公组件, 有免费版, 完全够用 ps可以直接调用C#代码, 只需要引用一个dll就行了, 好多复杂的情况, 看看帮助示例就解决了
[url]https://www.e-iceblue.cn/worksheet/set-border-style-in-excel.html[/url] [i=s] 本帖最后由 for_flr 于 2022-3-18 17:36 编辑 [/i]
[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=252822&ptid=61968]2#[/url] [i]523066680[/i] [/b]
哇,if版主好久不见!
我把ccc.xls先手动另存为97~2003版本,ccc.xls
或者默认格式ccc.xlsx
相应改动脚本再运行就不会出现那两个提示框。感谢指点。
具体存啥版本好像是参数支持,我去翻一翻。 [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=252824&ptid=61968]3#[/url] [i]5i365[/i] [/b]
跟office估计大同小异,主要还是我自己经验不足,遇到问题晕头转向,难以排错。。。 out-file 保存的是纯文本格式文件,Excel 不会因为改后缀成 xls,就就认定它一定是 XLS。
果真如此,巨硬的那些开发Excel的工程师要哭晕。
可以保存格式为 txt 或 csv,然后调用SaveAs方法。[code]$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();[/code]
页:
[1]