2016-07-29 3 views
0

J'utilise le code ci-dessous pour copier des données à partir de DataGridView, puis coller dans un fichier Excel.Worksheet.PasteSpecial Fonction coller des données en tant qu'image bitmap

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

cela donne ce résultat dans le fichier Excel:

enter image description here

Il fonctionne très bien sur presque toutes les machines, mais quelques machines dans la production, il colle comme image de point noir (je suppose qu'il est convertir les données en représentation bitmap). Voici ce qu'il colle sur certaines machines:

enter image description here

J'ai essayé d'utiliser la fonction PasteSpecial(). Mais alors il ne copiera rien dans aucune machine. Je ne suis pas sûr de ce qui ne va pas ici.

Je n'ai pas pu trouver la différence en termes de configuration dans les machines sur lesquelles il fonctionne bien et dans lesquelles il ne fonctionne pas. Une idée de comment gérer cela et afficher des données au lieu de l'image dans toutes les machines?

Répondre

2

J'ai également rencontré ce problème. Le correctif pour le code ci-dessus consiste à configurer correctement la méthode PasteSpecial. Le premier paramètre de la méthode devrait être le format. Corrigez la dernière ligne de button3_Click_1 comme suit et tout devrait fonctionner.

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

Une autre option qui semble avoir résolu le problème consiste à modifier la ligne comme suit. Ceci indique que le texte collé n'est pas un lien et n'est pas une icône.

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