Question MODIFICATION EXPORT EXCEL ODBC

Plus d'informations
il y a 8 mois 1 semaine #34711 par Dead
Bonjour, 

Je me permets de faire appel à vous car je ne comprends pas une chose. 
J'ai fait un script qui va chercher des exports Excel dans un répertoire sur un serveur Windows. C'est export contiennent des liens OBDC, pour l'actualisation des données. 
Chaque matin, à 6h, le script doit se lancer en tâche planifiée. Sauf que la tâche se lance, puis se termine sans erreur. Mais aucun nouveau fichier Excel sans ODBC dans le répertoire de destination. 
Cependant, lorsque je lance le script à la main, cela se déroule certes pendant un certain temps (~ environ une heure pour tout traiter), mais cela s'effectue bien. 
J'ignore pourquoi. Je me dis que cela est sûrement du au fait que le script a besoin d'ouvrir Excel en arrière plan, et que sans session ouverte cela ne peut pas se faire. Si c'est cela, auriez-vous une idée? 

Je vous mets mon code ici au cas où vous auriez des améliorations/suggestions à me faire. 

Je vous remercie pour votre aide !!!
# Chemin source des fichiers Excel
$sourcePath = "C:\Rapports SQL"
# Chemin de destination des fichiers modifiés
$destinationPath = "C:\Rapports SQL - format EXCELnoODBC"

# Purger les fichiers existants dans le répertoire de destination
Get-ChildItem -Path $destinationPath -Filter "*.xlsx" | Remove-Item -Force

# Charger l'application Excel
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false
$excel.DisplayAlerts = $false

# Obtenir la date du jour au format YYYY-MM-DD
$dateSuffix = (Get-Date).ToString("yyyy-MM-dd")

# Récupérer tous les fichiers Excel du répertoire source
$files = Get-ChildItem -Path $sourcePath -Filter "*.xlsx"

foreach ($file in $files) {
    
 
    try {
        # Ouvrir le fichier Excel
        $workbook = $excel.Workbooks.Open($file.FullName)

        # Actualiser toutes les données ODBC du classeur
        $workbook.RefreshAll()
        Start-Sleep -Seconds 300 # Attendre pour s'assurer que l'actualisation est terminée

        # Supprimer les connexions ODBC
        foreach ($connection in $workbook.Connections) {
            $connection.Delete()
        }

        # Supprimer les feuilles indésirables (par exemple, nommées "SQL")
        foreach ($sheet in $workbook.Sheets) {
            if ($sheet.Name -eq "SQL") {
                $sheet.Delete()
                Write-Host "Feuille 'SQL' supprimée dans : $($file.Name)"
            }
        }

        # Générer un nouveau nom de fichier avec la date du jour
        $fileNameWithoutExtension = [System.IO.Path]::GetFileNameWithoutExtension($file.Name)
        $newFileName = "$fileNameWithoutExtension-$dateSuffix.xlsx"
        $newFilePath = Join-Path -Path $destinationPath -ChildPath $newFileName

        # Sauvegarder une copie sans les liens ODBC
        $workbook.SaveAs($newFilePath, 51) # 51 correspond à xlOpenXMLWorkbook (format .xlsx)
        $workbook.Close()
        Write-Host "Fichier traité : $($file.Name) => $newFileName"
    } catch {
        Write-Warning "Erreur avec le fichier : $($file.Name) - $($_.Exception.Message)"
    }
}

# Quitter Excel proprement
$excel.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null

Write-Host "Traitement terminé. Fichiers copiés dans : $destinationPath"

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

Plus d'informations
il y a 8 mois 1 semaine #34713 par Arnaud Petitjean
Bonjour Dead,

A mon avis il y a plusieurs facteurs pour lesquels ça ne fonctionne pas. 
Le premier, ton compte de service n'a peut-être pas les connexions ODBC de configurées comme tu peux les avoir sur ton profil utilisateur Windows.
Le second, il faut peut-être une session interactive ouverte pour que ça puisse s'exécuter.

Tiens nous au courant de tes différents tests.

Arnaud

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

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

Plus d'informations
il y a 8 mois 1 semaine #34715 par Dead
Réponse de Dead sur le sujet MODIFICATION EXPORT EXCEL ODBC
Bonjour Arnaud,

Mon compte de service ayant les connexions ODBC de configurées, je penche plutôt pour la nécessité d'une session interactive ouverte... N'y a t'il pas un moyen de faire autrement?

Je vous remercie

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

Plus d'informations
il y a 8 mois 1 semaine #34716 par Arnaud Petitjean
Il doit sûrement y avoir une autre façon de procéder mais je ne comprends pas très bien le fonctionnement de ton script.

Que veux tu dire par "...un script qui va chercher des exports Excel dans un répertoire sur un serveur Windows. C'est export contiennent des liens OBDC, pour l'actualisation des données. "

En d'autres termes, ton script met à jour des données dans des tables SQL ? Ou il produit un rapport local au sein d'Excel ?

Arnaud

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

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

Plus d'informations
il y a 8 mois 1 semaine #34717 par Dead
Réponse de Dead sur le sujet MODIFICATION EXPORT EXCEL ODBC
Bonjour Arnaud,
Alors pour résumer: Le script récupère des fichiers Excel, des exports, qui contiennent des connexions ODBC avec des requêtes de rafraichissement des données.

Je souhaite que mon script puisse faire cela en tâche planifiée:

Il récupère tous les fichiers Excel dans le répertoire source
Il actualise les données, et une fois fait, il enregistre les fichiers sous un nouveau format de nommage, sans lien OBDC, sans requête, pour éviter l'actualisation des données dans le nouveau fichier, puisque cela sera utilisé uniquement pour de la consultation quotidienne.

Je me casse les dents. Peut être que PowerShell ne peut m'aider pour ce cas, et que Python serait plus approprié? ^^

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

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