Fichier Excel en ressource incorporée

Le
Doudou
Bonjour,

J'ai un template Excel que je souhaite stocker comme ressource à
l'intérieur d'une DLL.
J'ai ajouté mon fichier Excel dans mon projet comme "ressource
incorporée" et j'ai utilisé le code suivant pour récupérer le stream
mais je ne sais pas comment faire pour l'ecrire sur disque ensuite.

Imports System.Reflection
Imports System.IO

Public Sub WriteTemplate(byVal strPath as string)
Dim asm As [Assembly] = [Assembly].GetExecutingAssembly
' Name = ASSEMBLY.NAME.EXT"
Dim Name As String = "Reports.template.xls"
Dim s As System.IO.Stream =
asm.GetManifestResourceStream(Name)

' Ecriture sur disque ????

End Sub

J'ai cherché dans la doc du MSDN avec les différents Filestream,
BinaryWriter, BufferStream, . mais je ne sais pas vraiment comment
les utiliser.

Si quelqu'un peut m'aider à résoudre ce problème sûrement trivial ?
D'avance Merci
Stephane

P.S. : Visual Studio 2003 / .NET 1.1
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Stéphane
Le #12244821
Bonjour Stéphane alias Doudou :)


Je te met plusieurs lignes et .Net 1.1 (VB .Net 2003) en vrac et sans
commentaire qui pourront peut-être t'être utile (créer ou ouvrir 1 fichier
excel, modifier puis sauvegarder ou sauvegarder sous,...) :


Private fichier_xls As Object

Private classeur As Object

Private feuille As Object

fichier_xls = CreateObject("Excel.Application")

fichier_xls.workbooks.open(pchemin & pnom)

classeur = fichier_xls.workbooks.add

feuille = classeur.worksheets(1)

fichier_xls.displayAlerts = False

fichier_xls.sheets.add()

feuille = fichier_xls.activeSheet

feuille = fichier_xls.worksheets(nom_feuille)

feuille.range(cellule_deb).offset(ligne, colonne).value = valeur

feuille.range(cellule_deb).font.bold = True

', Optional ByVal style As Integer =
OWC10.XlUnderlineStyle.xlUnderlineStyleSingle

feuille.range(cellule_deb).font.underline = style

feuille.range(cellule_deb).font.size = valeur

feuille.range(cellule_deb).EntireRow.AutoFit()

feuille.range(cellule_deb).EntireColumn.AutoFit()

feuille.range(cellule_deb).EntireColumn.ColumnWidth = valeur

feuille.range(cellule_deb).select()

fichier_xls.selection.entirerow.insert()

feuille.range(cellule_deb).select()

fichier_xls.selection.entirerow.delete()

feuille.range(cellule_deb).select()

fichier_xls.selection.mergecells = True

feuille.range(cellule_deb).select()

fichier_xls.selection.Shrinktofit = True

feuille.range(cellule_deb).select()

fichier_xls.selection.Wraptext = True

feuille.range(cellule_deb).horizontalalignment =
OWC10.XlHAlign.xlHAlignCenter

', Optional ByVal style As Integer = OWC10.XlLineStyle.xlContinuous

feuille.range(cellule_deb).borders(OWC10.XlBordersIndex.xlEdgeLeft).linestyle
= style

feuille.range(cellule_deb).borders(OWC10.XlBordersIndex.xlEdgeRight).linestyle
= style

feuille.range(cellule_deb).borders(OWC10.XlBordersIndex.xlEdgeTop).linestyle
= style

feuille.range(cellule_deb).borders(OWC10.XlBordersIndex.xlEdgeBottom).linestyle
= style

feuille.range(cellule_deb).borders(OWC10.XlBordersIndex.xlInsideHorizontal).linestyle
= style

feuille.range(cellule_deb).borders(OWC10.XlBordersIndex.xlInsideVertical).linestyle
= style

feuille.range(cellule_deb).select()

fichier_xls.selection.interior.colorindex = 15

classeur.saveas(chemin & nom)

fichier_xls.save()

fichier_xls.quit()

fichier_xls = Nothing



Stéphane (moi aussi :) )




"Doudou"
Bonjour,

J'ai un template Excel que je souhaite stocker comme ressource à
l'intérieur d'une DLL.
J'ai ajouté mon fichier Excel dans mon projet comme "ressource
incorporée" et j'ai utilisé le code suivant pour récupérer le stream
mais je ne sais pas comment faire pour l'ecrire sur disque ensuite.

Imports System.Reflection
Imports System.IO

Public Sub WriteTemplate(byVal strPath as string)
Dim asm As [Assembly] = [Assembly].GetExecutingAssembly
' Name = ASSEMBLY.NAME.EXT"
Dim Name As String = "Reports.template.xls"
Dim s As System.IO.Stream asm.GetManifestResourceStream(Name)

' Ecriture sur disque ????
.........
End Sub

J'ai cherché dans la doc du MSDN avec les différents Filestream,
BinaryWriter, BufferStream, .... mais je ne sais pas vraiment comment
les utiliser.

