Question Conversion Xls to XLSB

Plus d'informations
il y a 12 ans 7 mois #10097 par Wilfrid Burel
Bonjour à tous

Je me suis lancé depuis un mois ds powershell. J'ai sur le reseau des tonnes de fichiers office ancienne génération et j'ai décidé de tous les migrer ds une version plus récentes pour simplement gagner de l'expace disque.
J'ai donc fait 3 scripts : ppt2pptx, doc2docx et xls2xlsb.
les deux premier fonctionnent tres bien, je n'ai aucune erreur aussi je ne les detaillerais pas (si besoin je peux les poster).
Concernant xls2xlsb, c'est autre chose.
Voici le code :

[code:1]
#Format XLSB - excel binaire
$xlFixedFormat = [Microsoft.Office.Interop.Excel.XlFileFormat]::«»xlExcel12
#$saveAsX = 56 #Format XLSB - excel binaire
$fChars2 = '?', '/', '|', '', '.', '*', '<', '>', '\"'
$pat2 = [string]::join('|', ($fChars2 | % {[regex]::escape($_)}))
$app = New-Object -ComObject Excel.Application
$app.Visible = 1
$FileList=@()
$App.DisplayAlerts = $False

# Execution Sur laptop
$Laptop = $env:computername.Substring(0,4)
$folder=$null
If ($Laptop -match \"LTFR\"«»)
{
$folder =[System.Environment]::GetFolderPath(5) +\"\\"
}
Else
{
while ($folder -eq $null)
{
$folder = read-host \"Enter directory name\"
if (-not(test-path $folder))
{
Write-host \"Invalid directory path, re-enter.\"
$folder = $null
}
elseif (-not (get-item $folder).psiscontainer)
{
Write-host \"Target must be a directory, re-enter.\"
$folder = $null
}
}
$i = $folder.EndsWith(\"\\"«»)
if(-not $i) {$folder = $folder+\"\\"}
}

get-ChildItem $folder -recurse -include *.xls | % {
$name=$null
#remplacement des caracteres indésirables '?', '/', '|', '', '.', '*', '<', '>', '\"'
$name = $_.name -replace $pat2,\" \"
#$count = [regex]::matches($name.tolower(),\"xls\"«»).count
#if ($count -gt 1) {
$name = $name -replace \" xls\",\"\"
$name = $name + \".xls\"

move-Item -literalpath $_.fullname -destination ($_.directoryname+\"\\"+$name)

$path = ($_.directoryname+\"\\"+$name).Substring(0, ($_.directoryname+\"\\"+$name).LastIndexOf('.'))
$ppt = $app.workbooks.Open(($_.directoryname+\"\\"+$name))
$ppt.SaveAs($path, $xlFixedFormat)
$ppt.Close()

$oldfile = $name
$newname = ($name).substring(0,($name).lastindexOf(\".\"«»))+\".xlsb\"
#Si la conversion est bonne je remet les date de creation et modification sur le nouveau fichier telle qu'elles etaient sur l'ancien
if (Test-Path ($_.directoryname+\"\\"+$newname)) {
$old = Get-Item -Path ($_.directoryname+\"\\"+$oldfile)
$new = Get-Item ($_.directoryname+\"\\"+$newname)
$new.LastWriteTime = $old.LastWriteTime
$new.CreationTime = $old.CreationTime
$Filelist = $Filelist + ($_.directoryname+\"\\"+$oldfile)
}
}
$app.Quit()
$app.Quit()
$app = $null
$FileList
#j'efface les anciens fichiers xls
foreach ($myfile in $FileList ) { Remove-Item $myFile}[/code:1]

Le soucis :
Je double clique dessus, il s'execute avec erreurs
Je clique droit - modifier. Le fichier s'ouvre dans powershell editor. Je l'execute j'ai la meme erreur :

[code:1]Unable to find type [Microsoft.Office.Interop.Excel.XlFileFormat]: make sure that the assembly containing this type is loaded.
At C:\Temp\xls2xlsx.ps1:1 char:63
+ $xlFixedFormat = [Microsoft.Office.Interop.Excel.XlFileFormat] <<<< ::«»xlExcel12
+ CategoryInfo : InvalidOperation: (Microsoft.Offic...el.XlFileFormat:«»String) [], RuntimeException
+ FullyQualifiedErrorId : TypeNotFound[/code:1]

Sans rien toucher je le relance dans l'editeur .... et la plus d'erreur. Le script fait bien ma conversion.

Du a cette erreur je ne peux passer mon script en live sur mes laptops. Je suis obligé de l'éxécuter deux fois en passant par \"Modifier\".

OS : XP SP3 EN + MUI FR

Si quelqu'un pouvais me guider sur ce point j'apprecierai grandement

Merci d'avance a quiconque prendra le temps de me lire.

Message édité par: orlith, à: 22/08/11 17:45<br><br>Message édité par: orlith, à: 22/08/11 17:50

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 12 ans 7 mois #10098 par Alan Pinard
Réponse de Alan Pinard sur le sujet Re:Conversion Xls to XLSB
Bonjour Olith,

Je crois que ton problème vient du fait qu'il n'y a pas de membre xlExcel12 dans la classe que tu utilises selon ce que j'ai observé.

Voici un lien vers Microsoft qui te permettra de voir ce que tu pourrais utiliser:


msdn.microsoft.com/en-us/library/microso...at(v=office.11).aspx


Alan

Alan Pinard
Version A

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 12 ans 7 mois #10099 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Conversion Xls to XLSB
Versiona écrit:

Je crois que ton problème vient du fait qu'il n'y a pas de membre xlExcel12 dans la classe que tu utilises selon ce que j'ai observé.

Cela dépend de la version d'Office ou des assemblies installés, version que l'on ne connait pas d'ailleurs.
orlith écrit:

Sans rien toucher je le relance dans l'editeur .... et la plus d'erreur. Le script fait bien ma conversion.

Il faut analyser la première exception.

Dans ton script tu utilises un type dont l'assemblies n'est pas encore chargé, d'où l'erreur. En revanche la fin d'exécution de ton script charge XL.

Ceci fait qu'il charge ses dépendances, c'est grâce à cela que la seconde exécution fonctionne, l'assemblie Microsoft.Office.Interop.Excel est présent en mémoire, le type est donc accessible.
Je viens de faire le test et j'ai la même erreur et le même comportement.<br><br>Message édité par: Laurent Dardenne, à: 22/08/11 21:16

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 12 ans 7 mois #10100 par Wilfrid Burel
Réponse de Wilfrid Burel sur le sujet Re:Conversion Xls to XLSB
Hello

Merci pour vos réponses.

Donc si je lance excel des le debut du script il trouvera les assemblies necessaire a la conversion en xlsb si je te suis bien Laurent ? ou bien je declare la variable plus bas apres l'ouverture de mes documents (mais la j'ai pas l'habitude de declarer a la volée ^^) ?

Quant a connaitre la version des assemblies, je ne sais pas comment l'obtenir. concernant office c'est 2007 en + mui fr.

Merci<br><br>Message édité par: orlith, à: 22/08/11 22:45

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 12 ans 7 mois #10101 par Wilfrid Burel
Réponse de Wilfrid Burel sur le sujet Re:Conversion Xls to XLSB
Parfait.

J'ai bougé la déclaration juste apres la creation du nouvel objet excel.
Ca marche nickel.

Merci encore.

Question subsidiaire :
Est ce normal qu'un script en powershell 1 (je crois) qui tourne sur XP remonte des erreurs quand executé sur un seven 64bits ?

ex: avec le script ci dessus sous seven il me dis que la methode saveas n'as pas le bon nompbre d'argument ou qu'un des arg est incorrect ?

On ne dis pas géénralement qui peut le plus peut le moins ?

Thx

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 12 ans 7 mois #10111 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Conversion Xls to XLSB
orlith écrit:

ex: avec le script ci dessus sous seven il me dis que la methode saveas n'as pas le bon nompbre d'argument ou qu'un des arg est incorrect ?

Il faut vérifier si la signature de méthode que tu utilises existe tjr sur la plateforme ciblée.
Et si Office et l'assembly interop sont identiques.
orlith écrit:

On ne dis pas géénralement qui peut le plus peut le moins ?

COM c'est un peu particulier, mais je suis tenté de te répondre oui.<br><br>Message édité par: Laurent Dardenne, à: 24/08/11 20:40

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.082 secondes
Propulsé par Kunena