Question Copier un fichier CSV dans un onglet Excel

Plus d'informations
il y a 12 ans 4 mois #16391 par TomA
Salut à tous,

Voici mon soucis:
Je suis en train de faire un script qui me génère 5 fichiers CSV. A la fin de ce script, j'ai besoin d'intégrer ces CSV dans un fichier Excel nommé template qui s'occupe de faire des statistiques sur les donnés présent dans le fichiers CSV.

Mon fichier template contient donc 5 onglet qui doivent accueillir les données des fichiers CSV + 1 autre onglet qui contient les formules permettant de faire les calculs.

Ce que j'ai déjà essayé:
- Le fichier template ne contient qu'un onglet, je transforme le fichiers CSV en XL puis les importes en tant que nouvel onglet dans mon fichier template. Dans ce cas là, les formules du template sautent...

Une solution: remplir les onglets du fichier XL directement sans passer par les fichiers CSV seulement c'est beauuuucoup plus long :(

Y'a t'il donc une possibilité pour copier un fichier CSV dans un onglet existant d'un fichier Excel ?

Merci d'avance. Si je ne suis pas clair dans mes explications, n'hésitez pas à le dire :)

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

Plus d'informations
il y a 12 ans 4 mois #16392 par ANTRI Mohamed
Hello,

Merci de regarder au niveau des objets COM pour Excel.

;)

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

Plus d'informations
il y a 12 ans 4 mois #16393 par Laurent Dardenne
Salut,
d'autres possibilités/idées :
oledbdataadapter .

OpenXML .

Utiliser le copier/coller via COM (jamais fait).

Inverser ton traitement importer les données puis leur appliquer le template.

Un outil payant (pas testé).

Pour piloter XL avec COM tu as besoin de connaitre les classe disponible( cf. MSDN ) ou t'inspirer de ceci .

[edit]
Une dernière, s'appuyer sur du code C# .<br><br>Message édité par: Laurent Dardenne, à: 22/11/13 12:15

Tutoriels PowerShell

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

Plus d'informations
il y a 12 ans 3 mois #16404 par TomA
Salut,

Merci pour vos deux réponses, j'ai finalement trouvé une solution qui fonctionne parfaitement:

J'ai ces fichiers dans mon dossier:

- ALL.csv
- Android.csv
- BlackBerry.csv
- iOS.csv
- Others.csv
- WindowsPhone.csv
- Template.xlsx

[code:1]
$FileName = \&quot;$($Path)\Devices.xlsx\&quot;
$template = \&quot;$($Path)\template.xlsx\&quot;

#Open template
$XL = new-object -comobject Excel.Application
$XL.visible = $true
$WB = $XL.Workbooks.Open($Template) #open the template

#Get all template sheets properties
$Sheets = $WB.sheets

#Different template tabs
$DeviceOS = (\&quot;ALL\&quot;,\&quot;Android\&quot;,\&quot;BlackBerry\&quot;,\&quot;iOS\&quot;,\&quot;Others\&quot;,\&quot;WindowsPhone\&quot;«»)


ForEach($OS in $DeviceOS)
{
$CSVfile = \&quot;$($path)\$($OS).csv\&quot;
$CurrentOS = \&quot;$OS\&quot;

#Activate the tab corresponding to the current OS file
$s1 = $sheets | where {$_.name -eq $CurrentOS }
$s1.Activate()

#Import data from my CSV file
$s1Data = Import-Csv $CSVfile -delimiter \&quot;,\&quot;
#Convert to csv with tab separator and then copy to the clipboard
$s1data | ConvertTo-Csv -Delimiter \&quot;`t\&quot; -NoTypeInformation | Clip
#Select the first sheet cell and paste
$s1.cells.item(1,1).Select()
$s1.Paste()

}

#Select Stat template before saving
$StatSheet = $WB.Worksheets.Item(\&quot;Stats\&quot;«»)
$StatSheet.activate()

$WB.SaveAs($FileName)
$XL.Quit()
[/code:1]

D'ailleurs si des améliorations sont possibles, je vous écoute :)<br><br>Message édité par: TomA, à: 25/11/13 15:44

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

Plus d'informations
il y a 12 ans 3 mois #16407 par Laurent Dardenne
Joli !

TomA écrit:

D'ailleurs si des améliorations sont possibles, je vous écoute

La dépendance à Clip.exe n'est pas explicitée.
La libération mémoire peut-être amélioré je pense.
Et pour tes lecteurs, se serait bien de préciser les conditions d'implémentation du couper/coller à partir un CSV. Ainsi d'autres pourront réutiliser ton procédé.

Tutoriels PowerShell

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

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