使用VBA读取多个CSV文件并将1M+行压缩为100+行

问题描述 投票:0回答:2

我相当新,想知道解决这个问题的“最佳”方法。

我有多个自动创建的 CSV 文件,并以此格式命名:(R_Data_2022_01_01) csv 文件由 7 个“列”和 100000 多行数据组成。

RowID;Date     ;Type  ;Lot     ;Part  ;Test1;Test2
10256;22-2-2022;type 4;24051000;100001;OK   ;NOK
10257;22-2-2022;type 4;24051000;100001;NOK  ;-  

我可以完全忽略 RowID 和 Type 列,但我想在表中为每个唯一的日期、批次、零件集创建一行。 (如果这 3 个更改中的任何一个发生变化,它应该开始一个新行,其中计算 csv 文件中 test1 = NOK、test2 = NOK 的行数,以及匹配相同日期;批次;部分的所有行的总数)

示例输出:

Date:21-2-2022
Lot:24051000
Part:100001
Test1:34
Test2:33
Total:4203

Date:21-2-2022
Lot:24051009
Part:100001
Test1:56
Test2:45
Total:12004

我曾经在 Excel 中执行此操作,但很快发现这不可能维持一年以上(行限制等)

编辑: 我需要每隔一段时间用新数据更新此表(没有设定时间表),因为 CSV 文件是由机器自动创建的,并且此表需要由任何人更新。

编辑2: 我喜欢在由宏(或按钮)调用的 VBA 模块中完成这一切,但我坚持将文件导入到单独的表中。 (老实说,我不知道如何计算测试以及如何将其整齐地放入一条记录中)。

vba ms-access
2个回答
2
投票

我将链接或导入文件,请参见此处:将 csv 文件导入到 access 的 VBA 过程

然后运行这样的查询(根据您的数据调整测试标准):

SELECT [Date], [Lot], [Part], COUNT(*) AS Num
FROM MyLinkedCsv
WHERE Test1='Pass' AND Test2='Pass'
GROUP BY [Date], [Lot], [Part]

对于 100k 行的链接 CSV,这可能会非常慢。
然后将数据导入临时表 (

DoCmd.TransferText TransferType:=acImportDelim
),运行查询,然后从临时表中删除 *。

一旦按预期工作,请将 SELECT 查询更改为 INSERT 查询。


0
投票

使用 FileSystemObject 对象 逐行读取文件。

根据需要解析这些数据,并且对于每个完整的数据集,将这些数据作为记录附加到目标表。

© www.soinside.com 2019 - 2024. All rights reserved.