文章可能已更新,最新地址:http://www.fearlazy.com/index.php/post/117.html
复制表格的内容是一种很常用的操作,但是要将表格中的内容复制到excel会存在一个问题。Qt应用程序和excel是两个不同程序,他们进行数据交互需要一座桥梁。它就是剪贴板,好在Qt已经为我们封装好了剪贴板QClipboard类。
光有剪贴板还是不够的,要知道excel是有格式的,我们需要知道如何将表格数据存储到剪贴板才能够正确的粘贴到excel上面。excel一行里的多个单元格之间使用\t来分割,两行之间使用\n来分割。知道了这些我们就知道如何来组织数据了。
最后一个问题又回到了Qt,那就是我们需要知道复制了表格中的哪些单元格,我们可以通过表格的选中区域和选中项来判断,接着把这些选中区域的内容按照格式组装起来存入剪贴板中。
举例:
1.首先从QTableWidget派生一个类CCopyTable,重写它的菜单事件,目的是通过菜单来触发复制这个操作。
构造函数中创建了菜单对象,在菜单事件中调整菜单的位置并显示。
2.在复制菜单的槽函数sltCopy进行数据的组装,也是最关键的一部分。
由于可能存在选中多个区域的情况,因此我们先计算出多个选中区域的最大范围,QTableWidgetSelectionRange通过左上右下四个变量来描述一个区域,左和上我们取最小值,右和下取最大值得到的就是最大范围。
获得最大范围就可以开始组数据了,由于范围内并不是所有的单元格都被选中,因此还需要加入selectedItems来作为判断依据,如果没被选中的就赋一个空字符串。最后一步使用QApplication::clipboard获取剪贴板对象设置组装好的数据即可。
3.运行效果
作者:fearlazy . xxxxxxx