我编写了一个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);
}
答案 0 :(得分:1)
我认为一个问题是从UI复制,而不是从后面的代码复制原始数据。而且我看到了其他一些信息,以表明您没有使用MVVM模式。 WPF / UWP和XAML实际上是为MVVM模式设计的。尽管可以使用其他方法,但这样做会浪费大约90%的功能,并在其他每个地方都遇到问题。如果您打算继续使用该GUI技术,那么没有理由不先学习MVVM并一路解决问题。
如果操作花费很长时间并且无法解决,那么可能是时候考虑一些多任务处理了。基本上,此操作(导出到Excel)需要很长时间。而且,如果您需要长时间运行的任何类型的操作(保存到磁盘,打印,导出为另一种格式),通常都需要进行多任务处理。