如何从access数据库创建非常大的excel文件?
我现在有一个问题,我认为我的cold fusion代码试图在从access数据库中提取记录后创建一个非常大的excel文件。我相信它超时了,并给出了一个500,零的错误。冷聚变将需要处理大约180000多条记录。有没有一种有效的方法 下面是它的大致情况:如何从access数据库创建非常大的excel文件?,excel,ms-access,coldfusion,Excel,Ms Access,Coldfusion,我现在有一个问题,我认为我的cold fusion代码试图在从access数据库中提取记录后创建一个非常大的excel文件。我相信它超时了,并给出了一个500,零的错误。冷聚变将需要处理大约180000多条记录。有没有一种有效的方法 下面是它的大致情况: <cfquery datasource="datasource" > Drop Table Person </cfquery> <cfquery datasource="datasource" >
<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">
落桌人
Update1rowtble
R2A
R3
谢谢旁观者眼里出西施 如果只是构建一个csv或html文件,并将其作为xls文件流式传输到浏览器,则需要确保写入一行数据并刷新响应缓冲区,以保持与浏览器的连接处于活动状态 然而,如果您正在内存中构建一个巨大的excel文件并试图将其发送下来,那么您可能需要对UI进行一些更改
也就是说,让UI排队请求报告/文件。然后让浏览器离开,让用户稍后回来检查它。您甚至可以每隔一段时间对队列进行一次ajax检查。对于服务器端,让一个非web进程创建文件,并在作业完成时通知队列。高效在旁观者眼中 如果只是构建一个csv或html文件,并将其作为xls文件流式传输到浏览器,则需要确保写入一行数据并刷新响应缓冲区,以保持与浏览器的连接处于活动状态 然而,如果您正在内存中构建一个巨大的excel文件并试图将其发送下来,那么您可能需要对UI进行一些更改
也就是说,让UI排队请求报告/文件。然后让浏览器离开,让用户稍后回来检查它。您甚至可以每隔一段时间对队列进行一次ajax检查。对于服务器端,让一个非web进程创建文件,并在作业完成时通知队列。最简单的方法是从access数据库内部创建一个小的VBscript函数,并执行以下代码
Sub example()
DoCmd.TransferSpreadsheet acExport, , "tableName", path
End Sub
您基本上可以使用上述语句将任何表格导出到任何excel文件。。。
如果要将多个表添加到同一工作表中,只需在同一路径上再次运行同一命令,即可将该表添加到不同的excel选项卡中
享受:)最简单的方法是从access数据库内部创建一个小的VBscript函数,并执行以下代码
Sub example()
DoCmd.TransferSpreadsheet acExport, , "tableName", path
End Sub
您基本上可以使用上述语句将任何表格导出到任何excel文件。。。
如果要将多个表添加到同一工作表中,只需在同一路径上再次运行同一命令,即可将该表添加到不同的excel选项卡中
享受:)如果它只是一个CSV文件,您还可以尝试使用IN子句将数据直接插入到文件中(从MS Access查询中)
您没有提到此导出的频率。但180K似乎有很多可供访问的记录。考虑到它是一个桌面数据库,我不知道它将如何处理这种大小的导出。。无论您如何分割它。如果它只是一个CSV文件,您也可以尝试使用IN子句将数据直接插入到文件中(从MS Access查询中)
您没有提到此导出的频率。但180K似乎有很多可供访问的记录。考虑到它是一个桌面数据库,我不知道它将如何处理这种大小的导出。。无论您如何分割它。记住建议的内容,另一个帮助可能是导出到csv并将其命名为.xls。大多数版本的excel都能很好地处理这一问题。记住建议的内容,另外一个帮助可能是导出到csv并将其命名为.xls。大多数版本的excel都能很好地处理这一点。希望这不会暴露我的无知-但我如何从coldfusion页面开始呢?@tylercomp您将无法从coldfusion页面开始。实际上,您希望使用更标准的SQL数据库(mysql、sqlite)而不是Access(IMHO)。我猜这并不能真正回答你的问题。。。但是,如果你能够访问“访问”(意料之外的双关语)的话,这是一种方法,希望这不会暴露我的无知——但我如何从coldfusion页面开始呢?@tylercomp你无法从coldfusion页面开始。实际上,您希望使用更标准的SQL数据库(mysql、sqlite)而不是Access(IMHO)。我猜这并不能真正回答你的问题。。。但是,如果您能够访问“access”(意料之外的双关语)@tylercomp,那么这是一种方法。MS access实际上是180K行的来源,还是您通过链接服务器(MS SQL)检索数据?@tylercomp-这只是一个普通的CSV文件吗?不清楚queryToXL()函数的作用是什么.a.cfm文件-我相信这就是要写入excel的信息的格式file@tylercomp-否,您正在生成的文件。你说的是Excel,但很可能只是Excel可以打开的东西。例如CSV或html文件。@tylercomp-MS Access实际上是180K行的来源,还是通过链接服务器(MS SQL)检索数据?@tylercomp-这只是一个普通的CSV文件吗?不清楚queryToXL()函数的作用是什么.a.cfm文件-我相信这就是要写入excel的信息的格式file@tylercomp-否,您正在生成的文件。你说的是Excel,但很可能只是Excel可以打开的东西。例如CSV或html文件。您应该查看日志,找出500错误的原因。这听起来不仅仅是一个简单的超时。。也许代码正在耗尽可用的资源?因此,你可能必须找到一种不同的做事方式;)我当然希望你没有循环180K ti