ms-access - 我需要将 Access 表(一个大表)中的部分数据动态(快速)导入到 Excel 中

标签 ms-access import excel vba

我正在尝试在 Excel 中创建动态报告。我有很多销售数据,我希望用户能够根据自己的需求对其进行切片和切 block 。

通常我会使用两张表:一张隐藏,包含原始数据,一张可见,包含所有按钮和表单控件,以便用户当时可以动态选择和可视化原始数据的一小部分。

问题是这次我需要处理 6.000.000+ 行数据(并且正在计数)。将所有内容存储在 Excel 工作表中并不是一种选择。另外,数据已经是Access表的形式了。

我尝试通过查询动态 Access 它,该查询根据用户在 Excel 工作表的表单控件中选择的内容“过滤掉”不需要的信息。由于某种原因,这非常慢。仅需 4-5 分钟即可拉出 10 行数据。

必须有一种更快的方法来做到这一点!我需要整个过程感觉“瞬间”。

有什么想法吗?


编辑:好的,所以问题似乎与我的 Access 表实际上是指向 *.txt 文件的链接表有关。这会大大减慢导入速度。

我尝试了两种建议的解决方案。

iDevlop 的想法运行得相当快(10-15 秒内导入 200k 行),但它的缺点是我每次都必须更新表。我将发布另一个问题,就像他建议的那样,看看这个过程如何以及是否可以自动化。

Remou 的脚本现在也可以完美运行(我很难把它做好,但他真的很开放并且乐于助人,所以我知道我明白了),虽然速度较慢,但​​它的优点是不需要任何数据库维护。

在选择使用哪种方法之前,我还需要弄清楚一些事情。现在,我想说的就是感谢大家的帮助!没有你我不可能成功!!!

最佳答案

如果您有文本文件,则不必费心通过 Access。这可能会限制您,直到您能够建立更好的系统。

Dim cn As Object
Dim rs As Object
Dim strFile As String
Dim strCon As String
Dim strSQL As String
Dim s As String
Dim i As Integer, j As Integer

strFile = "z:\docs\"

''Note that if HDR=No, F1,F2 etc are used for column names,
''if HDR=Yes, the names in the first row of the range
''can be used.
''
''Connection strings : http://www.connectionstrings.com/excel

strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFile _
    & ";Extended Properties=""Text;HDR=Yes;IMEX=1"";"

''Late binding, so no reference is needed

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

cn.Open strCon

strSQL = "SELECT * " _
       & "FROM [test.txt] a " _
       & "WHERE a.FirstName ='Bernard'"

rs.Open strSQL, cn, 3, 3


''Pick a suitable empty worksheet for the results

Worksheets("Sheet3").Cells(2, 1).CopyFromRecordset rs

''Tidy up
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing

如果您的文件是制表符分隔的,则可以使用 schema.ini (http://msdn.microsoft.com/en-us/library/ms709353(VS.85).aspx)。它必须与文本文件位于同一目录中,并且只需要包含两行:

[Ordini BO new.txt]
Format=TabDelimited

您的连接字符串应为:

strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFile _
& ";Extended Properties=""Text;HDR=No;IMEX=1;FMT=Delimited"";"

关于ms-access - 我需要将 Access 表(一个大表)中的部分数据动态(快速)导入到 Excel 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9635728/

相关文章:

excel - 当工作簿 1 中的单元格值与工作簿 2 中的列值匹配时,将值从工作簿 2 复制到工作簿 1(主工作簿)

ms-access - 如何从 VBA 中的文件对话框对象中获取单个文件名(对于 MS Access 2007)?

c# - 如何将 Access 2007 DateTime 转换为 mysql 日期时间格式?

php - 如何根据分隔键将文本插入数据库

python - 从命令行跳过 pytest 中的导入模块

c# - 当我设置 pageSetup 时,OpenXML 损坏了 excel 文件

database - 如何在VB6中创建Mschart?

c# - 将 CSV 文件复制到 MS Access 表

java - 如何在UML中绘制导入?

excel - 如何在后端使用电子表格将数据从 EXCEL 用户表单发布到 Google 表单?