我正在尝试在 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/