programing

.csv에서 액티브 엑셀 시트로 데이터를 Import하는 방법이 있습니까?

padding 2023. 4. 23. 10:08
반응형

.csv에서 액티브 엑셀 시트로 데이터를 Import하는 방법이 있습니까?

항상 같은 이름의 CSV 파일 SO2PO.csv가 있습니다.Open Order라는 워크북에 PO Data라는 엑설런트 시트로 Import한 데이터가 포함되어 있습니다.SO2PO.csv에서 Open Order.xlsm 시트 PO Data로 모든 데이터를 Import할 방법을 찾아야 합니다.

가능한 건 알지만 어떻게요?누가 나를 올바른 방향으로 인도해 줄 수 있나요?

또는 특정 폴더에 있는 .csv 파일을 Import할 수 있도록 하는 방법이 있습니까?

이 코드를 추가하여 PO 데이터 시트에 데이터 소스에 QueryTable을 만듭니다.

QueryTable을 작성한 후 데이터 새로 고침(또는 열었을 때 새로 고침)을 마우스 오른쪽 버튼으로 클릭할 수 있습니다.

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

쿼리 테이블을 사용하는 경우 쿼리 테이블의 잔량으로 인해 다운스트림 프로세스에서 몇 가지 문제가 발생했습니다.

' 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:

엑셀로 데이터를 가져오는 방법은 여러 가지가 있습니다.쿼리 테이블(The_Barman에서 시연), SQL, Import Wizard 등

일반적으로 이 방법은 Import해야 하는 파일에 데이터가 얼마나 깔끔하게 표시되는지, 데이터가 어떻게 배치되어 있는지 정확하게 알고 있는지에 따라 달라집니다.예를 들어 빈 행, 혼합 데이터 유형, 병합된 셀 등이 있으면 악몽이 될 수 있습니다.

아래는 느린 'brute-force' 방식으로 파일을 먼저 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

가능하다.

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)

이제 다른 워크북과 마찬가지로 이 워크북을 탐색하고 행, 콜 또는 워크시트 전체를 복사할 수 있습니다.) 이것이 도움이 되기를 바랍니다.

vba 버전의 텍스트에서 Import를 사용하는 방법도 있습니다만, 지금 당장은 예가 없습니다.

Sub demo()
Dim FilePath As String
FilePath = "C:\Users\Tamil\Desktop\padding_values.csv"
Open "C:\Users\Tamil\Desktop\padding_values.csv" For Input As #1
row_number = 0
Do Until EOF(1)
Line Input #1, LineFromFile
LineItems = Split(LineFromFile, ",")
ActiveCell.Offset(row_number, 0).Value = LineItems(2)
ActiveCell.Offset(row_number, 1).Value = LineItems(1)
ActiveCell.Offset(row_number, 2).Value = LineItems(0)
row_number = row_number + 1
Loop
Close #1


End Sub

언급URL : https://stackoverflow.com/questions/12197274/is-there-a-way-to-import-data-from-csv-to-active-excel-sheet

반응형