.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
'programing' 카테고리의 다른 글
"ON UPDATE CASCADE" 사용 시기 (0) | 2023.04.28 |
---|---|
기존 repo를 새로운 다른 리모트 repo 서버에 푸시하시겠습니까? (0) | 2023.04.23 |
python에서 openpyxl을 사용하여 새로운 세포에 쓰는 방법 (0) | 2023.04.23 |
목록의 dicts에서 dict로/dict 목록 (0) | 2023.04.23 |
테이블에서 두 줄 사이의 간격? (0) | 2023.04.23 |