2016-05-29 81 views
0
xlApp = new Excel.Application(); 
     xlWorkBook = xlApp.Workbooks.Add(misValue); 
     xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); 

     OleDbDataAdapter dscmd = new OleDbDataAdapter("select distinct Ticket_no from Tickets where date_dt='" + dateTimePicker1.Value.ToShortDateString() + "' and Type='Closure' and queueName='" + comboBox1.Text + "'", cont1); 
     DataSet ds = new DataSet(); 
     dscmd.Fill(ds); 
     OleDbDataAdapter dtcmd = new OleDbDataAdapter("select distinct Ticket_no from Tickets where date_dt='" + dateTimePicker1.Value.ToShortDateString() + "' and Type='Reassigned' and queueName='" + comboBox1.Text + "'", cont1); 
     DataSet dt = new DataSet(); 
     dtcmd.Fill(dt); 
     xlWorkSheet.Cells[1, 1] = "Closure"; 
     xlWorkSheet.Cells[1, 2] = "Reassigned"; 

     for (i = 0; i <= ds.Tables[0].Rows.Count - 1; i++) 
     { 
      for (j = 0; j <= ds.Tables[0].Columns.Count - 1; j++) 
      { 

       data = ds.Tables[0].Rows[i].ItemArray[j].ToString(); 
       xlWorkSheet.Cells[i + 2, j + 1] = data; 

      } 
     } 

     xlWorkBook.SaveAs("Ticket_Closer_"+dateTimePicker1.Value.ToShortDateString()+".xls", Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue); 
     xlWorkBook.Close(true, misValue, misValue); 
     xlApp.Quit(); 

     releaseObject(xlWorkSheet); 
     releaseObject(xlWorkBook); 
     releaseObject(xlApp); 

我需要在同一个Excel表单的第1列中写入第1个查询结果,在第2个列中写入第2个查询结果。请帮我正确编码。需要在同一个Excel表格中写入两个结果

回答

0

请原谅我的英文,翻译谷歌翻译使。 我已经写在VB.NET中,你可以快速重写在C#类。

这里的很多在线工具,翻译vb.net到C# http://www.developerfusion.com/tools/convert/vb-to-csharp/

如果你愿意,你可以有没有信息的Excel文件,读取内存中的空文件之一,然后写入的结果DataTable类型的变量直接放在对象上,然后保存它。这是我的首选方法,操纵数据表中的内存要快得多 这是如何实现的例子是

Dim ColDef As xlsRW.fldType 
ColDef = New xlsRW.fldType 
ColDef.fldName = "FieldName" 
ColDef.fldSize = 200 
ColDef.fldType = xlsRW.FieldsType.char 
xlsWriter.ColumnAdd(colDef) 
ColDef = New xlsRW.fldType 
ColDef.fldName = "DateField" 
ColDeffldType = xlsRW.FieldsType.date 
xlsWriter.ColumnAdd(colDef) 
xlsWriter.CreateWorkbook("WB") 

埃斯塔ES LA CLASE

Imports System.Data.OleDb 
Imports System.Collections 
Public Class xlsRW 
    Public Enum FieldsType As Byte 
    [char] 
    [date] 
    [float] 
    [currency] 
    End Enum 
    Public Structure fldType 
    Public fldName As String 
    Public fldSize As UShort 
    Public fldType As FieldsType 
    Public fldValue As Object 
    End Structure 
    Private blnHasHeader As Boolean = True 
    Private strSheetName As String = String.Empty 
    Private strFileName As String = String.Empty 

    Private blnXLSOpen As Boolean = False 
    Private oleConn As OleDbConnection 
    Private oleCmd As OleDbCommand 
    Private oleDA As OleDbDataAdapter 
    Private htFields As New Hashtable 
#Region " Properties " 
    Public Property FileName() As String 
    Get 
     Return strFileName 
    End Get 
    Set(ByVal value As String) 
     strFileName = value 
    End Set 
    End Property 
    Public Property SheetName() As String 
    Get 
     Return strSheetName 
    End Get 
    Set(ByVal value As String) 
     strSheetName = value 
    End Set 
    End Property 
    Public Property HasHeader() As Boolean 
    Get 
     Return blnHasHeader 
    End Get 
    Set(ByVal value As Boolean) 
     blnHasHeader = value 
    End Set 
    End Property 
    Public ReadOnly Property IsXLSOpen As Boolean 
    Get 
     Return blnXLSOpen 
    End Get 
    End Property 
