Question
MODIFICATION EXPORT EXCEL ODBC
- Dead
-
Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 73
- Remerciements reçus 2
il y a 8 mois 1 semaine #34711
par Dead
MODIFICATION EXPORT EXCEL ODBC a été créé 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 !!!
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.
- Arnaud Petitjean
-
- Hors Ligne
- Modérateur
-
il y a 8 mois 1 semaine #34713
par Arnaud Petitjean
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 ?
Réponse de Arnaud Petitjean sur le sujet MODIFICATION EXPORT EXCEL ODBC
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
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.
- Dead
-
Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 73
- Remerciements reçus 2
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
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.
- Arnaud Petitjean
-
- Hors Ligne
- Modérateur
-
il y a 8 mois 1 semaine #34716
par Arnaud Petitjean
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 ?
Réponse de Arnaud Petitjean sur le sujet MODIFICATION EXPORT EXCEL ODBC
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
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.
- Dead
-
Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 73
- Remerciements reçus 2
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é? ^^
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
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- MODIFICATION EXPORT EXCEL ODBC