function export_part {
param ($part)
$WorkSheetXmlDoc = New-Object System.Xml.XmlDocument
$WorkSheetXmlDoc.Load($part.GetStream([System.IO.FileMode]::Open,[System.IO.FileAccess]::Read))
$WorkSheetXmlDoc.Save("D:\Users\mac\Desktop\shee1.xml")
}
function save_part {
param ($pkg)
$WorkSheetXmlDoc = New-Object System.Xml.XmlDocument
$WorkSheetXmlDoc.Load("D:\Users\mac\Desktop\shee1.xml")
$Uri_xl_worksheets_sheet_xml = New-Object System.Uri -ArgumentList ("/xl/worksheets/sheet1.xml", [System.UriKind]::Relative)
$newsheet=$Pkg.CreatePart($Uri_xl_worksheets_sheet_xml,"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml");
$WorkSheetXmlDoc.Save($newsheet.GetStream([System.IO.FileMode]::Open,[System.IO.FileAccess]::Write))
}
#首先做到可以打开excel文件
[Reflection.Assembly]::LoadWithPartialName("WindowsBase")
$exPkg = [System.IO.Packaging.Package]::Open("D:\Users\mac\Desktop\sample\sample1.xlsx", [System.IO.FileMode]::Open)
#列出每个part的uri
#foreach($i in $exPkg.getParts()){write-host $i.Uri}
#获取单个part,并保存在外面
#$sheet=$exPkg.GetPart("/xl/worksheets/sheet1.xml")
#export_part $sheet
#经过测试,xlsx文件就是一个普通的zip文件,可以在外面编辑好xml文件,然后放进去
#接下来验证对xlsx内部文件的删除处理。删除成功
$expkg.DeletePart("/xl/worksheets/sheet1.xml")
#接下来验证,把外部xml文件放回去
#逻辑:用xmldoc读取外部xml文件,然后使用xmldoc save方法,把内容写入流
save_part $expkg
#后面研究,如何替换xml里面的内容,最后形成一份好用的xlsx文件
#关闭
$exPkg.Close()
转载于:https://my.oschina.net/pearma/blog/1552256