Worksheet.PasteSpecial函数将数据粘贴为位图图像

时间:2016-07-29 19:41:11

标签: c# datagridview com-interop excel-interop clipboarddata

我使用下面的代码从DataGridView复制数据,然后粘贴到Excel文件中。

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

这会在excel文件中产生此结果:

enter image description here

它几乎适用于所有机器,但生产中的机器很少,它会粘贴为黑点图片(我猜它是以位图表示形式转换数据)。这是它在某些机器上粘贴的内容:

enter image description here

我尝试使用函数PasteSpecial()。但是它不会在任何机器上复制任何东西。我不确定这里出了什么问题。

我无法在运行良好且无法正常工作的机器中找到配置方面的差异。 任何想法如何处理这个并在所有机器中显示数据而不是图片?

1 个答案:

答案 0 :(得分: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);