VB.NET et Excel 2000

RaphaelMD Messages postés 2 Date d'inscription mercredi 9 avril 2008 Statut Membre Dernière intervention 11 avril 2008 - 9 avril 2008 à 20:24
RaphaelMD Messages postés 2 Date d'inscription mercredi 9 avril 2008 Statut Membre Dernière intervention 11 avril 2008 - 11 avril 2008 à 16:59
Bonjour à tous,
ça fait un moment que je me réfère à ce site lorsque j'ai un problème, mais c'est la première fois que je pose une question. Voilà mon problème. Je développe une application en VB.NET sous Visual Studio 2008 et je cherche à récupérer une série de valeurs situé dans un classeur Excel 2000. J'ai essayer de toute sorte de façon de faire ce passage, mais chaque méthode que j'essai me retourne une erreur plus étrange que la précédente. Évidemment, je ne suis pas programmeur de formation et je m'y perds un peu. voilà, si un bon samaritain pouvait me débloquer ce serait grandement apprécié! Voici la dernière façon que j'ai essayée et qui a misérablement échouée:


Imports Microsoft.Office.Interop




... (sub et tout le tralala)



Dim



oExcel

As
Excel.Application


Dim
oDoc

As
Excel.Workbook


Dim
oWorksheet

As
Excel.Worksheet


Dim
var1oExcel =


New
Excel.Applicationvar1 = oExcel.Workbooks.Open(


"c:\mto09703\test.xls"
)


et là ça plante. ça me donne l'erreure: "Attempted to read or write protected memory. This is often an indication that other memory is corrupt."

En d,autre mots, ce que je cherche à faire c'est ouvrire un classeur dont je fourni le path, récupérer les valeurs dans une plage (range) que je spécifie pour les mettre dans un array et refermer excel. Il faut que le tout soit invisible à l'utilisateur.

Toute aide est apprécier et, évidemment, si la réponse se trouve dans un post que je n'ai pas vu n'hésitez pas à me le dire!

Sincèrement,

__________________________
Raphaël

1 réponse

RaphaelMD Messages postés 2 Date d'inscription mercredi 9 avril 2008 Statut Membre Dernière intervention 11 avril 2008
11 avril 2008 à 16:59
Bon, ça fonctionne en partie, mais pas en totalité. Je suis capable de récupérer une plage de valeur en utilisant le code suivant:

Dim

strconn
As
String =
"Provider=Microsoft.Jet.OLEDB.4.0;" &
"Data Source=" & lcs_file_box.Text &
";Extended Properties=""Excel 8.0;HDR=NO"";"
Dim stSQL
As
String =
"SELECT * FROM [LCS$F4:AU138]"
Dim cn
As
New OleDbConnection(strconn)

Dim cmd
As
New OleDbCommand(stSQL, cn)

Dim table(134, 41)
As
Double
Dim inc = 0

'Before executing the command the connection must be open.
cn.Open()

Dim dr
As OleDbDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection)

Try
   While (dr.Read)

      For inc2 = 0
To dr.FieldCount - 1
         table(inc, inc2) = dr(inc2)

      Next
      inc = inc + 1

   End
While
Finally
   dr.Close()

End
Try

'Relase objects from memory.
cmd.Dispose()
cn.Dispose()

Par contre j'ai aussi besoin d'ouvrir un autre fichier pour que l'utilisateur puisse sélectionner une cellule. Le code suivant ne fonctionne pas et je ne comprend pas pourquoi:

Dim

xlsApp
As Excel.Application

Dim xlsWB
As Excel.Workbook

Dim xlsSheet
As Excel.Worksheets

Dim xlsCell
As Excel.Range

'Dim xlsDatei As String
xlsApp =
New Excel.Application

'Dim test As Boolean = xlsApp.Visible
xlsWB = xlsApp.Workbook.Open(
"c:\mto09703\test.xls")
xlsSheet = xlsWB.Worksheet(1)
xlsCell = xlsSheet.Range(
"A1")

...

à la ligne Workbook.Open( ) j'obtiens l'erreure suivante:

COMExecption was unhandled
Old format or invalid type library. (Exception from HRESULT: 0x80028018 (TYPE_E_INVDATAREAD))

quelqu'un peut m'aider avec ça?

__________________________
Raphaël
0
Rejoignez-nous