将WPF DataGrid复制到剪贴板花费的时间太长

时间:2018-10-16 13:51:55

标签: c# excel wpf datagrid

我编写了一个WPF应用程序,该程序将数据从DataGrid复制到剪贴板,然后自动将其粘贴到Excel中。问题:复制时间太长。还有其他方法可以更快地将DataGrid复制到剪贴板吗?

 private void copyAlltoClipboard()
    {
        DataGrid1.SelectAllCells();
        DataGrid1.ClipboardCopyMode = DataGridClipboardCopyMode.IncludeHeader;
        ApplicationCommands.Copy.Execute(null, DataGrid1); // Take too long time
    }



    private void Button_Click(object sender, RoutedEventArgs e)
    {
        copyAlltoClipboard();
        Excel.Application xlexcel;
        Excel.Workbook xlWorkBook;
        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();
        xlWorkSheet.PasteSpecial(CR, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, true);
    }

1 个答案:

答案 0 :(得分:1)

我认为一个问题是从UI复制,而不是从后面的代码复制原始数据。而且我看到了其他一些信息,以表明您没有使用MVVM模式。 WPF / UWP和XAML实际上是为MVVM模式设计的。尽管可以使用其他方法,但这样做会浪费大约90%的功能,并在其他每个地方都遇到问题。如果您打算继续使用该GUI技术,那么没有理由不先学习MVVM并一路解决问题。

如果操作花费很长时间并且无法解决,那么可能是时候考虑一​​些多任务处理了。基本上,此操作(导出到Excel)需要很长时间。而且,如果您需要长时间运行的任何类型的操作(保存到磁盘,打印,导出为另一种格式),通常都需要进行多任务处理。