如何从 access 数据库创建非常大的 excel 文件?

Posted

技术标签:

【中文标题】如何从 access 数据库创建非常大的 excel 文件?【英文标题】:How do I create very large excel files from access database? 【发布时间】:2010-11-03 20:04:09 【问题描述】:

我现在有一个问题,我认为我的冷融合代码在从 access 数据库中提取记录后试图创建一个非常大的 excel 文件。我相信它正在超时并给出 500,空错误。冷聚变将需要处理大约 180,000 多条记录。有没有一种有效的方法来做到这一点?

这几乎是如何下降的:

    <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">

谢谢

【问题讨论】:

@tylercomp - MS Access 实际上是 180K 行的,还是您通过链接服务器 (MS SQL) 检索数据? @tylercomp - 这只是一个普通的 CSV 文件吗?不清楚 queryToXL() 函数的作用。 一个 .cfm 文件 - 我相信这是要写入 excel 文件的信息的格式 @tylercomp - 不,您正在生成的文件。你说的是 Excel,但很可能只是 Excel 可以打开的东西。例如 CSV 或 html 文件。 【参考方案1】:

效率在旁观者看来。

如果您只是构建一个 csv 或 html 文件并将其作为 xls 文件流式传输到浏览器,那么您需要确保写入一行数据并刷新响应缓冲区以保持与浏览器活着。

但是,如果您要在内存中构建一个巨大的 excel 文件并尝试将其发送下来,那么您可能需要进行一些 UI 更改。

也就是说,让 UI 对报告/文件的请求进行排队。然后让浏览器离开,让用户稍后回来查看。您甚至可以每隔一段时间对队列进行一些 ajax 的检查。对于服务器端,让非 Web 进程创建文件并在作业完成时通知队列。

【讨论】:

您应该查看日志并找出 500 错误是关于什么的。这听起来不仅仅是一个简单的超时......也许代码正在耗尽可用资源?所以你可能必须找到一种不同的做事方式;)我当然希望你不要循环 180K 次..【参考方案2】:

最简单的方法是从 access 数据库中创建一个小的 VBscript 函数并执行以下代码...

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

您基本上可以使用上述语句将任何表格导出到任何 excel 文件... 如果您有多个表要添加到同一张工作表中,只需在同一路径上再次运行相同的命令,它将将该表添加到不同的 Excel 选项卡中

享受:)

【讨论】:

希望这不会暴露我的无知——但我该如何从冷融合页面开始呢? @tylercomp 你无法从冷融合页面。真的,您会想要迁移到更标准的 SQL 数据库(mysql、sqlite)而不是 Access(恕我直言)。猜猜它并没有真正回答你的问题......但如果你能够访问“访问”(双关语无意),这是一种方法【参考方案3】:

记住建议的内容,另一个帮助可能是导出为 csv 并将其命名为 .xls。大多数版本的 excel 处理得很好。

【讨论】:

【参考方案4】:

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

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

Link

您没有提到此导出的频率。但是 180K 似乎是 Access 的很多记录。鉴于它是一个桌面数据库,我不知道它处理这种大小的导出的效果如何......不管你如何分割它。

【讨论】:

以上是关于如何从 access 数据库创建非常大的 excel 文件?的主要内容,如果未能解决你的问题,请参考以下文章

EXC_BAD_ACCESS 设置核心数据实体属性

创建 QtChart 对象会在运行时创建 EXC_BAD_ACCESS 错误

将 NSString 设置为等于另一个时的 Objc EXC_BAD_ACCESS

UIDocument 相关 EXC_BAD_ACCESS

核心数据 - 访问从 fetch EXC_BAD_ACCESS 返回的对象

核心数据:EXC_BAD_ACCESS 访问关系