2012-01-27 14 views
0

誰もが複数のスプレッドシートでExcelにデータを正常に転送しましたか? 私はそれに立ち往生しています。 Visual Basic 2010を使用しています。複数のスプレッドシートでExcelにデータをエクスポートする

+2

を.codeplex.com/releases/view/42439)。 'Dim ws = package.Workbook.Worksheets.Add(" Name ")' –

+0

のように簡単です。ヘルプが必要な場合は、さらに詳しい情報を提供する必要があります。あなたの "コード"には何の問題もありません;-) –

+0

ありがとうTim!今私は行く準備ができている。 :)まあ問題は、私はコードを持っていないということです。代わりにxmlを生成するソースコードをダウンロードしましたが、それはちょっと面倒です。 EPPlusはより有望に見えます。助けてくれてありがとう - 私の最終的なツールとしてこれを使用します。 –

答えて

0

はい、EPPlusを使用しています。それは同じくらい簡単です:

Dim ws = package.Workbook.Worksheets.Add("Name") 

は感謝ティム:)

0

あなたはファイルデータをExcelにエクスポートするには、このメソッドを使用することができます:// epplus:[EPPlus](HTTPを使用して、はい

Public Shared Function ExportDataTableToDataFile(ByVal srcDataTable As DataTable, ByVal dbTbName As String, _ 
               ByVal dbFilePath As String, ByVal dbFileType As String, _ 
               Optional ByVal schemaTable As DataTable = Nothing) As Boolean 

     Dim expConnStr As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbFilePath 

     Select Case dbFileType 
      Case ".dbf" 
       If dbTbName.Length > 8 Then 
        dbTbName = dbTbName.Remove(8) 
       End If 

       expConnStr &= ";Extended Properties=dBase IV" 
      Case ".xls" 
       expConnStr &= dbTbName & ".xls;Extended Properties=""Excel 8.0;HDR=YES;IMEX=0""" 
      Case ".mdb" 
       expConnStr &= dbTbName & ".mdb;User Id=admin;Password=" 
      Case ".csv" 
       expConnStr &= ";Extended Properties=""text;HDR=Yes;FMT=Delimited(,)""" 
       dbTbName &= ".csv" 
      Case ".mpp" 
       expConnStr = "Provider=Microsoft.Project.OLEDB.10.0;Project Name=" & dbFilePath & dbTbName & ".mpp" 
      Case Else 
       Return False 
     End Select 

     Dim res As Boolean = True 
     Dim createCmdStr As String = "CREATE TABLE [" & dbTbName & "] (" 
     Dim insertCmdStr As String = "INSERT INTO [" & dbTbName & "] (" 
     Dim insertParams As String = " VALUES (" 
     Dim paramPrefix As String = "@p_" 
     Dim oleDbCon As New OleDbConnection(expConnStr) 
     Dim oleDbDa As New OleDbDataAdapter 
     Dim createCmd As New OleDbCommand 
     Dim insertCmd As New OleDbCommand 
     Dim param As OleDbParameter 
     Dim oleDbColTp As OleDbType 

     Try 
      If String.IsNullOrEmpty(dbTbName) Or String.IsNullOrEmpty(dbFilePath) Or srcDataTable Is Nothing Then 
       res = False 
       Return res 
      End If 

      If Not System.IO.Directory.Exists(dbFilePath) Then 
       System.IO.Directory.CreateDirectory(dbFilePath) 
      End If 

      If System.IO.File.Exists(dbFilePath & dbTbName & dbFileType) Then 
       System.IO.File.Delete(dbFilePath & dbTbName & dbFileType) 
      End If 

      If dbFileType = ".mdb" Then 
       Dim ADOXCatalog As New ADOX.Catalog 

       Try 
        ADOXCatalog.Create(expConnStr) 
       Catch ex As System.Runtime.InteropServices.COMException 
       Catch ex As Exception 
        MessageBox.Show(ex.Source & ": " & ex.Message.ToString, "Chyba!") 
        Return False 
       Finally 
        ADOXCatalog = Nothing 
       End Try 
      End If 

      For Each col As DataColumn In srcDataTable.Columns 
       If col.DataType Is GetType(DateTime) Then 
        oleDbColTp = OleDbType.VarWChar 
       Else 
        If schemaTable IsNot Nothing Then 
         oleDbColTp = schemaTable.Rows(srcDataTable.Columns.IndexOf(col))(11) 
        Else 
         oleDbColTp = GetOleDbType(col.DataType) 
        End If 
       End If 

       createCmdStr &= "[" & col.ColumnName & "] " & GetSqlDbType(col.DataType).ToString 

       If col.DataType Is GetType(String) Then 'OleDb dovoluje max dlzku 255 pre VarChar 
        If col.MaxLength > 255 Then 
         col.MaxLength = 255 
        End If 

        createCmdStr &= " (" & col.MaxLength & ")" 
       End If 

       'createCmdStr &= IIf(col.AllowDBNull, "", " NOT NULL") 
       insertCmdStr &= "[" & col.ColumnName & "]" 
       insertParams &= "?" 

       param = insertCmd.Parameters.Add(paramPrefix & col.ColumnName, oleDbColTp, col.MaxLength, col.ColumnName) 
       param.SourceVersion = DataRowVersion.Current 

       If Array.IndexOf(srcDataTable.PrimaryKey, col) >= 0 Then 
        createCmdStr &= " PRIMARY KEY" 
       ElseIf col.Unique Then 
        createCmdStr &= " UNIQUE" 
       End If 

       If srcDataTable.Columns.IndexOf(col) < srcDataTable.Columns.Count - 1 Then 
        createCmdStr &= ", " 
        insertCmdStr &= ", " 
        insertParams &= ", " 
       Else 
        createCmdStr &= ")" 
        insertCmdStr &= ")" 
        insertParams &= ")" 
       End If 
      Next 

      insertCmdStr &= insertParams 
      createCmd.Connection = oleDbCon 
      createCmd.CommandText = createCmdStr 
      insertCmd.Connection = oleDbCon 
      insertCmd.CommandText = insertCmdStr 
      oleDbDa.InsertCommand = insertCmd 

      For Each drow As DataRow In srcDataTable.Rows 
       drow.AcceptChanges() 
       drow.SetAdded() 
      Next 

      If oleDbCon.State <> ConnectionState.Closed Then 
       oleDbCon.Close() 
      End If 

      oleDbCon.Open() 
      'createCmd.ExecuteNonQuery() 
      oleDbDa.Update(srcDataTable) 
     Catch ex As Exception 
      res = False 
      MessageBox.Show(ex.Message.ToString, "Chyba!") 
     Finally 
      oleDbCon.Close() 
     End Try 

     Return res 

    End Function 
関連する問題