最近写的一个项目中,有需要读取数据量很大(有10个sheet,每个sheet有65535行11列的数据)的Excel文件,用了COM和QODBC两种方法读取,速度很慢。
你可能会问,为啥不把数据放在数据库里,那样读取的速度更快?当然,需求要求是可以从数据库或者从Excel中读取数据这两种方式,所以没办法还是要操作Excel。
回归正题,在操作Excel上,QT有两种方式,一是通过COM组件,二是通过QODBC(数据库的方式)。
QODBC读取100MB的Excel文件的时候需要十几分钟,因为太慢,这种方法舍弃。
网上找了通过COM组件读取,使用QAxObject的方法,但是网上找到的都是一个单元格一个单元格的读取,对于数据量很大的文件时,效率极其的低。后来经过各种方法摸索,找到了两种方法(还是使用COM组件),一个是直接读一个整个sheet,一个是直接读sheet中的一个范围(范围可以自己定义)。两种方法可以按照自己的实际需要使用。下面贴出方法。
<