在我的 Access 数据库中存储 Excel 模板

Posted

技术标签:

【中文标题】在我的 Access 数据库中存储 Excel 模板【英文标题】:Storing Excel templates in my Access database 【发布时间】:2014-07-02 15:01:25 【问题描述】:

我想要什么:

我正在使用 MS Access 数据库为安大略专业工程大学认证委员会生成一份报告。 PEO 在 MS Excel 中有他们的模板,我必须使用他们的确切格式。

我想将 Access DB 中的数据输出到 Excel 工作表(很简单),但我想在生成新文件时复制它们的格式。 (我不想每次都保留一个空的模板文件并复制它)。

所以基本上我希望以某种方式将模板存储在代码中。 (欢迎提出其他建议!)

我尝试过的:

你们中的一些人会读到这篇文章并认为我是个白痴。但我尝试的是通过API Code 从 MS 剪贴板上的 excel 中获取数据,并将 DataObject 存储为(我希望)某种字符串。

但我无法保留原始 MS Excel 模板的格式或单元格阴影。

有什么建议吗?...

【问题讨论】:

您使用的是什么版本的 Access? 【参考方案1】:

您可以通过创建包含 Attachment 字段的表将 Excel 模板存储在数据库中

创建记录并将 Excel 模板保存为该记录的附件

然后在需要时使用这样的 VBA 代码将 Excel 文档的新副本保存到磁盘:

Option Compare Database
Option Explicit

Public Sub SaveReportTemplateToFile()
    Dim cdb As DAO.Database, rowRst As DAO.Recordset, attachRst As DAO.Recordset2, attachField As DAO.Field2
    Set cdb = CurrentDb
    Set rowRst = cdb.OpenRecordset("SELECT TemplateFile FROM ReportTemplates WHERE ID=1")
    Set attachRst = rowRst.Fields("TemplateFile").Value
    Set attachField = attachRst.Fields("FileData")
    attachField.SaveToFile "C:\Users\Gord\Desktop\" & attachRst.Fields("FileName").Value
    Set attachField = Nothing
    attachRst.Close
    Set attachRst = Nothing
    rowRst.Close
    Set rowRst = Nothing
    Set cdb = Nothing
End Sub

【讨论】:

这看起来太棒了!那么将附件存储在表中意味着数据库有硬拷贝吗?所以我不需要将 .xls 文件与 Access DB 一起保存? @user3163380 是的,附件文件保存为数据库中的对象。 谢谢,这是对我问题的一个很好的回答!感谢您提供的截图图片,他们非常有帮助 戈德,你让我的生活轻松多了!谢谢【参考方案2】:

您要做的是首先将所有数据导出到一个空模板的新工作表中,然后将所有数据链接到模板上的正确位置,然后删除包含所有数据的工作表,保留模板上的数据。

据我所知,没有更快的方法可以做到这一点,但这里有一个例子:http://www.rogersaccesslibrary.com/forum/topic350.html

如果模板设置得当,这将是一项艰巨的工作,但也是可行的。

【讨论】:

感谢您的回答,但正如我所提到的;我想以某种方式避免将 Excel 模板放在一起。我想以编程方式复制模板格式,这样如果我移动 Access DB,我就不必将它与外部 Excel 文件绑定。 (这也将避免复制到空模板的新工作表然后链接到另一张工作表的歌舞) 为什么不将模板存储在 Access DB 中?完全通过代码复制模板似乎需要做很多工作而没有明显的好处。 @TimWilliams 是的,我不知道你能做到这一点。我接受了这个作为最佳答案(来自 Gord T)。谢谢你的建议!

以上是关于在我的 Access 数据库中存储 Excel 模板的主要内容,如果未能解决你的问题,请参考以下文章

如何确定用户是不是关闭已由 Excel 中的代码打开的 Access 应用程序

Access 中需要存储在 Sharepoint 上的电子表格

RecordSet 上的 GetRows 不会存储 Access DB 中的文本列

使用VB将数据从Excel导入Ms Access

Access中VBA中excel文件中的VLookup

使用 VBA 将数据从 Excel 导出到 Access