2011-01-21 4 views

答えて

1

これはすでにスタックオーバーフローで十分にカバーされています。

あなたは自動的にユーザーにそれをストリーミングする場合は、これらの答えを試してみてください。

0

プライベートサブコピーシート() 薄暗いCMDのDataSet =新しいデータセットとして文字列 薄暗いDS()文字列=「プロバイダ= Microsoft.Jet.OLEDB.4.0として 薄暗いCONNSTRINGとしてのOleDbCommand 薄暗いDTとして、データソース= E: \ EXCEL \ From.xlsに、OleDbConnectionオブジェクト=新しいOleDbConnectionオブジェクト(CONNSTRING) として、拡張プロパティ=エクセル8.0" 点心oledbConnは( oledbConn.Openを試してみてください) I = 0の場合1 へのI = 0なら、 CMD =新規のOleDbCommand (「SELECT * FROM [Sheet1 $]」、oledbConn) dt = "Sheet3" Else cmd =新しいOleDbCommand( "SELECT * FROM [シート2 $]」、oledbConn) DT = "シート4" OleDbDataAdapterおよ=新OleDbDataAdapterおよ() oleda.SelectCommand = CMD oleda.Fill(DS、DT) 次

 ExportDatasetToExcel(ds, "dd") 
    Catch 
    Finally 
     oledbConn.Close() 
    End Try 
End Sub 

Public Sub ExportDatasetToExcel(ByVal ds As DataSet, ByVal strExcelFile As String) 

    Dim conn As New OleDbConnection(String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\EXCEL\To.xls;Extended Properties=Excel 8.0")) 
    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 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 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() 
End Sub 
として 場合は薄暗いoledaを終了