#End Region 
    Public Sub Open() 
    If strFileName.Length = 0 Then 
     Throw New Exception("Filename was not assigned.") 
    End If 
    Me.Open(strFileName) 
    End Sub 
    Public Sub Open(ByVal strFileName As String) 
    Try 

     Dim strConn As String = String.Empty 
     If IO.Path.GetExtension(strFileName).ToLower = ".xls" Then 
     strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFileName & ";" & "Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;READONLY=FALSE;""" 
     ElseIf IO.Path.GetExtension(strFileName).ToLower = ".xlsx" Then 
     strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFileName & ";" & "Extended Properties=""Excel 12.0 Xml;HDR=YES;IMEX=1;READONLY=FALSE;""" 
     End If 
     If Not blnHasHeader Then 
     strConn = strConn.Replace("YES", "NO") 
     End If 
     oleConn = New OleDbConnection 
     oleConn.ConnectionString = strConn 

     oleConn.Open() 
     blnXLSOpen = True 
    Catch ex As Exception 
     Throw ex 
    End Try 
    End Sub 
    Public Sub ColumnAdd(colDef As fldType) 
    If htFields.ContainsKey(colDef.fldName) Then 
     Throw New Exception("Field already exist") 
    End If 
    Dim strField As String = String.Empty 
    strField = colDef.fldName & " " & colDef.fldType.ToString 
    If colDef.fldType = FieldsType.char Then 
     strField += " (" & colDef.fldSize & ")" 
    End If 
    htFields.Add(colDef.fldName, strField) 
    End Sub 
    Public Sub ColumnRemove(colDefName As String) 
    If Not htFields.ContainsKey(colDefName) Then 
     Throw New Exception("Field doesn't exist") 
    End If 
    htFields.Remove(colDefName) 
    End Sub 
    Public Sub ColumnUpdate(colDef As fldType) 
    If Not htFields.ContainsKey(colDef.fldName) Then 
     Throw New Exception("Field doesn't exist") 
    End If 
    Dim strField As String = String.Empty 
    strField = colDef.fldName & " " & colDef.fldType.ToString 
    If colDef.fldType = FieldsType.char Then 
     strField += " (" & colDef.fldSize & ")" 
    End If 
    htFields.Item(colDef.fldName) = strField 
    End Sub 
    Public Sub ColumnClear() 
    htFields.Clear() 
    End Sub 
    Public Sub CreateWorkbook(ByVal strSheetName As String) 
    If Not blnXLSOpen Then 
     Throw New Exception("Connection is unassigned or closed.") 
    End If 
    If htFields.Count = 0 Then 
     Throw New Exception("No fields defined.") 
    End If 
    Try 
     oleCmd = New OleDbCommand 
     oleCmd.Connection = oleConn 
     Dim strCmdText As String = "CREATE TABLE " & strSheetName & " (" 
     For Each strFldDesign As String In htFields.Keys 
     strCmdText += htFields(strFldDesign) & ", " 
     Next 
     oleCmd.CommandText += strCmdText.Substring(0, strCmdText.Length - 2) & ")" 

     oleCmd.ExecuteNonQuery() 

    Catch ex As Exception 

    End Try 
    End Sub 
    Public Sub Close() 
    oleConn.Close() 
    blnXLSOpen = False 
    End Sub 
#Region " Select " 
    Public Function SelectWorksheet() As DataTable 
    If Not blnXLSOpen Then 
     Throw New Exception("Connection is unassigned or closed.") 
    End If 
    If strSheetName.Length = 0 Then 
     Throw New Exception("Sheetname was not assigned.") 
    End If 
    Try 
     oleDA = New OleDbDataAdapter("select * from [" & strSheetName & "$]", oleConn) 
     Dim dsXLS As DataSet = New DataSet(IO.Path.GetFileNameWithoutExtension(strFileName)) 
     oleDA.Fill(dsXLS) 
     dsXLS.Tables(0).TableName = strSheetName 
     Return dsXLS.Tables(0) 
    Catch ex As Exception 
     Throw ex 
     Return Nothing 
    End Try 
    End Function 
    Public Function SelectWorksheet(ByVal strCell As String) As Object 
    If Not blnXLSOpen Then 
     Throw New Exception("Connection is unassigned or closed.") 
    End If 
    If strSheetName.Length = 0 Then 
     Throw New Exception("Sheetname was not assigned.") 
    End If 
    Dim strCellRange As String = strCell & ":" & strCell 
    Try 
     oleCmd = New OleDbCommand("SELECT * FROM [" & strSheetName & "$" & strCellRange & "]", oleConn) 
     Return oleCmd.ExecuteScalar() 
    Catch ex As Exception 
     Throw ex 
     Return Nothing 
    End Try 
    End Function 
