将包含计算字段的Access数据导出到Excel工作表中

时间:2013-11-23 20:00:12

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

我正在为我的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语句中不允许计算列。

也许这有一个解决方法?

1 个答案:

答案 0 :(得分:2)

似乎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();
}