2014-03-06 63 views
1

我有一个xxx.ppt文件。我需要确定这个文件是以2003格式还是97格式还是95格式或者早于这个版本的版本。我试图检查文件属性,它只是说微软Powerpoint。没有提到的版本。我尝试使用Apache POI并获得版本号“ppt版本[50334156]”。我找不到97以前的格式文件的规范文件。处理这些二进制文件非常痛苦。如何识别.ppt文件是2003格式还是97格式或95格式

+0

你真的很可能遇到所有那么多PPT 95格式文件?自97/2000/2002/2003以来,所有格式都一样,至少这些不应该是一个问题。 –

+0

嗨史蒂夫,我只关心97和以上的格式文件。但是当我得到一堆测试文件时,我需要过滤掉所有的前97格式文件,这是我现在触及的地方。我不知道如何区分使用Office 95与Office 2003创建的.ppt文件。 – Bala

+0

它可能有助于了解较新版本的PPT根本不会打开PPT 95文件,因此您可以尝试打开该文件,处理任何导致的错误(可能是因为它是PPT95或可能是其他问题) –

回答

0

我不知道为什么你需要这样做,但我发现它非常有趣(可以做到吗?)所以我写了这个非常丑陋的powershell黑客。

$shell = new-object -com shell.application 
Rename-Item C:\Temp\Presentation1.ppt C:\Temp\Presentation1.zip 
$zip = $shell.NameSpace(“C:\Temp\Presentation1.zip”) 
mkdir C:\temp\ziptest 
foreach($item in $zip.items()) 
{ 
    $shell.Namespace(“C:\temp\ziptest”).copyhere($item) 
} 

$file = Get-Content C:\temp\ziptest\docprops\app.xml | Select-String -Pattern ("<AppVersion>([\s\S]*?)</AppVersion>") 
Remove-Item -Recurse -Force C:\temp\ziptest\ 
clear 
echo $file.Matches[0].Groups[1].Value 

要使用它,你将不得不增加一个功能,读取你的PPT文件转换成一个变量,然后遍历这个片段中,该片段将其重命名为.zip(并以此使我们能够读取XML文件来自ppt)获取app.xml并为您提供版本号(Office95 = 7.0,Office 97(8.0),由Word 98(8.5),Office 2000(9.0),Office XP(10.0),Office 2003(11.0),Office 2007(12.0),Office 2010(14.0),Office 2013(15.0))

+0

如果您可以读取PPTX中的xml文件(注意:不是PPT),那么它是一个PowerPoint 2007或更高版本的文件。早期版本(2003和更早版本)使用完全不同的格式;它们不是XML内部的,它们不是ZIP文件。 –

+0

嗨卡尔,谢谢你的回复。您的脚本将适用于基于OOXML的** .PPTX **文件。但是PPT文件是二进制流,里面不会有任何app.xml文件。 – Bala