2016-09-28 1 views
0

Excel에서 Access (~ 800k lines)로 가져와야하는 거대한 데이터 세트가 있습니다. 그러나 특정 열 값을 가진 행은 무시할 수 있습니다.이 행은 실제 데이터 집합의 90 %를 차지합니다. 사실, 수입 된 선의 10 % 만 필요합니다. 이 모든 단일 라인 A의 한에 waaay합니다 ~ 800K 라인으로VBA를 통해 엑셀에서 거대한 데이터 세트 가져 오기

For i = 1 To EOF 
    sql = "Insert Into [Table] (Column1, Column2) VALUES ('" & _ 
    xlSheet.Cells(i, 1).Value & " ', '" & _ 
    xlSheet.Cells(i, 2).Value & "');"  
Next i 
DoCmd.RunSQL sql 

: 과거

나는 엑셀 파일 라인별로 다음과 같은 방식 (의사 코드)를 가져 왔습니다 쿼리가 만들어져 실행됩니다.

또한 줄 수를 90 %까지 무시할 수 있다는 점을 감안할 때 Excel에서 Access로 데이터 집합을 가져 오는 가장 빠른 방법은 무엇입니까?

필자는 필터가 활성화 된 임시 Excel 파일을 만들려고했습니다. 그런 다음 필자는 필터링 된 Excel을 가져옵니다.

하지만 이보다 나은/빠른 접근 방법이 있습니까? 또한 vba 액세스를 통해 Excel을 가져 오는 가장 빠른 방법은 무엇입니까?

미리 감사드립니다.

+0

VB.NET은 vba가 아닙니다. 꼬리표에 그렇게 말해. – Plutonix

+0

1.) 처리중인 데이터를 줄이기 위해 90 %의 선을 제거 할 수 있습니까? 2.) 이것은 일회성 조작입니까, 아니면 반복해서 하시겠습니까? 이렇게하면 솔루션의 강건성이 바뀝니다. 일반적으로 RDBMS를 사용하면 Excel, CSV, XML 등에서 데이터베이스 테이블로 가져올 수 있습니다. 이것은 수동 단계이지만 한 번만 필요한 경우 가장 빠르고 간단한 방법 일 수 있습니다. –

+0

ADO를 사용하여 Excel 시트를 쿼리하고 ADO 및 SQL을 사용하여 쿼리 할 수 ​​있습니다. –

답변

1

가져 오기에 대한 특수 액세스 쿼리를 실행하는 것이 좋습니다. 아래 SQL을 Access 쿼리 창에 추가하거나 DAO/ADO 연결의 SQL 쿼리로 추가합니다. 열 머리글을 이름을 필요로하는 WHERE 조항, 지금 HDR:No로 설정 포함 : 또는

INSERT INTO [Table] (Column1, Column2) 
SELECT * 
FROM [Excel 12.0 Xml;HDR=No;Database=C:\Path\To\Workbook.xlsx].[SHEET1$]; 

을, 당신이 준비 임시 테이블을해야 할 경우 테이블 만들기 쿼리를 실행 최종 이전 (라인의 90 %를 제거)

SELECT * INTO [NewTable] 
FROM [Excel 12.0 Xml;HDR=No;Database=C:\Path\To\Workbook.xlsx].[SHEET1$]; 
+0

line-by-line 방식의 DAO를 사용하면 속도가 크게 향상되었습니다. 감사합니다. – CoffeeCups

+0

굉장! 실제로 SQL은 반복적으로 작업을 수행하지 않고 즉시 작업을 처리합니다. 다행히 도울 수있어. – Parfait

0

코드에 약간의 변화가 당신을 위해 필터링을 수행합니다 :

Dim strTest As String 
For i = 1 To EOF 
    strTest=xlSheet.Cells(i, 1).Value 
    if Nz(strTest)<>"" Then 
     sql = "Insert Into [Table] (Column1, Column2) VALUES ('" & _ 
     strTest & " ', '" & _ 
     xlSheet.Cells(i, 2).Value & "');" 
      DoCmd.RunSQL sql 
     End If 
Next i 

내가 assu 테이블 만이 존재하는 경우이 쿼리 테이블을 대체주의 할 루프 밖에서 RunSQL을 사용하는 것은 의사 코드의 실수였습니다. 첫 번째 열의 셀이 비어 있는지 테스트하지만 상황에 맞는 조건으로 대체 할 수 있습니다.

+0

입력에 감사드립니다, 불행히도이 접근법은 여전히 ​​dao와 함께가는 것보다 훨씬 느립니다. – CoffeeCups

관련 문제