Si quelqu'un peut m'aider à résoudre ce problème sûrement trivial ?
D'avance Merci
Stephane

P.S. : Visual Studio 2003 / .NET 1.1
LiR
Le #12244761
Bonjour,

Il te faut un FileStream pour écrire dans le fichier que tu veux créer.
Et, entre temps, un "buffer" qui récupère les octets lus dans le stream
issus de la ressource.

Ca donne :

Dim asm As [Assembly] = [Assembly].GetExecutingAssembly
Dim s As System.IO.Stream
Dim fstrm As System.IO.FileStream

s = asm.GetManifestResourceStream("AssemblyName.Reports.template.xls")
cc = s.Length ' taille du buffer

If cc > 0 Then

' Dimensionne le buffer pour recueillir les données
ReDim buff(cc - 1)
' Lit les octets de la ressource et les place dans le buffer
s.Read(buff, 0, cc)
' Crée le fichier de destination
fstrm = New System.IO.FileStream("Outpath.xls", IO.FileMode.Create)
' Ecrit les données dans le fichier
fstrm.Write(buff, 0, cc)
End If

Note : Attention de bien définir le nom de la ressource passée à
GetManifestResourceStream car sinon GetManifestResourceStream renverra Nothing

En espérant que ça t'aidera,

LiR

"Doudou" a écrit :

Bonjour,

J'ai un template Excel que je souhaite stocker comme ressource à
l'intérieur d'une DLL.
J'ai ajouté mon fichier Excel dans mon projet comme "ressource
incorporée" et j'ai utilisé le code suivant pour récupérer le stream
mais je ne sais pas comment faire pour l'ecrire sur disque ensuite.

Imports System.Reflection
Imports System.IO

Public Sub WriteTemplate(byVal strPath as string)
Dim asm As [Assembly] = [Assembly].GetExecutingAssembly
' Name = ASSEMBLY.NAME.EXT"
Dim Name As String = "Reports.template.xls"
Dim s As System.IO.Stream > asm.GetManifestResourceStream(Name)

' Ecriture sur disque ????
.........
End Sub

J'ai cherché dans la doc du MSDN avec les différents Filestream,
BinaryWriter, BufferStream, .... mais je ne sais pas vraiment comment
les utiliser.

Si quelqu'un peut m'aider à résoudre ce problème sûrement trivial ?
D'avance Merci
Stephane

P.S. : Visual Studio 2003 / .NET 1.1




LiR
Le #12244751
Désolé, j'avais oublié 2 lignes de déclarations :

Dim buff As Byte()
Dim cc As Integer

"LiR" a écrit :

Bonjour,

Il te faut un FileStream pour écrire dans le fichier que tu veux créer.
Et, entre temps, un "buffer" qui récupère les octets lus dans le stream
issus de la ressource.

Ca donne :

Dim asm As [Assembly] = [Assembly].GetExecutingAssembly
Dim s As System.IO.Stream
Dim fstrm As System.IO.FileStream

s = asm.GetManifestResourceStream("AssemblyName.Reports.template.xls")
cc = s.Length ' taille du buffer

If cc > 0 Then

' Dimensionne le buffer pour recueillir les données
ReDim buff(cc - 1)
' Lit les octets de la ressource et les place dans le buffer
s.Read(buff, 0, cc)
' Crée le fichier de destination
fstrm = New System.IO.FileStream("Outpath.xls", IO.FileMode.Create)
' Ecrit les données dans le fichier
fstrm.Write(buff, 0, cc)
End If

Note : Attention de bien définir le nom de la ressource passée à
GetManifestResourceStream car sinon GetManifestResourceStream renverra Nothing

En espérant que ça t'aidera,

LiR

"Doudou" a écrit :

> Bonjour,
>
> J'ai un template Excel que je souhaite stocker comme ressource à
> l'intérieur d'une DLL.
> J'ai ajouté mon fichier Excel dans mon projet comme "ressource
> incorporée" et j'ai utilisé le code suivant pour récupérer le stream
> mais je ne sais pas comment faire pour l'ecrire sur disque ensuite.
>
> Imports System.Reflection
> Imports System.IO
>
> Public Sub WriteTemplate(byVal strPath as string)
> Dim asm As [Assembly] = [Assembly].GetExecutingAssembly
> ' Name = ASSEMBLY.NAME.EXT"
> Dim Name As String = "Reports.template.xls"
> Dim s As System.IO.Stream > > asm.GetManifestResourceStream(Name)
>
> ' Ecriture sur disque ????
> .........
> End Sub
>
> J'ai cherché dans la doc du MSDN avec les différents Filestream,
> BinaryWriter, BufferStream, .... mais je ne sais pas vraiment comment
> les utiliser.
>
> Si quelqu'un peut m'aider à résoudre ce problème sûrement trivial ?
> D'avance Merci
> Stephane
>
> P.S. : Visual Studio 2003 / .NET 1.1
>
>


Publicité
Poster une réponse
Anonyme