2012-01-27 4 views
0

Кто-нибудь успешно передал данные в Excel с несколькими электронными таблицами? Я застрял в этом. Я использую Visual Basic 2010.Экспорт данных в Excel с несколькими таблицами

+2

Да, используя [EPPlus] (HTTP: // epplus .codeplex.com/релизы/просмотр/42439). Это так же просто, как «Dim ws = package.Workbook.Worksheets.Add (« Имя »)' –

+0

. Если вам нужна помощь, вы должны предоставить более подробную информацию. Я не вижу никаких проблем в вашем «коде» ;-) –

+0

Спасибо Тиму! теперь я готов к работе. :) Ну, проблема в том, что у меня нет кода. Загрузили исходный код a назад, который вместо этого генерирует excel xml, но это просто утомительно. EPPlus выглядит более перспективным. Спасибо за помощь - я буду использовать этот инструмент в качестве своего последнего инструмента. –

ответ

0

Да, используя EPPlus. Это так же просто, как:

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

Спасибо Тиму :)

0

Вы можете использовать этот метод, чтобы экспортировать данные в файл: первенствует

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 
Смежные вопросы