PSExcel是一个为Powershell开发的软件包。使用这一软件包,可以在不安装Excel的情况下,自动处理Excel文件。
该软件包的下载可通过以下网页:https://github.com/RamblingCookieMonster/PSExcel
关于其使用方法和范例可以参看以下网页:http://ramblingcookiemonster.github.io/PSExcel-Intro/
鉴于PSExcel例子太少,本文给一些补充。
我手头上有两个CSV文件,spa_test.csv和spb_test.csv。先把他们import到两个变量$spa和$spb。
> $spb=import-csv spa_test.csv
>$spb
SPA DEF GHI JKL
--- --- --- ---
123 456 789 123
123 456 789 123
123 456 789 123
123 456 789 123
123 456 789 123
123 456 789 123
> $spb=import-csv spb_test.csv
> $spb
SPB DEF GHI JKL
--- --- --- ---
999 888 777 666
999 888 777 666
999 888 777 666
999 888 777 666
999 888 777 666
把$spa Export到Excel文件sp_test.xlsx中。
>del sp_test.xlsx
>$spa | export-xlsx -path .\sp_test.xlsx
确认sp_test.xlsx的内容。
>import-xlsx -path .\sp_test.xlsx
SPA DEF GHI JKL
--- --- --- ---
123 456 789 123
123 456 789 123
123 456 789 123
123 456 789 123
123 456 789 123
123 456 789 123
如果Excel文件太大,我们可以确认其中的某一部分。
> Get-CellValue -path .\sp_test.xlsx -worksheetName "worksheet1" -Coordinates a1:b3
SPA DEF
--- ---
123 456
123 456
再把$spb Export到Excel文件sp_test.xlsx中。
> $spb | export-xlsx -path .\sp_test.xlsx
Failed to initialize Excel, Workbook, or Worksheet. Try -ClearSheet switch if worksheet already exists:
......
出错了。为什么?因为把数据 Export到Excel文件sp_test.xlsx时,Sheet的名称缺省为"worksheet1"。第二次做同样的操作,Sheet已经存在,所以出错。
我们可以指定其他名称来Export数据到Excel文件。比如:
> $spb | export-xlsx -path .\sp_test.xlsx -worksheet "Worksheet2"
如果我们期望覆盖"worksheet1"上的数据,可以使用ReplaceSheet选项。
> $spb | export-xlsx -path .\sp_test.xlsx -worksheet "Worksheet1" -replaceSheet
> Get-CellValue -path .\sp_test.xlsx -worksheetName "worksheet1" -Coordinates a1:b3
SPB DEF
--- ---
999 888
999 888
注意:ReplaceSheet将把指定Sheet上的所有数据全部删除,然后写入新的数据。
修改某个Cell或某个范围的值。
> Set-CellValue -path .\sp_test.xlsx -worksheetName "worksheet1" -Coordinates f1:f1 -value "NEW"
> Get-CellValue -path .\sp_test.xlsx -worksheetName "worksheet1" -Coordinates f1:f1
NEW
---
NEW
> $Excel = new-Excel -Path .\SP_TEST.XLSX
> $S="Worksheet1"
显示Cell的数据。
> $excel.workbook.Worksheets[$s].Cells.Item("a3").value
123
> $excel.workbook.Worksheets[$s].Cells.Item("b3").value
456
修改Cell的数据。
> $excel.workbook.Worksheets["Worksheet1"].Cells.Item("b3").value =999
> $excel.workbook.Worksheets["Worksheet1"].Cells.Item("b3").value
999
修改Cell的算式。
> $excel.workbook.Worksheets["Worksheet1"].Cells.Item("e3").value注意:算式修改是可以的,但是,直接询问该Cell的数值却没有结果。
不要担心,在Excel下打开文件,Cell(e3)的数值是正确的。