2012-08-30 3 views
10

SO2PO.csv라는 이름의 CSV 파일이 항상 있습니다. 그것은 오픈 오더 (Open Order)라는 통합 문서에서 PO Data라는 탁월한 시트로 가져 오는 데이터가 있습니다. SO2PO.csv의 모든 데이터를 Open Order.xlsm 시트 PO 데이터로 가져 오는 방법을 찾아야합니다..csv에서 엑셀 시트로 데이터를 가져 오는 방법이 있습니까?

나는 그것이 가능하다는 것을 알고 있지만 어떻게해야합니까? 누군가 올바른 방향으로 나를 가리킬 수 있습니까?

또는 특정 폴더에 배치 된 .csv 파일을 가져올 수 있도록 만드는 방법이 있습니까?

+2

이 말은 싫지만 Excel 시트에 넣으려고했다는 말은 구체적입니다. 태그와 Excel, Excel-ExcelX가 Excel이라는 응용 프로그램이라는 것을 알았습니다. 사용 중이었고 엑셀 - VBA가 해결책이었습니다. 다른 응용 프로그램을 사용하여이 작업을 수행하려는 경우 아마도 다음과 같을 것입니다. –

+0

예, Excel이 응용 프로그램 이었음이 분명했습니다. C# 또는 VB.Net과 같은 별도의 독립 실행 형 응용 프로그램을 작성했거나 SQL Server를 사용하는 더 큰 응용 프로그램의 일부로 작성했는지 여부와 상관없이 사용하고자하는 * 외부 * 메커니즘이 분명하지 않았습니다. 당신은 당신의 시스템을 알고 있습니다. 우리는하지 않습니다. 나는 정말로 여기에서 돕는 것을 즐긴다. 그러나 도움을 제공하려고 노력하는 것은 이것을 매우 고무하지 않는다. 프로젝트에 행운을 빈다. –

+1

C# 및 VB.Net이 될 경우 태그에 넣을 것입니다 ... 물건을 요청할 때 나는 꽤 쓸쓸합니다. –

답변

20

당신은 쿼리 테이블 당신은 그럼 그냥 마우스 오른쪽 버튼으로 클릭하여 데이터를 새로 고칠 수 있습니다을 만든 후에는 데이터 소스

에 PO 데이터 시트에서 쿼리 테이블을 만들려면이 코드를 추가 (또는 오픈 새로 고침)

Sub CSV_Import() 
Dim ws As Worksheet, strFile As String 

Set ws = ActiveWorkbook.Sheets("PO Data") 'set to current worksheet name 

strFile = Application.GetOpenFilename("Text Files (*.csv),*.csv", , "Please select text file...") 

With ws.QueryTables.Add(Connection:="TEXT;" & strFile, Destination:=ws.Range("A1")) 
    .TextFileParseType = xlDelimited 
    .TextFileCommaDelimiter = True 
    .Refresh 
End With 
End Sub 
+0

xls 파일을 변경하면이 파일도 사용할 수 있습니까? –

+0

내가 묻는 유일한 이유는 파일을 xlxs 또는 xls로 변경하려고 할 때 많은 extr 코드가 throw되기 때문입니다. –

+1

Excel 파일에 연결하는 것은 동일한 방법이 아니지만 ADO 연결을 사용하여 수행 할 수 있습니다. 나는 의견보다는 여기에 대답하는 것이 다른 질문을 요구할 것이라고 생각한다. –

2

가능합니다.

vba가 없으면 DATA-Tab을 사용하고 텍스트 소스에서 가져올 수 있습니다.

은 VBA를 사용하면 새 통합 문서로 CSV를 열 수 :

Public Function openSource(fileToOpen As String) As Excel.Workbook 
On Error GoTo err_exit 

    Dim f As Object 
    Dim fs As Object 

    Set fs = CreateObject("Scripting.FileSystemObject") 
    Set openSource = Nothing 

    If fs.fileexists(fileToOpen) Then 
     Set f = fs.GetFile(fileToOpen) 

     Set openSource = ThisWorkbook.Application.Workbooks.Open(_ 
      FileName:=f.path, _ 
      UpdateLinks:=2, _ 
      ReadOnly:=True, _ 
      AddToMRu:=False, _ 
      Notify:=False) 

     Windows(openSource.Name).Visible = False 
    End If 
    Exit Function 
err_exit: 
    'throwErrMsg "Failed to read File!", "openSource" 
    If Not openSource Is Nothing Then 
     openSource.Close SaveChanges:=False, RouteWorkbook:=False 
    End If 
