2016-04-06 12 views
0

Veriler bir Excel sayfasına datagurid satırları vermeyi deniyorum. Bir WinForms (dataGridView) 'dan WPF 'a (dataGrid) geçiş yaptığım için ve şu ana kadar WPF hakkında hiçbir fikrim yok Yardımınıza ihtiyacım var.excel'e aktarım için datagrid satırları üzerinden yineleme (tekrar)

Belki birileri benim döngüsümü nasıl değiştirebilirim veya ne yapmalıyım yerine satırları almak için Excel sayfasının hücreleri doldurun.

Bu soruna yönelik SO'daki tüm makaleleri okudum, ancak sorunum için uygun bir konu bulamıyor.

for (int i = 1; i < dataGrid.Columns.Count + 1; i++) 
{ 
    Excel.Range BackgroundColor; 
    BackgroundColor = xlWorkSheet.get_Range("a9", "j9"); 
    BackgroundColor.Interior.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.RoyalBlue); 

    AxlEx.Cells[9, i] = dataGrid.Columns[i - 1].Header; 
} 

o satırlarla hücrelerin doldurulması iner Çalışmaya almak için sayısız girişimi denedi:

Bu

Gayet eserler sütun adları doldurulması için yaptığıdır
for (int i = 0; i < dataGrid.Items.Count; i++) 
{ 
    DataRowView aux = (DataRowView)dataGrid.Items[i]; 

    for (int j = 0; j < aux.Row.ItemArray.Length; j++) 
    { 
     //Console.WriteLine(string.Format("{0}-{1}", j, aux.Row.ItemArray[j])); 
     AxlEx.Cells[i + 10, j + 1] = aux.Row.ItemArray[j]; 
    } 
} 

bana açıktır tip uyumsuzluğu için System.InvalidCast istisnasının bir istisna atar ... ama dönüştürmek için nasıl bilmiyorum, SO yapmadım burada da uydurma Konular Kodumu değiştirmek için anlayabileceğim bir örnek var. Bunu vardı önce

i

DataRowView dataRow = (DataRowView)dataGrid.SelectedItem; 

bakın o zaman 1 satır için çalışır

for (int i = 0; i < dataGrid.Items.Count; i++) 
{ 
    for (int j = 0; j < dataGrid.Columns.Count; j++) 
    { 
     AxlEx.Cells[i + 10, j + 1] = dataRow.Row.ItemArray[j].ToString(); 
    } 
} 

alabilirim nasıl bu işe?

+0

'DataGrid'inizin' ItemsSource'unuz nedir? GözlemlenebilirKoleksiyon 'veya' DataTable'? – StepUp

+0

Merhaba DataTable bir StepTable – incubuzz1978

cevap

1

Kodunuzun hata ayıklamasının gerekli olup olmadığını bilmiyorum. Ancak, ben MS Excel için DataGrid dışa veri aktarmak için benim iş kodunu göstermek istiyorum:

Bir ThreadPool UI Konu bu işi aktarmak için daha iyidir:

using Excel = Microsoft.Office.Interop.Excel;//add this library 

Task.Run(() => {      
       // load excel, and create a new workbook 
       Excel.Application excelApp = new Excel.Application(); 
       excelApp.Workbooks.Add(); 

       // single worksheet 
       Excel._Worksheet workSheet = excelApp.ActiveSheet; 

       // column headings 
       for (int i = 0; i < YourDataTable.Columns.Count; i++) 
       { 
        workSheet.Cells[1, (i + 1)] = YourDataTable.Columns[i].ColumnName; 
       } 

       // rows 
       for (int i = 0; i < YourDataTable.Rows.Count; i++) 
       { 
        // to do: format datetime values before printing 
        for (int j = 0; j < YourDataTable.Columns.Count; j++) 
        { 
         workSheet.Cells[(i + 2), (j + 1)] = YourDataTable.Rows[i][j]; 
        } 
       } 
       excelApp.Visible = true; 
      }); 
+0

Sizinki gayet iyi çalışıyor ... Cevabınız için teşekkürler .. – incubuzz1978

1

sorun buldum ...

for (int i = 0; i < dataGrid.Items.Count-1; i++) 
      { 
       DataRowView aux = (DataRowView)dataGrid.Items[i]; 

       for (int j = 0; j < aux.Row.ItemArray.Length; j++) 
       { 
        //Console.WriteLine(string.Format("{0}-{1}", j, aux.Row.ItemArray[j])); 
        AxlEx.Cells[i + 10, j + 1] = aux.Row.ItemArray[j]; 
       } 
      } 

soruna neden gibiydi DataGrid'de ek bir boş satır olduğu için. i (dataGrid.Items.Count-1) substract gerekiyordu. Muhtemelen bir NULL alan dönüş değeri nedeniyle ??? datagrid

İlgili konular