[ms sql server]exportation de donnees vers microsoft excel

Soyez le premier à donner votre avis sur cette source.

Vue 24 267 fois - Téléchargée 1 092 fois

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 / Exemple :


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

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_marmous
Messages postés
5
Date d'inscription
mardi 22 mars 2005
Statut
Membre
Dernière intervention
31 décembre 2009
-
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')
benbassidi25
Messages postés
1
Date d'inscription
mercredi 30 décembre 2009
Statut
Membre
Dernière intervention
30 décembre 2009
-
j'ai une procedure, et j'aimerai envoyer le resultat de cette table variable que je cree en fichier excel, comment faire?
cs_marmous
Messages postés
5
Date d'inscription
mardi 22 mars 2005
Statut
Membre
Dernière intervention
31 décembre 2009
-
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
samsemlali
Messages postés
1
Date d'inscription
lundi 2 février 2009
Statut
Membre
Dernière intervention
13 avril 2009
-
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
cs_marmous
Messages postés
5
Date d'inscription
mardi 22 mars 2005
Statut
Membre
Dernière intervention
31 décembre 2009
-
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.