2015-05-28 73 views
1

我正在複製DataGrid到剪貼板,以便它可以粘貼到Excel,同時保持其格式如下:如何修改複製到剪貼板的內容?

MyDataGrid.SelectAllCells(); 
MyDataGrid.ClipboardCopyMode = DataGridClipboardCopyMode.IncludeHeader; 
ApplicationCommands.Copy.Execute(null, MyDataGrid); 

這個作品非常好。但是,我需要添加字符串「MyDataGridTitle」。如果粘貼到Excel,這應該簡單地站在DataGrid上方。

我已經嘗試過各種方式(例如使用DataObject)和酷刑谷歌,但沒有成功。我會很感激提示,提示或答案!

+0

您不能將多個項目放入剪貼板。您可以使用[剪貼板](https://msdn.microsoft.com/en-us/library/System.Windows.Clipboard(v = vs.110).aspx)類將數據複製到剪貼板或讀取它們。也許你可以閱讀DataGrid在那裏放置並修改它 –

+0

我還沒有對剪貼板做過任何事情,但使用'Clipboard.SetData'並提供'IDataObject'或'DataObject'作爲參數的實例會有用嗎?您可以在這裏使用包含標題和MyDataGrid內容的複雜對象。我唯一不知道的是這個對象是如何被序列化的,以及Excel期望的序列化格式。 https://msdn.microsoft.com/en-us/library/637ys738(v=vs.110).aspx – feO2x

+0

feO2x,謝謝,我已經嘗試了DataObject,但是這在Excel中不可粘貼。 – peter

回答

1

這不是一個很優雅的解決方案,但你可以通過操縱所產生的HTML字符串試試你DataGrid(事實上,當你在Excel中粘貼時,DataFormats.Html格式是所使用的一個)。

事情是這樣的:

dg.SelectAllCells(); 
dg.ClipboardCopyMode = DataGridClipboardCopyMode.IncludeHeader; 
ApplicationCommands.Copy.Execute(null, dg); 

string dataGridContent = (string)Clipboard.GetData(DataFormats.Html); 
dataGridContent = dataGridContent.Replace("<TABLE>", 
    String.Format("<TABLE><TR><TD colspan='{0}'>Your additional text<TD></TR>", dg.Columns.Count)); 

Clipboard.SetText(dataGridContent, TextDataFormat.Html); 

當然你也可以使用正則表達式,而不是Replace方法提高例如該代碼。

+0

太棒了! PS:當你在我的水平,那麼這*是一個非常優雅的解決方案:o) – peter

+0

我注意到的一件事是結果字符串在最後被切斷:最後的單元格被複制到excel時爲空,即使數據網格中有值。我想這是因爲在字符串'dataGridContent' – peter

+0

中有關於STARTHTML和ENDHTML的信息好吧,我正在調整EndHTML和EndFragment長度的替換字符串,它現在按需要工作。我現在同意它不是一個非常優雅的解決方案,但它仍是一個解決方案; o)我不知道你可以使用html格式進行復制。再次感謝。 – peter

相關問題