#End Region 
#Region " Insert " 
    Public Sub InsertWorksheet(ByVal aryValues As ArrayList) 
    If Not blnXLSOpen Then 
     Throw New Exception("Connection is unassigned or closed.") 
    End If 
    If strSheetName.Length = 0 Then 
     Throw New Exception("Sheetname was not assigned.") 
    End If 
    Try 
     Dim oleDA As New OleDbDataAdapter() 
     oleCmd = New OleDbCommand("Select * From [" & strSheetName & "$]", oleConn) 
     oleDA.SelectCommand = oleCmd 
     Dim dsXLS As DataSet = New DataSet(IO.Path.GetFileNameWithoutExtension(strFileName)) 
     oleDA.Fill(dsXLS, strSheetName) 
     Dim strInsertCmd As String = String.Empty 
     Dim strColumn As String = String.Empty 
     strInsertCmd = "INSERT INTO [" & strSheetName & "$] (" 
     For bteCnt As Byte = 0 To dsXLS.Tables(strSheetName).Columns.Count - 1 
     strInsertCmd += "[" & dsXLS.Tables(strSheetName).Columns.Item(bteCnt).ColumnName & "], " 
     Next 
     strInsertCmd = strInsertCmd.Substring(0, strInsertCmd.Length - 2) 
     strInsertCmd += ") VALUES (" 
     For bteCnt As Byte = 0 To dsXLS.Tables(strSheetName).Columns.Count - 1 
     strInsertCmd += "?, " 
     Next 
     strInsertCmd = strInsertCmd.Substring(0, strInsertCmd.Length - 2) & ")" 
     oleDA.InsertCommand = New OleDbCommand(strInsertCmd, oleConn) 
     For bteCnt As Byte = 0 To dsXLS.Tables(strSheetName).Columns.Count - 1 
     strColumn = dsXLS.Tables(strSheetName).Columns.Item(bteCnt).ColumnName 
     Select Case aryValues.Item(bteCnt).GetType.Name 
      Case "String" 
      oleDA.InsertCommand.Parameters.Add("@" & strColumn, OleDbType.VarChar) 
      Case "DateTime" 
      oleDA.InsertCommand.Parameters.Add("@" & strColumn, OleDbType.Date) 
      Case "Decimal", "Int32" 
      oleDA.InsertCommand.Parameters.Add("@" & strColumn, OleDbType.Numeric) 
      Case "DBNull" 
      oleDA.InsertCommand.Parameters.Add("@" & strColumn, OleDbType.Empty) 
     End Select 
     oleDA.InsertCommand.Parameters.Item("@" & strColumn).Value = aryValues.Item(bteCnt) 
     Next 
     oleDA.InsertCommand.ExecuteNonQuery() 
     oleDA.Update(dsXLS, strSheetName) 
    Catch ex As Exception 
     Throw ex 
    End Try 
    End Sub 
    Public Sub InsertWorksheet(ByVal drRow As DataRow) 
    If Not blnXLSOpen Then 
     Throw New Exception("Connection is unassigned or closed.") 
    End If 
    If strSheetName.Length = 0 Then 
     Throw New Exception("Sheetname was not assigned.") 
    End If 
    Try 
     Dim oleDA As New OleDbDataAdapter() 
     oleCmd = New OleDbCommand("Select * From [" & strSheetName & "$]", oleConn) 
     oleDA.SelectCommand = oleCmd 
     Dim dsXLS As DataSet = New DataSet(IO.Path.GetFileNameWithoutExtension(strFileName)) 
     oleDA.Fill(dsXLS, strSheetName) 
     Dim strInsertCmd As String = String.Empty 
     Dim strColumn As String = String.Empty 
     strInsertCmd = "INSERT INTO [" & strSheetName & "$] (" 
     For bteCnt As Byte = 0 To dsXLS.Tables(strSheetName).Columns.Count - 1 
     strInsertCmd += "[" & dsXLS.Tables(strSheetName).Columns.Item(bteCnt).ColumnName & "], " 
     Next 
     strInsertCmd = strInsertCmd.Substring(0, strInsertCmd.Length - 2) 
     strInsertCmd += ") VALUES (" 
     For bteCnt As Byte = 0 To dsXLS.Tables(strSheetName).Columns.Count - 1 
     strInsertCmd += "?, " 
     Next 
     strInsertCmd = strInsertCmd.Substring(0, strInsertCmd.Length - 2) & ")" 
     oleDA.InsertCommand = New OleDbCommand(strInsertCmd, oleConn) 
     For bteCnt As Byte = 0 To dsXLS.Tables(strSheetName).Columns.Count - 1 
     strColumn = dsXLS.Tables(strSheetName).Columns.Item(bteCnt).ColumnName 
     Select Case drRow.Item(bteCnt).GetType.Name 
      Case "String" 
      oleDA.InsertCommand.Parameters.Add("@" & strColumn, OleDbType.VarChar) 
      Case "DateTime" 
      oleDA.InsertCommand.Parameters.Add("@" & strColumn, OleDbType.Date) 
      Case "Decimal" 
      oleDA.InsertCommand.Parameters.Add("@" & strColumn, OleDbType.Numeric) 
     End Select 
     oleDA.InsertCommand.Parameters.Item("@" & strColumn).Value = drRow.Item(bteCnt) 
     Next 
     oleDA.InsertCommand.ExecuteNonQuery() 
     oleDA.Update(dsXLS, strSheetName) 
    Catch ex As Exception 
     Throw ex 
    End Try 
    End Sub 
    Public Sub InsertWorksheet(ByVal dtData As DataTable) 
    If Not blnXLSOpen Then 
     Throw New Exception("Connection is unassigned or closed.") 
    End If 
    If strSheetName.Length = 0 Then 
     Throw New Exception("Sheetname was not assigned.") 
    End If 
    Try 
     Dim oleDA As New OleDbDataAdapter() 
     oleCmd = New OleDbCommand("Select * From [" & strSheetName & "$]", oleConn) 
     oleDA.SelectCommand = oleCmd 
     Dim dsXLS As DataSet = New DataSet(IO.Path.GetFileNameWithoutExtension(strFileName)) 
     oleDA.Fill(dsXLS, strSheetName) 
     Dim strInsertCmd As String = String.Empty 
     Dim strColumn As String = String.Empty 
     For Each dtRow As DataRow In dtData.Rows 
     strInsertCmd = "INSERT INTO [" & strSheetName & "$] (" 
     For bteCnt As Byte = 0 To dsXLS.Tables(strSheetName).Columns.Count - 1 
      strInsertCmd += "[" & dsXLS.Tables(strSheetName).Columns.Item(bteCnt).ColumnName & "], " 
     Next 
     strInsertCmd = strInsertCmd.Substring(0, strInsertCmd.Length - 2) 
     strInsertCmd += ") VALUES (" 
     For bteCnt As Byte = 0 To dsXLS.Tables(strSheetName).Columns.Count - 1 
      strInsertCmd += "?, " 
     Next 
     strInsertCmd = strInsertCmd.Substring(0, strInsertCmd.Length - 2) & ")" 
     oleDA.InsertCommand = New OleDbCommand(strInsertCmd, oleConn) 
     For bteCnt As Byte = 0 To dsXLS.Tables(strSheetName).Columns.Count - 1 
      strColumn = dsXLS.Tables(strSheetName).Columns.Item(bteCnt).ColumnName 
      Select Case dtData.Columns(bteCnt).DataType.Name 
      Case "String" 
       oleDA.InsertCommand.Parameters.Add("@" & strColumn, OleDbType.VarChar) 
      Case "DateTime" 
       oleDA.InsertCommand.Parameters.Add("@" & strColumn, OleDbType.Date) 
      Case "Decimal" 
       oleDA.InsertCommand.Parameters.Add("@" & strColumn, OleDbType.Numeric) 
      End Select 
      oleDA.InsertCommand.Parameters.Item("@" & strColumn).Value = dtRow.Item(bteCnt) 
      'oleDA.InsertCommand.Parameters.Item("@" & strColumn).SourceColumn = strColumn 
     Next 
     oleDA.InsertCommand.ExecuteNonQuery() 
     Next 
     oleDA.Update(dsXLS, strSheetName) 
    Catch ex As Exception 
     Throw ex 
    End Try 
    End Sub 
