如何从访问数据库创build非常大的Excel文件?

我现在有一个问题,我相信我的冷融合代码试图创build一个非常大的ex​​cel文件后,从访问数据库拉logging。 我相信它是超时,并给出500,空错误。 冷聚变需要处理大约180,000多条logging。 有没有这样做的有效方式?

这几乎是如何下降:

<cfquery datasource="datasource" > Drop Table Person </cfquery> <cfquery datasource="datasource" > Update1rowtble </cfquery> <cfset Clist= "FNAME,LNAME,etc.."> <cfquery name="q" datasource="datasource" > R2A</cfquery> <cffile action="WRITE" file="filepath" output='#toString(queryToXL(Q,Clist))#' addnewline="No" fixnewline="No"> <cfquery name="q" datasource="source" > R3 </cfquery> <cffile action="WRITE" file="filepath2" output='#toString(queryToXL(Q,Clist))#' addnewline="No" fixnewline="No"> 

谢谢

有效率是在旁观者的眼中。

如果您只是简单地构build一个csv或html文件,并将其作为xls文件传输到浏览器,则需要确保写入一行数据并刷新响应缓冲区,以保持与浏览器的连接处于活动状态。

但是,如果你在内存中创build一个巨大的excel文件,并试图发送它,那么你可能需要做一些UI更改。

即,让UI对报告/文件的请求排队。 然后让浏览器消失,让用户稍后回来查看。 你甚至可以每隔一段时间就在队列中检查一下ajax的东西。 对于服务器端的事情,有一个非web进程创build文件,并在作业完成时通知队列。

最简单的方法是从访问数据库中创build一个小VBscript函数,并执行以下代码…

 Sub example() DoCmd.TransferSpreadsheet acExport, , "tableName", path End Sub 

你基本上可以导出任何表,任何Excel文件使用上述语句…如果你有多个表,你想添加到同一张表,只需再次在相同的path上运行相同的命令,它会添加表到另一个excel选项卡

请享用 :)

记住已经build议的内容,另外的帮助可能是导出到csv并将其命名为.xls。 大多数版本的excel句柄都很好。

如果它只是一个CSV文件,您也可以尝试使用IN子句将数据直接插入文件(从MS Access查询中)。

http://office.microsoft.com/en-us/access-help/in-clause-HA001231484.aspx

http://blogs.msdn.com/b/access/archive/2009/03/27/accessing-external-data-using-the-in-clause.aspx

你没有提到这种出口将会发生多less次。 但180K似乎有很多关于Access的logging。 鉴于这是一个桌面数据库,我不知道它将如何处理这种大小的出口..不pipe你如何切片。