के बिना एक्सेल निर्यात मैं एक वीबीएनईटी (विंडोज फॉर्म) एप्लिकेशन से एक्सेल में निर्यात को पूरा करने की कोशिश कर रहा हूं।इंटरऑप
दुर्भाग्य से, मैं Office Interops का उपयोग नहीं कर सकता क्योंकि एप्लिकेशन को प्रत्येक मशीन पर काम करना चाहिए - भले ही कोई एक्सेल इंस्टॉल न हो।
Public Sub ExportDatasetToExcel(ByVal ds As DataSet, Optional ByVal strHeader As String = "Save As")
'Proudly copied from:
'http://www.daniweb.com/software-development/vbnet/threads/368400/write-into-excel-using-oledb-connection#post1583200
Dim fileSave As New SaveFileDialog()
fileSave.Filter = "Excel 97-2003 Workbook (*.xls)|*.xls"
fileSave.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
fileSave.Title = strHeader
fileSave.ShowDialog()
Dim xlsFilePath As String = fileSave.FileName
If xlsFilePath = "" Then
Exit Sub
End If
System.IO.File.Copy(storagePath & "\" & "empty.xls", xlsFilePath)
Cursor.Current = Cursors.WaitCursor
Dim conn As New OleDb.OleDbConnection(String.Format("provider=Microsoft.Jet.OLEDB.4.0; Data Source='{0}';" & "Extended Properties='Excel 8.0;HDR=YES;'", xlsFilePath))
conn.Open()
Dim strTableQ(ds.Tables.Count) As String
Dim i As Integer = 0
'making table query
For i = 0 To ds.Tables.Count - 1
strTableQ(i) = "CREATE TABLE [" & ds.Tables(i).TableName & "]("
Dim j As Integer = 0
For j = 0 To ds.Tables(i).Columns.Count - 1
Dim dCol As DataColumn
dCol = ds.Tables(i).Columns(j)
strTableQ(i) &= " [" & dCol.ColumnName & "] varchar(255) , "
Next
strTableQ(i) = strTableQ(i).Substring(0, strTableQ(i).Length - 2)
strTableQ(i) &= ")"
Dim cmd As New OleDb.OleDbCommand(strTableQ(i), conn)
cmd.ExecuteNonQuery()
Next
'making insert query
Dim strInsertQ(ds.Tables.Count - 1) As String
For i = 0 To ds.Tables.Count - 1
strInsertQ(i) = "Insert Into " & ds.Tables(i).TableName & " Values ("
For k As Integer = 0 To ds.Tables(i).Columns.Count - 1
strInsertQ(i) &= "@" & ds.Tables(i).Columns(k).ColumnName & " , "
Next
strInsertQ(i) = strInsertQ(i).Substring(0, strInsertQ(i).Length - 2)
strInsertQ(i) &= ")"
Next
'Now inserting data
For i = 0 To ds.Tables.Count - 1
For j As Integer = 0 To ds.Tables(i).Rows.Count - 1
Dim cmd As New OleDb.OleDbCommand(strInsertQ(i), conn)
For k As Integer = 0 To ds.Tables(i).Columns.Count - 1
cmd.Parameters.AddWithValue("@" & ds.Tables(i).Columns(k).ColumnName.ToString(), ds.Tables(i).Rows(j)(k).ToString())
Next
cmd.ExecuteNonQuery()
cmd.Parameters.Clear()
Next
Next
conn.Close()
conn.Dispose()
Cursor.Current = Cursors.Default
End Sub
इस कोड काम करता है और एक .xls फ़ाइल करने के लिए अपने डाटासेट निर्यात करता है:
मैं नेट पर निम्न नमूना पाया।
समस्या: मेरा प्रोग्राम चल रहा है, जबकि मैं इस फ़ाइल को नहीं खोल सकता। ऐसा लगता है कि मेरा प्रोग्राम अभी भी इस फाइल पर एक संभाल रहा है। जब भी मैं Sysinternals प्रक्रिया एक्सप्लोरर का उपयोग करता हूं, मैं इसे देख सकता हूं। अगर मैं अपना प्रोग्राम बंद करता हूं, तो मैं बिना किसी समस्या के इस फाइल को खोल सकता हूं।
मुझे लगता है कि मुझे कुछ ऑब्जेक्ट को नष्ट करना है या बस फ़ाइल को बंद करना है। कृपया कोई इसे पूरा करने के लिए नोब की मदद कर सकता है?
इस तरह, आपको अभी भी मशीन पर प्रदाता स्थापित करने की आवश्यकता है। ऐसा लगता है कि जेट डिफ़ॉल्ट रूप से हर जगह मौजूद नहीं है। ओपनएक्सएमएल पर क्यों नहीं स्विच करें? .xlsx फ़ाइलों को अब एक्सेल के पिछले संस्करण के साथ संगतता पैक के साथ खोला जा सकता है। बस एक विचार ... – Chris
डिट्टो एक्सएमएल - डेटाटेबल a.WriteXML विधि के रूप में। आपको टेबल पर एक नाम की आपूर्ति करने की आवश्यकता है। उपयोगकर्ता फ़ाइल ओपन से फ़ाइल खोल सकता है या एक्सेल पर ड्रैग/ड्रॉप कर सकता है। या एक सीएसवी फ़ाइल बनाएं जो एक्सेल आसानी से खोलें। केलरमैन सॉफ्टवेयर में एक सस्ता .NET CSV (और एक्सेल I think) लाइब्रेरी है। – rheitzman
@ क्रिस: मुझे ओपनएक्सएमएल के साथ विचार पसंद है; मुझे कुछ [नोब-जागरूक] नमूने कहां मिल सकता है? – Alexander