OVH Cloud OVH Cloud

Excel pour C#

2 réponses
Avatar
Frédéric Bourde
Bonjour,
voilà, j'explique le topo...
J'ai une app C# qui communique avec une base Access pour l'enregistrement
des élèves d'une école.
Dans ma base, il y a un champ OLE qui stocke un classeur Excel (les livrets
scolaires).
Dans mon app, sur l'onglet Livret Scolaire, je voudrais charger une copie du
classeur, pouvoir la modifier et l'enregistrer dans ma base.
J'ai donc écrit des requêtes SQL (SELECT, UPDATE) pour cela.
Seulement, je ne sais pas quel type de données je dois mettre.

Par exemple : "SELECT LivretScolaire FROM T_Eleve WHERE NumE=10;"
oleDBDataReader lecteur = SQL.ExecuteReader();
lecteur.Read();
this.classeur = lecteur.Get, mais Get quoi ??

Autre exemple : "UPDATE T_Eleve SET LivretScolaire=classeurExcel ??? "
Le problème est qu'il n'y a pas une seule ligne d'aide dans MSDN à ce
propos.

Merci pour vos réponses

2 réponses

Avatar
toto
j'imagine que ton classeur est stocké sous forme de BLOB qu'il te faudra
caster convenablement.
Il faut donc que ton appli référence l'objet COM correspondant à Excel
(Microsoft Excel numéro_version Object Library). Ensuite tu castes en
utilisant un objet du type Excel.Workbook.
Remarque : pour l'interopérabilité avec les applis Office, Microsoft
recommande d'utiliser les PIA d'Office, voir sur
http://support.microsoft.com/default.aspx?scid=kb;EN-US;328912, "SUMMARY
Microsoft supplies several primary interop assemblies (PIAs) that contain
the official description of the most commonly used Microsoft Office XP type
libraries. These Microsoft Office XP PIAs make interoperability easier
between managed code and Office XP COM type libraries."
Je crois que pour lire un BLOB, il faut utiliser lecteur.GetSqlBinary et le
lire sous forme de tableau binaire (byte[]), ce qui donnerait approx :

byte[] bData;
oleDBDataReader lecteur = SQL.ExecuteReader();
lecteur.Read();
bData = (byte[])lecteur.GetSqlBinary(0);
lecteur.Close();
// bData contient maintenant le classeur Excel

"Frédéric Bourde" wrote in message
news:41440f91$0$307$
Bonjour,
voilà, j'explique le topo...
J'ai une app C# qui communique avec une base Access pour l'enregistrement
des élèves d'une école.
Dans ma base, il y a un champ OLE qui stocke un classeur Excel (les


livrets
scolaires).
Dans mon app, sur l'onglet Livret Scolaire, je voudrais charger une copie


du
classeur, pouvoir la modifier et l'enregistrer dans ma base.
J'ai donc écrit des requêtes SQL (SELECT, UPDATE) pour cela.
Seulement, je ne sais pas quel type de données je dois mettre.

Par exemple : "SELECT LivretScolaire FROM T_Eleve WHERE NumE;"
oleDBDataReader lecteur = SQL.ExecuteReader();
lecteur.Read();
this.classeur = lecteur.Get, mais Get quoi ??

Autre exemple : "UPDATE T_Eleve SET LivretScolaire=classeurExcel ??? "
Le problème est qu'il n'y a pas une seule ligne d'aide dans MSDN à ce
propos.

Merci pour vos réponses




Avatar
toto
au temps pour moi, la méthode GetSqlBinary s'applique à un objet
SqlDataReader. Dons ton cas, je pense qu'il faut utiliser GetBytes

"toto" wrote in message
news:
j'imagine que ton classeur est stocké sous forme de BLOB qu'il te faudra
caster convenablement.
Il faut donc que ton appli référence l'objet COM correspondant à Excel
(Microsoft Excel numéro_version Object Library). Ensuite tu castes en
utilisant un objet du type Excel.Workbook.
Remarque : pour l'interopérabilité avec les applis Office, Microsoft
recommande d'utiliser les PIA d'Office, voir sur
http://support.microsoft.com/default.aspx?scid=kb;EN-US;328912, "SUMMARY
Microsoft supplies several primary interop assemblies (PIAs) that contain
the official description of the most commonly used Microsoft Office XP


type
libraries. These Microsoft Office XP PIAs make interoperability easier
between managed code and Office XP COM type libraries."
Je crois que pour lire un BLOB, il faut utiliser lecteur.GetSqlBinary et


le
lire sous forme de tableau binaire (byte[]), ce qui donnerait approx :

byte[] bData;
oleDBDataReader lecteur = SQL.ExecuteReader();
lecteur.Read();
bData = (byte[])lecteur.GetSqlBinary(0);
lecteur.Close();
// bData contient maintenant le classeur Excel

"Frédéric Bourde" wrote in message
news:41440f91$0$307$
> Bonjour,
> voilà, j'explique le topo...
> J'ai une app C# qui communique avec une base Access pour


l'enregistrement
> des élèves d'une école.
> Dans ma base, il y a un champ OLE qui stocke un classeur Excel (les
livrets
> scolaires).
> Dans mon app, sur l'onglet Livret Scolaire, je voudrais charger une


copie
du
> classeur, pouvoir la modifier et l'enregistrer dans ma base.
> J'ai donc écrit des requêtes SQL (SELECT, UPDATE) pour cela.
> Seulement, je ne sais pas quel type de données je dois mettre.
>
> Par exemple : "SELECT LivretScolaire FROM T_Eleve WHERE NumE;"
> oleDBDataReader lecteur = SQL.ExecuteReader();
> lecteur.Read();
> this.classeur = lecteur.Get, mais Get quoi ??
>
> Autre exemple : "UPDATE T_Eleve SET LivretScolaire=classeurExcel ??? "
> Le problème est qu'il n'y a pas une seule ligne d'aide dans MSDN à ce
> propos.
>
> Merci pour vos réponses
>
>