【问题标题】:Exporting Access data that includes calculated fields into an Excel worksheet将包含计算字段的 Access 数据导出到 Excel 工作表中
【发布时间】:2013-11-23 20:00:11
【问题描述】:

我正在为我的 Visual Basic 课程做一个编程项目,我们正在使用 Visual Studios 2012。我想知道,如果可能的话,是否有办法将 Access 表导出到 Excel 文件中(通过按表单中的菜单项),然后我可以将文件名作为文件创建的时间和日期。

现在,我有一个带有菜单条的表单,我在其中放置了导出到 Excel 的选项。

程序让用户输入他们发送到洗衣店和从洗衣店接收的商品数量。我已经完成了从表单到 Access 表的数据移动,但是我需要能够创建一个 Excel 文件,其中包含该表中的数据,并将日期和时间作为文件名。我没有使用 VBA,我认为在项目的这个阶段开始使用 VBA 可能为时已晚。我正在使用我在 YouTube 上找到的一系列视频中的技术,这是链接:

https://www.youtube.com/watch?v=07ioTflBrHQ

我完全坚持这一点,我寻找的所有解决方案都在 VBA 中,但我需要 Visual Studios 2012 使用的任何解决方案。提供的任何帮助将不胜感激,如果需要 VBA,我会要求您将我视为初学者,并提供您可能拥有的任何解释或代码,因为我是 Visual Basic 的初学者,我不知道 VBA 是如何工作的.

编辑:

here 描述的技术看起来很有希望,但我要导出的字段之一是 Calculated 字段,它会触发错误

SELECT INTO 语句中不允许计算列。

也许有解决方法?

【问题讨论】:

  • 绝对不是VB6。 VB6 很古老。
  • 嗯,这是我热爱互联网的时代之一。谢谢戈德汤普森。它工作,现在我只需要修改它的细节。最后一个问题:我有一个计算字段,我也想导出,但我收到消息“SELECT INTO 语句中不允许计算字段”。有任何想法吗?再次感谢您,您为我减轻了很多压力。

标签: vb.net excel visual-studio-2012 ms-access-2010


【解决方案1】:

似乎 Access 不允许在 SELECT INTO 语句中包含计算字段。对于名为 [SampleData] 的表

SampleID  Prefix  FirstName  LastName  FullName        
--------  ------  ---------  --------  ----------------
       1  Mr      Gord       Thompson  Mr Gord Thompson
       2  Miss    Anne       Elk       Miss Anne Elk   

如果我们尝试,其中 [FullName] 是计算字段

using (var cmd = new OleDbCommand())
{
    cmd.Connection = con;
    cmd.CommandText =
            @"SELECT SampleID, FullName " +
            @"INTO [Excel 8.0;HDR=YES;DATABASE=C:\__tmp\zzzNew.xls].[Sheet1] " +
            @"FROM SampleData";
    cmd.ExecuteNonQuery();
}

我们得到错误

SELECT INTO 语句中不允许计算列。

但是,我们可以通过在输出列之一的 表达式 中使用计算字段来欺骗 Access:

using (var cmd = new OleDbCommand())
{
    cmd.Connection = con;
    cmd.CommandText = 
            @"SELECT SampleID, '' & FullName AS FullName " +
            @"INTO [Excel 8.0;HDR=YES;DATABASE=C:\__tmp\zzzNew.xls].[Sheet1] " +
            @"FROM SampleData";
    cmd.ExecuteNonQuery();
}

(这是 C# 代码,但 VB.NET 代码非常相似。)

编辑回复:评论

要以较新的.xlsx 格式创建 Excel 文档,请使用此

using (var cmd = new OleDbCommand())
{
    cmd.Connection = con;
    cmd.CommandText = 
            @"SELECT SampleID, '' & FullName AS FullName " +
            @"INTO [Excel 12.0 Xml;HDR=YES;DATABASE=C:\__tmp\zzzNew.xlsx].[Sheet1] " +
            @"FROM SampleData";
    cmd.ExecuteNonQuery();
}

【讨论】:

  • 再次感谢 Gord,我得到了它的工作。我想知道,这可能与 Excel 2010 0r 2013 文件的“.xlsx”文件扩展名有关吗?我试过了,文件被制作了,但我无法打开 .xlsx 文件,因为扩展名“无效”我相信这是因为代码中写着“Excel 8.0;”的部分我必须将其更改为 14.0 或 15.0,具体取决于我想要使用的 Excel 版本是否正确?当我将其更改为 14.0 时,出现未处理的异常错误。做那部分不是很重要,但我只是想知道是否可以做到。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-15
  • 1970-01-01
  • 2010-09-19
  • 2016-08-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多