2012-06-23 3 views

ответ

8

просто, чтобы сделать его лучше видно, для всех

Microsoft.Office.Interop.Excel.Application excel = null; 
Microsoft.Office.Interop.Excel.Workbook wb = null; 

object missing = Type.Missing; 
Microsoft.Office.Interop.Excel.Worksheet ws = null; 
Microsoft.Office.Interop.Excel.Range rng = null;  

try 
{ 
    excel = new Microsoft.Office.Interop.Excel.Application(); 
    wb = excel.Workbooks.Add(); 
    ws = (Microsoft.Office.Interop.Excel.Worksheet)wb.ActiveSheet; 

    for (int Idx = 0; Idx < dt.Columns.Count; Idx++) 
    { 
     ws.Range["A1"].Offset[0, Idx].Value = dt.Columns[Idx].ColumnName; 
    } 

    for (int Idx = 0; Idx < dt.Rows.Count; Idx++) 
    { // <small>hey! I did not invent this line of code, 
     // I found it somewhere on CodeProject.</small> 
     // <small>It works to add the whole row at once, pretty cool huh?</small> 
     ws.Range["A2"].Offset[Idx].Resize[1, dt.Columns.Count].Value = 
     dt.Rows[Idx].ItemArray; 
    } 

    excel.Visible = true; 
    wb.Activate(); 
} 
catch (COMException ex) 
{ 
    MessageBox.Show("Error accessing Excel: " + ex.ToString()); 
} 
catch (Exception ex) 
{ 
    MessageBox.Show("Error: " + ex.ToString()); 
} 
+3

спасибо! отличный пример. :) – asuciu

4

Вы можете сохранить CSV-файл (Comma Seperated Value File) из своего datatable. Затем этот файл можно открыть в Excel.

Кроме того: независимо от того, является ли это WPF или Winforms, конвертация одинакова в том, что код конверсии написан на вашем языке, то есть C# и не является специфичным для WPF или Winforms.

2

Для меня работать отлично спасибо ... кто-то, как vb.net?

Dim excel As Microsoft.Office.Interop.Excel.Application = Nothing 
Dim wb As Microsoft.Office.Interop.Excel.Workbook = Nothing 

Dim missing As Object = Type.Missing 
Dim ws As Microsoft.Office.Interop.Excel.Worksheet = Nothing 
Dim rng As Microsoft.Office.Interop.Excel.Range = Nothing 

Sub ExcelFile (ByVal дт Как DataTable)

Try 
     excel = New Microsoft.Office.Interop.Excel.Application() 
     wb = excel.Workbooks.Add() 
     ws = DirectCast(wb.ActiveSheet, Microsoft.Office.Interop.Excel.Worksheet) 

     For Idx As Integer = 0 To dt.Columns.Count - 1 
      ws.Range("A1").Offset(0, Idx).Value = dt.Columns(Idx).ColumnName 
     Next 

     For Idx As Integer = 0 To dt.Rows.Count - 1 
      ' <small>hey! I did not invent this line of code, 
      ' I found it somewhere on CodeProject.</small> 
      ' <small>It works to add the whole row at once, pretty cool huh?</small> 
      ' YES IT'S COOL Brother ... 
      ws.Range("A2").Offset(Idx).Resize(1, dt.Columns.Count).Value = dt.Rows(Idx).ItemArray 
     Next 

     excel.Visible = True 
     wb.Activate() 
    Catch ex As Exception 
     MessageBox.Show("Error accessing Excel: " & ex.ToString()) 

    End Try 

End Sub 
Смежные вопросы