2016-04-06 7 views
0

ExcelシートにdataGrid行をエクスポートしようとしています。 私はWinForms(dataGridView)からWPF (dataGrid)に切り替えるので、基本的に私は今までWPFについての手掛かりがありません 私はあなたの助けが必要です。エクスポート用のデータグリッド行を繰り返してExcelに戻ります。

誰かが私のループを変更する方法を教えてくれるかもしれません。 Excelシートのセルに の行を入力する代わりに、ループを変更する方法を教えてください。

私はこの問題をカバーしているSOに関するすべての記事を読んだことがありますが、 は私の問題に合ったトピックを見つけられないようです。

これは私が が完璧に動作列名、の充填のためにやったことです:それは私はそれが働いて得るために多数のattempsを試してみましたが、行と下のセルの充填に来るとき

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; 
} 

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]; 
    } 
} 

は私に明らかである型の不一致 用System.InvalidCast例外の例外がスローされます...しかし、私はSOのdidnにも、ここで、フィッティング トピックを変換する方法がわかりません私のコードを変更するために理解できる例があります。私はこれを持っていた前

:私は

DataRowView dataRow = (DataRowView)dataGrid.SelectedItem; 

を参照している場合、その後1行のために働く

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(); 
    } 
} 

は私が得ることができるこれはどのように動作しますか?

+0

あなたの 'DataGrid'の' ItemsSource'は何ですか? 'ObservableCollection 'または 'DataTable'? – StepUp

+0

こんにちはStepUp DataTable – incubuzz1978

答えて

1

コードをデバッグする必要があるかどうかわかりません。しかし、私はMS ExcelDataGridからデータをエクスポートするために私の仕事のコードを表示したいと思います:

ThreadPoolにUIスレッドからこの仕事を転送した方がよい:

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

あなたの作品はうまくいきます...答えてくれてありがとう.. – incubuzz1978

1

私は問題を発見しました...

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]; 
       } 
      } 

問題を引き起こすように見えたDataGrid内の追加の空白行があったので。私は(dataGrid.Items.Count-1)減算する持っていました。 NULLフィールドの戻り値によるPobably ??? データグリッド

関連する問題