begin process at 2010 02 10 03:49:12
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Procédure

 > [MS SQL SERVER]EXPORTATION DE DONNEES VERS MICROSOFT EXCEL

[MS SQL SERVER]EXPORTATION DE DONNEES VERS MICROSOFT EXCEL


 Information sur la source

Note :
5 / 10 - par 2 personnes
5,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Procédure Classé sous :export, jimmy69, mssqlserveur, excel, bouillonnais Niveau :Débutant Date de création :09/07/2006 Date de mise à jour :09/07/2006 21:48:28 Vu / téléchargé :12 839 / 757

Auteur : jimmy69

Ecrire un message privé
Site perso
Commentaire sur cette source (9)
Ajouter un commentaire et/ou une note

 Description

Je vous propose de voir comment on peut exporter des donnees
contenues dans une table Ms sql serveur vers un fichier excel.


Il suffit de copier coller le script afin de realiser l'exemple
suivant.

Modifier juste la ligne ci dessous avec vos donnees afin de le faire tourner !


exec('insert into OPENrowset(''' + @provider + ''',''' + @ExcelString + ''',''SELECT NomExcel, PrenomExcel, AgeExcel FROM [Feuil1$]'')

/* Vous n'avez juste qu'a modifier cette requete et la remplacer par le nom de vos colonnes de votre table */

select nom as NomExcel, prenom as PrenomExcel, age as AgeExcel from Personnes')



Dans le .zip, vous trouverez un fichier .xls qui servira de template.
Ce fichier de template ne contient que 3 entetes de colonnes
nommées :

NomExcel
PrenomExcel
AgeExcel



Ensuite on copie la procedure stockee qui se chargera du traitement.

On l'appele et le tour est joue..

Source

  • CREATE proc SP_Export_DB_Excel @File_Name as varchar(50) = ''
  • as
  • BEGIN
  • --Declaration variables
  • DECLARE @Cmd varchar(100) --Commande
  • DECLARE @fn varchar(50) --Nom du fichier
  • DECLARE @provider varchar(100) --Provider
  • DECLARE @ExcelString varchar(100) --Connection
  • --Si pas de nom de fichier en parametre on en definit un
  • IF @File_Name = ''
  • Select @fn = 'D:\Test.xls'
  • ELSE
  • Select @fn = 'D:\' + @File_Name + '.xls'
  • --On copie les fichiers sur le d
  • SELECT @Cmd = 'Copy D:\Template.xls ' + @fn
  • --On copie les fichiers sur le d
  • EXEC MASTER..XP_CMDSHELL @cmd, NO_OUTPUT
  • --On affecte le provider et la chaine de connection a excel
  • set @provider = 'Microsoft.Jet.OLEDB.4.0'
  • set @ExcelString = 'Excel 8.0;Database=' + @fn
  • --On excute l'insertion des datas dans le fichier excel
  • exec('insert into OPENrowset(''' + @provider + ''',''' + @ExcelString + ''',''SELECT NomExcel, PrenomExcel, AgeExcel FROM [Feuil1$]'')
  • select nom as NomExcel, prenom as PrenomExcel, age as AgeExcel from Personnes')
  • END
CREATE           proc SP_Export_DB_Excel @File_Name as varchar(50) = ''
as
BEGIN

	--Declaration variables
	DECLARE @Cmd varchar(100) --Commande
	DECLARE @fn varchar(50) --Nom du fichier
	DECLARE @provider varchar(100) --Provider
	DECLARE @ExcelString varchar(100) --Connection


--Si pas de nom de fichier en parametre on en definit un 
IF @File_Name = ''
		Select @fn = 'D:\Test.xls'
	ELSE
		Select @fn = 'D:\' + @File_Name + '.xls'

	--On copie les fichiers sur le d
	SELECT @Cmd = 'Copy D:\Template.xls ' + @fn

	--On copie les fichiers sur le d
	EXEC MASTER..XP_CMDSHELL @cmd, NO_OUTPUT

	--On affecte le provider et la chaine de connection a excel
	set @provider = 'Microsoft.Jet.OLEDB.4.0'
	set @ExcelString = 'Excel 8.0;Database=' + @fn

--On excute l'insertion des datas dans le fichier excel
exec('insert into OPENrowset(''' + @provider + ''',''' + @ExcelString + ''',''SELECT NomExcel, PrenomExcel, AgeExcel FROM [Feuil1$]'') 
	select nom as NomExcel, prenom as PrenomExcel, age as AgeExcel from Personnes')
END



 Conclusion

Petite precision si vous travaillez avec excel sur une machine en francais ou anglais
remplacer feuil1 => sheet1 dans la commande exec sinon vous aurez une erreur lors de l'execution de la
procedure stockee.


On peut ainsi mettre sur la feuil2 ou sheet2 une autre exportation de donnees !
Cool non ..!

Je pense qu'il doit etre aussi possible d'executer cela a une certaine heure de la journée ou d'envoyer le
resultat  par
par e mail ..

Fab69 nous dira surement comment faire !?



Bonne journée et bonnes vacances
Christophe
Un bouillonnais

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • Template.xlsTélécharger ce fichier [Réservé aux membres club]13 824 octets

Télécharger le zip


 Historique

09 juillet 2006 21:48:28 :
P'tite erreur de saisie !

 Sources du même auteur

[MS SQL SERVEUR] ON DELETE CASCADE
Source avec Zip [MS SQL SERVEUR] IMPORT/EXPORT DE DONNEES AVEC BCP

 Sources de la même categorie

Source avec Zip (SQL SERVER) REQUÊTE POUR RECHERCHER UN {GUID} DANS TOUS LES... par lassaad83
[ORACLE]DÉTERMINER LA DATE DU PREMIER JOUR D'UNE SEMAINE PAR... par Bouillou2
T-SQL - PROCÉDURE - STOCKÉE - PLACER DANS UNE TABLE LE RÉSUL... par zavier666
SQL LECTURE IMPORT DE FICHIER TEXTE par PHILIPPO
Source avec Zip GÉNÉRER DES REQUETES INSERT À PARTIR DES DONNÉES EXISTANTES ... par lassaad83

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture SQL SERVER - PROCEDURE D'EDITION D'UN FICHIER PLAT (EXPORT C... par FENETRES
Source avec Zip [MS SQL SERVEUR] IMPORT/EXPORT DE DONNEES AVEC BCP par jimmy69

Commentaires et avis

Commentaire de floyo le 17/01/2007 15:13:50

Bonjour,

déja merci pour cette belle procédure :D
par contre ca me retourne une erreur quand je lance le debuggage dans l'analyseur de requete :

Serveur: Msg 7399, Niveau 16, État 1, Ligne 1
[Microsoft][ODBC SQL Server Driver][SQL Server]Le fournisseur OLE DB 'Microsoft.Jet.OLEDB.4.0' rapporte une erreur.  

[OLE/DB provider returned message: Le moteur de base de données Microsoft Jet n'a pas pu trouver l'objet 'Feuil1$'. Assurez-vous que l'objet existe et que vous avez correctement saisi son nom et son chemin d'accès.]

Trace de l'erreur OLE DB [OLE/DB Provider 'Microsoft.Jet.OLEDB.4.0' IColumnsInfo::GetColumnsInfo returned 0x80004005:   ].

J'ai fais pas mal de tests, mais aucun n'a été concluant.
Je voudrai faire un export dans un fichier excel de plusieurs tables SQL Server, soit une par onglet excel.

N'hésitez pas à me demander mon code que je ne mets pas ici pur ne pas surcharger le post.

Merci d'avance pour votre aide ;)

Commentaire de jimmy69 le 17/01/2007 16:30:24

salut salut,

Pour ne pas surcharger cette source, tu devrais poser ta question dans le forum en mettant le lien de la source.

As tu deja essaye avec une seule table avant de passer par plusieurs tables !?

Tu es sur de ton chemin d'acces parce que apparement il rale la dessus !?

dernierement avec quelle version d'excel travailles tu ?!
Moi j'ai fait mes tests avec office 2000 si mes souvenirs sont bons !

Bonne semaine
Christophe

Commentaire de floyo le 18/01/2007 11:35:03

Salut,

Je vais aller faire un post sur le forum après avoir répondu à tes questions.

Oui, tous mes tests se font pour l'instant sur une seule table et une seule feuille du fichier excel. Je verrai le changement d'onglet plus tard :D
Pour le chemin d'accès, pas de probleme non plus.
Je travail aussi avec l'office 2000.

Après de multiples tests, j'ai reussi à écrire dans le fichier et dans des onglets différents, mais un par un. C'est à dire que je créé un fichier et j'écris dans L'onglet que je veux et non dans Chaque onglet sinon le debuggeur m'affiche :
"MSDTC indisponible sur le serveur"
(MicroSoft Dans Ton C**) si j'ai bien compris, je l'ai profond ^^
Il me manque juste quelques DLL pour SQL server et je pense que je finirai par y arriver

Merci ;) (et désolé de charger le commentaire mais c'est la seule méthode qui mène quelquepart alors je félicite et j'en fais profiter)

Commentaire de jimmy69 le 18/01/2007 15:28:15

salut salut,

pas de souci mec !

Maintenant ecrire dans des onglets differents ca me parait difficile et je n'ai jamais vu faire ! enfin si je trouve quelques choses je te fais signe !

une petite note pour faire monter mes points, on ne sait jamais que Nix donne des ko a partir d'un certains nombres de points :-) !
Christophe
Un bouillonnnais

Commentaire de marmous le 31/10/2008 14:18:15

Bonjour,

Juste une petite précision. Cette méthode ne permet de transférer que 255 caractères par champs.
Ceci est une limitation du driver Microsoft.Jet.OLEDB.4.0, j'en ai fait les frais...

A plus

Commentaire de samsemlali le 13/04/2009 13:11:41

salut tou le monde
j ai fai le test de cette procedure mai il me donne une erreur la voila :

"Msg 15281, Niveau 16, État 1, Procédure xp_cmdshell, Ligne 1
SQL Server a bloqué l'accès à procédure 'sys.xp_cmdshell' du composant 'xp_cmdshell' car ce composant est désactivé dans le cadre de la configuration de la sécurité du serveur. Un administrateur système peut activer l'utilisation de 'xp_cmdshell' via sp_configure. Pour plus d'informations sur l'activation de 'xp_cmdshell', voir « Configuration de la surface d'exposition » dans la documentation en ligne de SQL Server.
Msg 156, Niveau 15, État 1, Ligne 2
Syntaxe incorrecte vers le mot clé 'from'."

s il vou plai est ce que quelqu'un peut m'aider et merci

Commentaire de marmous le 14/04/2009 08:50:07

Le message d'erreur est très explicite. Tu as ce message car tu utilise SQL server 2005 ou +. En effet dans cette version il faut activer xp_cmdshell comme ecrit dans le message d'erreur. Et comme écrit dans ce message il faut que tu ailles dans configuration de la surface d'exposition et que tu active le paramètre xp_cmdshell.
Ensuite tu as une deuxième erreur, c'est une erreur de syntaxe dans un select.

Ciao

Commentaire de benbassidi25 le 30/12/2009 19:12:45

j'ai une procedure, et j'aimerai envoyer le resultat de cette table variable que je cree en fichier excel, comment faire?

Commentaire de marmous le 31/12/2009 08:47:42

Tu créé un fichier Excel dans lequel sera importé tes données et ensuite tu adaptes ça à tes données.

DECLARE @fn varchar(50) --Nom du fichier
DECLARE @provider varchar(100) --Provider
DECLARE @ExcelString varchar(100) --Connection

Select @fn = 'D:\LeFichierQueTuAsCree.xls'

--On affecte le provider et la chaine de connection a excel
set @provider = 'Microsoft.Jet.OLEDB.4.0'
set @ExcelString = 'Excel 8.0;Database=' + @fn

--On excute l'insertion des datas dans le fichier excel
exec('insert into OPENrowset(''' + @provider + ''',''' + @ExcelString + ''',''SELECT NomExcel, PrenomExcel, AgeExcel FROM [Feuil1$]'')
select nom as NomExcel, prenom as PrenomExcel, age as AgeExcel from Personnes')

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

export excel [ par beny100 ] bonjour, j'ai ecris mon programme en c# et mes données sont contenues dans une table de mon sql serveur 2000 et je cherche une methode pour l'export d contenu de la table sql [ par beny100 ] bonjour,j'ai un problème pendant mon export en excel même quanr le contenu de la table d'ou la requette s'effectue est vide elle me renvoie une page e Export de données par DTS vers Excel [ par Arthur24 ] Bonjour à tous,Je travaille actuellement sur Windows 2003 / SQL 2000. Je tente d'exporter des données SQL vers Excel au moyen d'un lot DTS. Petite par fusion access word et excel [ par chaudier37 ] Bonjourdans une table access j'ai des champs nomsrefprofessionj'ai mille enregistrements dans cette tableje fais une fusion dans word avec courrier no access et excel [ par chaudier37 ] bonjourj'ai une base de données access qui comprends 1000 personnes. certaines de ces personnes ont une facture quie st dans un fichier excel facture. Export XML via BCP SQL server 2005 [ par bambou92 ] Bonjour,Je souhaiterai avoir une solution concernant mon problème d'export en format XML.J'ai créé une procédure stockée qui crée le fichier XML via f Transfert par vbaaccess vers excel [ par alaf31 ] J'ai une base de donnée access qui doit transférer des données dans un fichiers excel dont les champs sont protéger par un mot de passe.  Je cherche à Lier un classeur Excel à une requête Bo Xi [ par marie_2580 ] Bonjour, Je commence juste à travailler sous BO Xi et je dois réaliser une requête à partir d'un univers Bo gérant une liste de client. Je souhaite r Windev et Excel [ par naddouchka ] Salut tout le monde,je viens de programmer une application en utilisant Windevj'ai une suite de données comme valeurs d'entrée et je dois afficher des Format Date [ par patrickthierry ] Bonjour, J'ai des donnees dans un classeur excel, je souhaite les importer dans une table. Je ne sais pas trop comment definir le format de date. - Da


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,702 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales