PDA

View Full Version : باز کردن یک فایل excel در VB.net



barbodsoft.com
چهارشنبه 17 شهریور 1389, 17:27 عصر
سلام دوستان
من می خوام یک فایل اکسل رو با vb.net باز کنم دوستان اگه کدی یا مطلبی دارند بزارند.

من جستجو کردم ولی فقط یک کد پیدا کردم که اون فقط خود excel رو باز می کنه و خالی هست.

اشکال این کد چی هست


Dim xlsApp As Microsoft.Office.Interop.Excel.Application
Dim xlsWB As Microsoft.Office.Interop.Excel.Workbook
Dim xlsSheet As Microsoft.Office.Interop.Excel.Worksheet
Dim xlsCell As Microsoft.Office.Interop.Excel.Range
Dim xlsDatei AsString
xlsApp = New Microsoft.Office.Interop.Excel.Application
xlsApp.Visible = True
xlsWB = xlsApp.Workbooks.Open("C:\myexcel.xls")
xlsSheet = xlsWB.Worksheets(1)
xlsCell = xlsSheet.Range("A1")


اگه بتونم فایل اکسل رو تو فرم برنامه ام باز کنم که چه بهتر وگرنه صرفا باز شدن فایل هم خوبه.

sari-1369
چهارشنبه 17 شهریور 1389, 18:00 عصر
این 2 تا تابع برای کار با فایل اکسل هستن .

پارامتر ورودیشون هم دستوری هستش که میخوای اعمال بشه . که کاملا شبیه دستور sql هستش .

Public Function Ejra(ByVal str_program As String) As Boolean

Dim str_path As String = "C:\DB.xls"
Dim cn As OleDb.OleDbConnection
Dim cmd As OleDb.OleDbCommand
Try
cn = New OleDb.OleDbConnection("provider=microsoft.jet.oledb.4.0;" & _
"data source=" + str_path + ";extended properties=excel 8.0;")
cmd = New OleDb.OleDbCommand(str_program, cn)
cn.Open()
cmd.ExecuteNonQuery()
cn.Close()
Return True
Catch ex As Exception
cn.Close()
Return False
End Try
End Function




مثال تابع اول :



Ejra("update [sheet1$] set akherin_khamoshi='" & txt_tarikh.Text & "' where radif=" & dgv.Rows(i).Cells("radif").Value)





Public Function bind(ByVal str_program As String) As DataTable

Dim str_path As String = "C:\DB.xls"
Dim cn As OleDb.OleDbConnection
Dim cmd As OleDb.OleDbDataAdapter
Dim dt As New Data.DataTable
Try
cn = New OleDb.OleDbConnection("provider=microsoft.jet.oledb.4.0;" & _
"data source=" + str_path + ";extended properties=excel 8.0;")
cmd = New OleDb.OleDbDataAdapter(str_program, cn)
cn.Open()
cmd.Fill(dt)
Return dt
cn.Close()
Catch ex As Exception
cn.Close()
Return dt
End Try
End Function




مثال این تابع :

[dgv.DataSource = bind("select * from [sheet1$")

barbodsoft.com
چهارشنبه 17 شهریور 1389, 18:04 عصر
دوست عزیز سلام
فکر می کنم اشتباه متوجه شدید.من نمی خوام صرفا دیتا رو ببینم (مثل کار کردن با sql نمی خوام) می خوام خود فایل excel باز بشه.



اون کدی که در اولین پست گذاشتم خطلای زیر رو می ده. حدث می زنم به خاطر ورژن کامپننت باشه. باید از چی استفاده کنم؟
Old format or invalid type library. (Exception from HRESULT: 0x80028018 (TYPE_E_INVDATAREAD))

sari-1369
چهارشنبه 17 شهریور 1389, 18:12 عصر
از کامپوننت خاصی استفاده نکردم . :متفکر: از خود کلاس های دات نت هستش .

فریمورکتون چنده ؟

فایل اکسلتون 2007 هستش یا 2003 ؟

Saman_12
چهارشنبه 17 شهریور 1389, 18:16 عصر
باز شدن فایل کاری نداره شما با دادن آدرس Excel و بعد هم آدرس خود فایل به تابع Shell می تونید اونو باز کنید.(البته توی برنامه خودتون نه توی خود Excel.)

b.mahsa
چهارشنبه 17 شهریور 1389, 18:58 عصر
باز شدن فایل کاری نداره شما با دادن آدرس Excel و بعد هم آدرس خود فایل به تابع Shell می تونید اونو باز کنید.(البته توی برنامه خودتون نه توی خود Excel.)
دوست عزیز ایشون میخوان اطلاعات گرید رو تو excel بریزندو بازش کنند.




Public Sub Export_to_Excel(ByVal ds As DataSet, ByVal fileName As String, ByVal Header_Gride() As String)

Dim i As Integer
Try
Dim excelDoc As System.IO.StreamWriter

excelDoc = New System.IO.StreamWriter(fileName)
Const startExcelXML As String = "<xml version>" & vbCr & vbLf & "<Workbook " & "xmlns=""urn:schemas-microsoft-com:office:spreadsheet""" & vbCr & vbLf & " xmlns:o=""urn:schemas-microsoft-com:office:office""" & vbCr & vbLf & " " & "xmlns:x=""urn:schemas- microsoft-com:office:" & "excel""" & vbCr & vbLf & " xmlns:ss=""urn:schemas-microsoft-com:" & "office:spreadsheet"">" & vbCr & vbLf & " <Styles>" & vbCr & vbLf & " " & "<Style ss:ID=""Default"" ss:Name=""Normal"">" & vbCr & vbLf & " " & "<Alignment ss:Vertical=""Bottom""/>" & vbCr & vbLf & " <Borders/>" & vbCr & vbLf & " <Font/>" & vbCr & vbLf & " <Interior/>" & vbCr & vbLf & " <NumberFormat/>" & vbCr & vbLf & " <Protection/>" & vbCr & vbLf & " </Style>" & vbCr & vbLf & " " & "<Style ss:ID=""BoldColumn"">" & vbCr & vbLf & " <Font " & "x:Family=""Tahoma"" ss:Bold=""0""/>" & vbCr & vbLf & " </Style>" & vbCr & vbLf & " " & "<Style ss:ID=""StringLiteral"">" & vbCr & vbLf & " <NumberFormat" & " ss:Format=""@""/>" & vbCr & vbLf & " </Style>" & vbCr & vbLf & " <Style " & "ss:ID=""Decimal"">" & vbCr & vbLf & " <NumberFormat " & "ss:Format=""0.0000""/>" & vbCr & vbLf & " </Style>" & vbCr & vbLf & " " & "<Style ss:ID=""Integer"">" & vbCr & vbLf & " <NumberFormat " & "ss:Format=""0""/>" & vbCr & vbLf & " </Style>" & vbCr & vbLf & " <Style " & "ss:ID=""DateLiteral"">" & vbCr & vbLf & " <NumberFormat " & "ss:Format=""mm/dd/yyyy;@""/>" & vbCr & vbLf & " </Style>" & vbCr & vbLf & " " & "</Styles>" & vbCr & vbLf & " "
Const endExcelXML As String = "</Workbook>"
Dim rowCount As Integer = 0
Dim sheetCount As Integer = 1
excelDoc.Write(startExcelXML)
excelDoc.Write("<Worksheet ss:Name=""Sheet" & sheetCount & """>")
excelDoc.Write("<Table>")
excelDoc.Write("<Row>")
For x As Integer = 0 To ds.Tables(0).Columns.Count - 1
excelDoc.Write("<Cell ss:StyleID=""BoldColumn""><Data ss:Type=""String"">")
excelDoc.Write(Header_Gride(x).ToString)
excelDoc.Write("</Data></Cell>")
Next
excelDoc.Write("</Row>")
'For i = 0 To Page_Counter - 1
For Each x As DataRow In ds.Tables(i).Rows
rowCount += 1
If rowCount = 64000 Then
rowCount = 0
sheetCount += 1
excelDoc.Write("</Table>")
excelDoc.Write(" </Worksheet>")
excelDoc.Write("<Worksheet ss:Name=""Sheet" & sheetCount & """>")
excelDoc.Write("<Table>")
End If
excelDoc.Write("<Row>")
'ID=" + rowCount + "
For y As Integer = 0 To ds.Tables(i).Columns.Count - 1
Dim rowType As System.Type
rowType = x(y).[GetType]()
Select Case rowType.ToString()
Case "System.String"
Dim XMLstring As String = x(y).ToString()
XMLstring = XMLstring.Trim()
XMLstring = XMLstring.Replace("&", "&")
XMLstring = XMLstring.Replace(">", ">")
XMLstring = XMLstring.Replace("<", "<")
excelDoc.Write("<Cell ss:StyleID=""StringLiteral"">" & "<Data ss:Type=""String"">")
excelDoc.Write(XMLstring)
excelDoc.Write("</Data></Cell>")
Exit Select
Case "System.DateTime"

Dim XMLDate As DateTime = DirectCast(x(y), DateTime)
Dim XMLDatetoString As String = ""
'Excel Converted Date
XMLDatetoString = XMLDate.Year.ToString() + "-" & (If(XMLDate.Month < 10, "0" + XMLDate.Month.ToString(), XMLDate.Month.ToString())) & "-" & (If(XMLDate.Day < 10, "0" + XMLDate.Day.ToString(), XMLDate.Day.ToString())) & "T" & (If(XMLDate.Hour < 10, "0" + XMLDate.Hour.ToString(), XMLDate.Hour.ToString())) & ":" & (If(XMLDate.Minute < 10, "0" + XMLDate.Minute.ToString(), XMLDate.Minute.ToString())) & ":" & (If(XMLDate.Second < 10, "0" + XMLDate.Second.ToString(), XMLDate.Second.ToString())) & ".000"
excelDoc.Write("<Cell ss:StyleID=""DateLiteral"">" & "<Data ss:Type=""DateTime"">")
excelDoc.Write(XMLDatetoString)
excelDoc.Write("</Data></Cell>")
Exit Select
Case "System.Boolean"
excelDoc.Write("<Cell ss:StyleID=""StringLiteral"">" & "<Data ss:Type=""String"">")
excelDoc.Write(x(y).ToString())
excelDoc.Write("</Data></Cell>")
Exit Select
Case "System.Int16", "System.Int32", "System.Int64", "System.Byte"
excelDoc.Write("<Cell ss:StyleID=""Integer"">" & "<Data ss:Type=""Number"">")
excelDoc.Write(x(y).ToString())
excelDoc.Write("</Data></Cell>")
Exit Select
Case "System.Decimal", "System.Double"
excelDoc.Write("<Cell ss:StyleID=""Decimal"">" & "<Data ss:Type=""Number"">")
excelDoc.Write(x(y).ToString())
excelDoc.Write("</Data></Cell>")
Exit Select
Case "System.DBNull"
excelDoc.Write("<Cell ss:StyleID=""StringLiteral"">" & "<Data ss:Type=""String"">")
excelDoc.Write("")
excelDoc.Write("</Data></Cell>")
Exit Select
Case Else
Throw (New Exception(rowType.ToString() & " not handled."))
End Select
Next
excelDoc.Write("</Row>")
Next
'Next

excelDoc.Write("</Table>")
excelDoc.Write(" </Worksheet>")
excelDoc.Write(endExcelXML)
excelDoc.Close()
MsgBox(".ذخيره شد " + fileName + " اطلاعات در فايل ", MsgBoxStyle.Information, "")
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub


از این تابع استفاده کنید .

barbodsoft.com
چهارشنبه 17 شهریور 1389, 19:49 عصر
دوست عزیز ایشون میخوان اطلاعات گرید رو تو excel بریزندو بازش کنند.
این لینک رو نگاه کنید.


تقریبا . ولی من نتونستم از کد شما استفاده کنم. البته برای باز کردن فایل اکسل هم چیزی ننوشتید.

سلام دوستان
من موفق شدم با تابع زیر اطلاعات دیتاتیبل رو در یک فایل اکسل ذخیره کنم و بلافاصله بعش باز کنم و کار بر بتونه ببینه. اما یک مشکل دیگه دارم و اونم اینه که چطور به ستون ها فرمت و مورد نظر رو بدم. مثلا فونت خاصی رو استفاده کنم و یا اندازه ستون ها رو عوض کنم.




Public Sub ExportExcel(ByVal Table As DataTable, ByVal Location As String)
If My.Computer.FileSystem.FileExists(Location) Then My.Computer.FileSystem.DeleteFile(Location)
Dim CreateString As String = ""
Dim Columns As String = ""
Dim Mark As String = ""
Using Connection As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Location & ";Extended Properties=""Excel 8.0;HDR=YES""")
Connection.Open()
CreateString = "CREATE TABLE [" & Table.TableName & "] ("
Columns = "("
Mark = "("
For Each Column As DataColumn In Table.Columns
CreateString &= OS(Column.ColumnName)
Select Case Column.DataType.Name
Case "SByte", "Byte", "Int16", "Int32", "Int64", "Decimal", "Double", "Single"
CreateString &= " Number, "
Case "Boolean"
CreateString &= " Bit, "
Case "Char", "String"
CreateString &= " Memo, "
Case "DateTime"
CreateString &= " DateTime, "
Case Else
CreateString &= " Text, "
End Select
Columns &= OS(Column.ColumnName) & ", "
Mark &= "?,"
Next
CreateString = CreateString.Remove(CreateString.Length - 2, 2)
CreateString &= ")"
Columns = Columns.Remove(Columns.Length - 2, 2)
Columns &= ")"
Mark = Mark.Remove(Mark.Length - 1, 1)
Mark &= ")"
Using Command As New OleDb.OleDbCommand(CreateString.ToString, Connection)
Command.ExecuteNonQuery()
End Using
Using Adapter As New OleDb.OleDbDataAdapter("SELECT * FROM [" & Table.TableName & "$]", Connection)
Using ExcelDataset As New DataSet
Adapter.Fill(ExcelDataset, Table.TableName)
Adapter.InsertCommand = New OleDb.OleDbCommand("INSERT INTO [" & Table.TableName & "] " & Columns.ToString & " VALUES " & Mark.ToString, Connection)
For Each Column As DataColumn In Table.Columns
Select Case Column.DataType.Name
Case "SByte", "Byte", "Int16", "Int32", "Int64", "Decimal", "Double", "Single"
Adapter.InsertCommand.Parameters.Add("@" & OS(Column.ColumnName), OleDb.OleDbType.Numeric, 100, OS(Column.ColumnName))
Case "Boolean"
Adapter.InsertCommand.Parameters.Add("@" & OS(Column.ColumnName), OleDb.OleDbType.Boolean, 100, OS(Column.ColumnName))
Case "Char", "String"
Adapter.InsertCommand.Parameters.Add("@" & OS(Column.ColumnName), OleDb.OleDbType.Char, 65536, OS(Column.ColumnName))
Case "DateTime"
Adapter.InsertCommand.Parameters.Add("@" & OS(Column.ColumnName), OleDb.OleDbType.DBTimeStamp, 100, OS(Column.ColumnName))
Case Else
Adapter.InsertCommand.Parameters.Add("@" & OS(Column.ColumnName), OleDb.OleDbType.Char, 65536, OS(Column.ColumnName))
End Select
Next
For Each Row As DataRow In Table.Rows
If Row.RowState <> DataRowState.Deleted Then
Dim ExcelRow As DataRow = ExcelDataset.Tables(Table.TableName).NewRow
For i As Integer = 0 To Table.Columns.Count - 1
ExcelRow.Item(i) = Row.Item(i)
Next
ExcelDataset.Tables(Table.TableName).Rows.Add(Exce lRow)
End If
Next
Adapter.Update(ExcelDataset, Table.TableName)
End Using
End Using
End Using

If MessageBoxFa.Show("فایل اکسل ایجاد شد. آیا می خواهید فایل را همکنون ببینید؟", name_me, MessageBoxButtons.YesNo) = DialogResult.Yes Then
Dim oApp As New Microsoft.Office.Interop.Excel.Application()
oApp.Visible = True
oApp.UserControl = True
Dim oldCI As System.Globalization.CultureInfo = _
System.Threading.Thread.CurrentThread.CurrentCultu re
System.Threading.Thread.CurrentThread.CurrentCultu re = _
New System.Globalization.CultureInfo("en-US")
oApp.Workbooks.Add(Location)
System.Threading.Thread.CurrentThread.CurrentCultu re = oldCI
End If
End Sub