2009-05-25 2 views
2

У меня есть приложение Windows Form Form с DataGridView.DataGridView Copy Paste (со стилем, цвет фона, ...)

Копия & Вставить (ctrl-c после выбора данных в datagrid и ctrl-v в Excel) работает почти нормально.

Проблема в том, что стиль (например, цвет фона) не вставлен в Excel, а только значения ячейки. Мне нужно изменить свойство где-нибудь на моем datagridview или реализовать собственный код?

Спасибо,

ответ

0

AFAIK единственным свойством сетки данных, которая влияет на поведение буфера обмена является «ClipBoardCopyMode» и что в значительной степени является «использование заголовков или нет». Если я не покину, если вы хотите, чтобы форматирование пошло с ним, вам придется поместить его в буфер обмена самостоятельно. Но, честно говоря, в качестве пользователя я бы не хотел форматирования. Это сводит меня с ума, когда я копирую вещи, а затем их переформатировать, чтобы соответствовать формату, который я использую в настоящее время. Я бы скорее вставлял данные, а затем, если я хочу отформатировать его, как показано, сделайте это. Если вы собираетесь сворачивать свои собственные, я бы предложил использовать формат буфера обмена Excel, чтобы ваш пользователь мог «PasteSpecial», если захочет. Это может дать вам несколько идей: http://www.codeguru.com/vb/gen/vb_misc/samples/article.php/c6393

0

У меня была такая же проблема, и я использовал Control.DrawToBitmap, чтобы добавить растровое изображение в ClipBoard. Используя сначала DataObject, заполненный как «стандартным» содержимым буфера обмена из DataGridView, затем добавив Bitmap, а затем нажав DataObject в буфер обмена, пользователь может использовать функции «вставить специальные» и выбирать между растровым или простым текстом , Что-то вроде:

Dim data as New DataObject() 
Dim html As DataObject = DGV.GetClipboardContent() 
data.SetData(DataFormats.Html, html.GetData(DataFormats.Html)) 
' create some rectangle, probably using DataGridView.Bounds 
Dim bitmap As New System.Drawing.Bitmap(rectangle.Width, rectangle.Height) 
DGV.DrawToBitmap(bitmap, rectangle) 
data.SetData(DataFormats.Bitmap, bitmap) 

Там также возможность создания RTF-вывода, но это намного больше работы, как код RTF является довольно сложным. Однако есть некоторые примеры кода, которые можно найти.

И я просто наткнулся на это example, используя XML-вывод для Excel и других форматов.