2016-07-29 8 views
0

Ich verwende den folgenden Code, um Daten von DataGridView zu kopieren und dann in eine Excel-Datei einzufügen.Worksheet.PasteSpecial Funktion Einfügen von Daten als Bitmap-Bild

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

das dieses Ergebnis in Excel-Datei ergibt:

enter image description here

Es ist auf fast allen Maschinen funktioniert gut, aber ein paar Maschinen in der Produktion, fügt sie als schwarzer Punkt Bild (ich denke, ist Konvertieren der Daten in Bitmap-Darstellung). Dies ist, was es auf einigen Maschinen Pasten:

enter image description here

Ich versuchte Funktion PasteSpecial(). Aber dann kopiert es nichts in irgendeiner Maschine. Ich bin mir nicht sicher, was hier falsch läuft.

Ich konnte den Unterschied in der Konfiguration nicht in Maschinen finden, in denen es gut funktioniert und in denen es nicht funktioniert. Haben Sie eine Idee, wie Sie damit umgehen und Daten anstelle von Bildern in allen Maschinen anzeigen können?

Antwort

2

Ich stieß auch auf dieses Problem. Die Fehlerbehebung für den obigen Code besteht darin, die PasteSpecial-Methode korrekt zu konfigurieren. Der erste Parameter für die Methode sollte das Format sein. Korrigiere die letzte Zeile von button3_Click_1 wie folgt und alles sollte funktionieren.

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

Eine andere Möglichkeit, das Problem zu beheben, besteht darin, die Zeile wie folgt zu ändern. Dies signalisiert, dass der eingefügte Text kein Link ist und kein Symbol ist.

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