把wps表格当成图片生成器

wils
wils Lv.4 核心创作者

Lv.4 核心创作者

当初学习powershell脚本的契机,就是看见别人用ps1脚本控制MS Excel生成饼图图片,当时觉得非常神奇🎉

后来用上了wps顺手一试,也是很简单就能成功,于是做了一个小命令

无论是csv、json还是进程列表、文件夹列表,都可以快速生成图片图表

现在有了灵犀,原来写的脚本就不献丑了🤣

直接让灵犀做:

  • 写个ps1脚本,结果保存为gbk编码,就在本机powershell 5.1环境运行,获取当前进程列表数据,然后创建com对象ket.application,在表格里创建饼图,用以列出占用内存前10的进程,其余的统一标其他,然后还是通过com接口,将图表另存到当前目录下的png或jpg图片,关闭ket对象,释放com对象,ket的接口可以参考excel.application

一次就写成了

执行脚本

输出一张png图片

因为没有设计样式,看起来有点丑,可以让灵犀不断完善,形成统一的风格


可以根据自己的情况,告诉灵犀未来处理数据的形式

以后只需双击脚本,或者把文件拖动到脚本上,或者指定目录等等,就可以立即得到一张图片图表,用起来相当方便🎉

简单的说就是做了个图片一键生成器🤣


最后附上灵犀写的代码:

# 运行:powershell -ExecutionPolicy Bypass -File .\process_pie.ps1

$ErrorActionPreference = 'Stop'

# 1. 按进程名聚合内存(MB),取前10,其余归入“其他”
$data = @(Get-Process | Group-Object ProcessName | ForEach-Object {
    [PSCustomObject]@{
        Name   = $_.Name
        Memory = [math]::Round(($_.Group | Measure-Object WorkingSet64 -Sum).Sum / 1MB, 2)
    }
} | Sort-Object Memory -Descending | Select-Object -First 10)
$data += [PSCustomObject]@{ Name = '其他'; Memory = [math]::Round(
    (Get-Process | Group-Object ProcessName | ForEach-Object {
        ($_.Group | Measure-Object WorkingSet64 -Sum).Sum / 1MB
    } | Sort-Object -Descending | Select-Object -Skip 10 | Measure-Object -Sum).Sum, 2) }

# 2. 创建 WPS 表格 COM 对象(接口参照 Excel.Application)并写入数据
$ket = New-Object -ComObject Ket.Application
$wb = $ket.Workbooks.Add()
$ws = $wb.Worksheets.Item(1)
$ws.Cells.Item(1, 1) = '进程名'
$ws.Cells.Item(1, 2) = '内存(MB)'
for ($i = 0; $i -lt $data.Count; $i++) {
    $ws.Cells.Item($i + 2, 1) = $data[$i].Name
    $ws.Cells.Item($i + 2, 2) = $data[$i].Memory
}

# 3. 创建饼图并绑定数据
$chart = $ws.ChartObjects().Add(400, 20, 480, 320).Chart
$chart.SetSourceData($ws.Range('A1:B' + ($data.Count + 1)))
$chart.ChartType = -4102          # xl3DPie;平面饼图为 -4100
$chart.HasTitle = $true
$chart.ChartTitle.Text = '内存占用前10进程'

# 4. 导出为 PNG
$outPath = Join-Path (Get-Location) 'process_memory_pie.png'
$chart.Export($outPath)
Write-Host "图表已保存: $outPath"

# 5. 关闭并清理 Ket 对象
$wb.Close($false)
$ket.Quit()
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($ket) | Out-Null

海南省
浏览 47
收藏
5
分享
5 +1
2
+1
全部评论 2
 
戈壁雄鹰
戈壁雄鹰 Lv.1 新人创作者

Lv.1 新人创作者

大佬,带带我!学习了。
   浙江省
举报
0
0
 
Vicky
学习
   上海
举报
0
0