سلام، با عرض تشکر از اینکه کسی جواب سوال اول من رو نداد، سوال دوم رو می پرسم.
کسی با Microsoft.Office.Interop.Excel کار کرده، یعنی از این طریق یک فایل Excel رو بخونه و به WorkSheet اون دسترسی پیدا کنه؟؟؟؟
من مشکل بالا رو فهمیدم، توی سایت Microsoft توی یکی از Forum ها نوشته بود که چون DataType رو از اولین سطر فایل Excel میفهمه، اگر توی اون ستون که اولین سطرش یه String اه، مقدار Integer داشتین، باید با استفاده از کد زیر به اول همه اون سلول ها مثلا یک آپستروف اضافه کنید تا اونا هم String بشن و خونده بشن :
Public Sub AddApostrophe(rngCol As Excel.Range)
Dim rngCell As Excel.Range, varCellValue As Variant
Set rngCol = rngCol.Columns(1)
For Each rngCell In rngCol.Cells
If Not IsEmpty(rngCell) Then
If IsNumeric(rngCell) Then
varCellValue = rngCell.Value
varCellValue = "'" & varCellValue
rngCell = varCellValue
End If
End If
Next rngCell
End Sub
اما من نمی دونستم اطلاعات فایلم رو چجوری باید بریزم توی Range . یعنی چجوری فایل Excel رو به اینها منعقد - Bind کنم. کد زیر رو هم پیدا کردم و اجرا کردم :
PrivateFunction GetSheetNames(ByVal path AsString) As System.Windows.Forms.ListBox
Dim lst AsNew System.Windows.Forms.ListBox
'Note: this will not work for Excel 2007 (.xlsx) workbooks.
If IO.File.Exists(path) AndAlso IO.Path.GetExtension(path) = ".xls"Then
Dim app AsNew Excel.Application
Dim WB As Excel.Workbook
Try
WB = app.Workbooks.Open(path, Type.Missing, Type.Missing, Type.Missing, Type.Missing, , Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing)
If WB IsNotNothingThen
ForEach ws As Excel.Worksheet In WB.Sheets
lst.Items.Add(ws.Name)
Next
WB.Close()
System.Runtime.InteropServices.Marshal.ReleaseComO bject(WB)
WB = Nothing
EndIf
Catch ex As Exception
MsgBox(ex.Message)
Finally
System.Runtime.InteropServices.Marshal.ReleaseComO bject(app)
app = Nothing
EndTry
EndIf
Return lst
EndFunction
اما بعد از اجرای این کد این Error رو میده :