Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Fichier Excel en ressource incorporée

3 réponses
Avatar
Doudou
Bonjour,

J'ai un template Excel que je souhaite stocker comme ressource =E0
l'int=E9rieur d'une DLL.
J'ai ajout=E9 mon fichier Excel dans mon projet comme "ressource
incorpor=E9e" et j'ai utilis=E9 le code suivant pour r=E9cup=E9rer 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] =3D [Assembly].GetExecutingAssembly
' Name =3D ASSEMBLY.NAME.EXT"
Dim Name As String =3D "Reports.template.xls"
Dim s As System.IO.Stream =3D
asm.GetManifestResourceStream(Name)

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

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

Si quelqu'un peut m'aider =E0 r=E9soudre ce probl=E8me s=FBrement trivial ?
D'avance Merci
Stephane

P=2ES. : Visual Studio 2003 / .NET 1.1

3 réponses

Avatar
Stéphane
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" a écrit dans le message de news:

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
Avatar
LiR
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




Avatar
LiR
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
>
>