2016-07-29 7 views
0

Я использую приведенный ниже код для копирования данных из DataGridView, а затем вставки в файл excel.Worksheet.PasteSpecial Функция вставки данных в виде растрового изображения

private void copyAlltoClipboard() 
{ 
    //to remove the first blank column from datagridview 
    dataGridView1.RowHeadersVisible = false; 
    dataGridView1.SelectAll(); 
    DataObject dataObj = dataGridView1.GetClipboardContent(); 
    if (dataObj != null) 
     Clipboard.SetDataObject(dataObj); 
} 
private void button3_Click_1(object sender, EventArgs e) 
{ 
    copyAlltoClipboard(); 
    Microsoft.Office.Interop.Excel.Application xlexcel; 
    Microsoft.Office.Interop.Excel.Workbook xlWorkBook; 
    Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet; 
    object misValue = System.Reflection.Missing.Value; 
    xlexcel = new Excel.Application(); 
    xlexcel.Visible = true; 
    xlWorkBook = xlexcel.Workbooks.Add(misValue); 
    xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); 
    Excel.Range CR = (Excel.Range)xlWorkSheet.Cells[1, 1]; 
    CR.Select(); // CR is a COM Object 
    // WorkSheet.PasteSpecial(object,object,object,object,object); 
    xlWorkSheet.PasteSpecial(CR, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, true);   
} 

это дает этот результат в Ехчел:

enter image description here

Он отлично работает почти на всех машинах, но несколько машин в производстве, она приклеивает как картина черная точка (я предполагаю, что это преобразование данных в растровое представление). Это то, что она наклеивает на некоторых машинах:

enter image description here

Я попытался с помощью функции PasteSpecial(). Но тогда он не будет копировать что-либо на любой машине. Я не уверен, что здесь происходит не так.

Я не мог найти разницы в конфигурации в машинах, в которых он хорошо работает и в которых он не работает. Любая идея, как справиться с этим и отображать данные вместо изображения на всех машинах?

ответ

2

Я также столкнулся с этой проблемой. Исправление для вышеуказанного кода - это правильно настроить метод PasteSpecial. Первым параметром метода должен быть формат. Исправьте последнюю строку button3_Click_1 следующим образом и все должно работать.

xlWorkSheet.PasteSpecial("Text", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, true);   

Другой вариант, который, как представляется, устранил проблему, заключается в изменении строки следующим образом. Это означает, что вставленный текст не является ссылкой и не является значком.

xlWorkSheet.PasteSpecial(CR, false, false, Type.Missing, Type.Missing, Type.Missing, true);