End Function 

Dim CSVWorkbook As New Excel.Workbook 
Set CSVWorkbook = openSource(c:\SO2PO.csv) 

이제 다른과 행, COLS 또는 전체 워크 시트를 복사 같이이 통합 문서를 탐색 할 수 있습니다)이 도움이되기를 바랍니다.

또 다른 방법은 vba 버전의 텍스트에서 가져 오기를 사용하는 것이지만 지금 당장은 예제가 없습니다.

1

Excel로 데이터를 가져 오는 데는 여러 가지 방법이 있습니다. QueryTables (The_Barman에 의해 시연 됨), SQL, 가져 오기 마법사 등

일반적으로이 방법은 가져올 파일에 데이터가 얼마나 깨끗한 지와 레이아웃 방법을 정확히 알고있는 경우에 따라 다릅니다. 빈 행, 혼합 데이터 형식, 병합 된 셀 등이 있으면 예를 들어 악몽이 될 수 있습니다.

다음은 일반적으로 Excel에서 파일을 열어 모든 데이터를 가져 오는 느린 '무차별 대입'방법입니다. 다른 방법이 실패 할 때 종종 마지막으로해야 할 일입니다.

Option Explicit 

Public Sub ImportData() 
Dim CSVFilename As String 
Dim writeToFilename As String 
Dim writeToSheet As String 
Dim readXL As Workbook 
Dim readWS As Worksheet 
Dim writeXL As Workbook 
Dim writeWS As Worksheet 
Dim UsedRng As Range 



    CSVFilename = Environ$("USERPROFILE") & "\Desktop" & "\SO2PO.csv" 
    writeToFilename = Environ$("USERPROFILE") & "\Desktop" & "\Open Order.xlsx" 
    writeToSheet = "PO Data" 


    Set writeXL = GetObject(writeToFilename) 
    Set writeWS = writeXL.Sheets(writeToSheet) 
    'writeWS.Parent.Windows(1).Visible = True 


    Set readXL = GetObject(CSVFilename) 

    With readXL 

     Set readWS = readXL.Sheets(1) 
     Set UsedRng = RealUsedRange(readWS) 
     writeWS.Range(UsedRng.Address).Value = UsedRng.Value 

    End With 

    'close CSV without saving 
    readXL.Close SaveChanges:=False 
    Set readWS = Nothing 
    Set readXL = Nothing 

    'close template with save 
    writeXL.Close SaveChanges:=True 
    Set writeWS = Nothing 
    Set writeXL = Nothing 


End Sub 


Public Function RealUsedRange(ByVal WS As Worksheet) As Range 
'Find used range 
    Dim FirstRow  As Long 
    Dim LastRow   As Long 
    Dim FirstColumn  As Integer 
    Dim LastColumn  As Integer 

    On Error Resume Next 

    With WS 

     FirstRow = .Cells.Find(What:="*", After:=.Cells(.Rows.Count, .Columns.Count), LookIn:=xlValues, LookAt:= _ 
     xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext).Row 

     FirstColumn = .Cells.Find(What:="*", After:=.Cells(.Rows.Count, .Columns.Count), LookIn:=xlValues, LookAt:= _ 
     xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext).Column 

     LastRow = .Cells.Find(What:="*", After:=.Range("A1"), LookIn:=xlValues, LookAt:= _ 
     xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 

     LastColumn = .Cells.Find(What:="*", After:=.Range("A1"), LookIn:=xlValues, LookAt:= _ 
     xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column 

     Set RealUsedRange = .Range(.Cells(FirstRow, FirstColumn), .Cells(LastRow, LastColumn)) 

    End With 

    On Error GoTo 0 

End Function 
0

쿼리 테이블을 사용할 경우 잔여 쿼리 테이블을 사용하면 다운 스트림 프로세스에서 몇 가지 문제가 발생합니다.

' get the file to the data sheet 
Set ws = ActiveWorkbook.Sheets("Data") 
With ws.QueryTables.Add(Connection:="TEXT;" & "mydata.csv", Destination:=ws.Range("A1")) 
    .TextFileParseType = xlDelimited 
    .TextFileCommaDelimiter = True 
    .Refresh 
End With 

' delete the querytable if there is one 
On Error GoTo nothingtodelete 
    Sheets("Data").QueryTables(1).SaveData = False 
    Sheets("Data").QueryTables.Item(1).Delete 
nothingtodelete: 
관련 문제