#End Region 
#Region " Update " 
    Public Sub UpdateWorksheet(ByVal aryFields() As String, aryValues() As Object, strWhere As String) 
    If Not blnXLSOpen Then 
     Throw New Exception("Connection is unassigned or closed.") 
    End If 
    If strSheetName.Length = 0 Then 
     Throw New Exception("Sheetname was not assigned.") 
    End If 
    Try 


    Catch ex As Exception 
     Throw ex 
    End Try 
    End Sub 
    Public Sub UpdateWorksheet(ByVal strCell As String, objValue As Object) 
    If Not blnXLSOpen Then 
     Throw New Exception("Connection is unassigned or closed.") 
    End If 
    If strSheetName.Length = 0 Then 
     Throw New Exception("Sheetname was not assigned.") 
    End If 
    Try 
     oleCmd = New OleDbCommand(String.Empty, oleConn) 
     oleCmd.CommandText = "UPDATE [" & strSheetName & "$" & strCell & ":" & strCell & "] SET F1 = ?" 
     Dim oleType As OleDbType 
     Select Case objValue.GetType.Name 
     Case "String" 
      oleType = OleDbType.VarChar 
     Case "DateTime" 
      oleType = OleDbType.Date 
     Case "Decimal" 
      oleType = OleDbType.Numeric 
     End Select 
     oleCmd.Parameters.Add("@F1", oleType, 0, "F1") 
     oleCmd.Parameters(0).Value = objValue 
     oleCmd.ExecuteNonQuery() 
    Catch ex As Exception 
     Throw ex 
    End Try 
    End Sub 
#End Region 
End Class 
相关问题