2012-05-29 2 views
3

많은 파일이 csv이고 필요한 파일은 .xls입니다. 매크로를 사용하여 일괄 변환을 실행하거나 다른 언어로 가장 잘 수행 할 수 있습니까?매크로를 사용하여 csv를 xls로 일괄 변환 할 수 있습니까?

이 코드 http://www.ozgrid.com/forum/showthread.php?t=71409&p=369573#post369573을 사용하여 내 디렉토리를 참조했지만 각 파일을 열고 저장하는 명령이 확실하지 않습니다. 여기에 내가 가진 무엇 :

Sub batchconvertcsvxls() 
    Dim wb As Workbook 
    Dim CSVCount As Integer 
    Dim myVar As String 

    myVar = FileList("C:\Documents and Settings\alistairw\My Documents\csvxlstest") 
    For i = LBound(myVar) To UBound(myVar) 

     With wb 

      Application.Workbooks.OpenText 'How do I reference the myvar string ? 
      wb.SaveAs '.... 

     End With 

    Next 
End Sub 

Function FileList(fldr As String, Optional fltr As String = "*.*") As Variant 
    Dim sTemp As String, sHldr As String 
    If Right$(fldr, 1) <> "\" Then fldr = fldr & "\" 
    sTemp = Dir(fldr & fltr) 
    If sTemp = "" Then 
     FileList = Split("No files found", "|") 'ensures an array is returned 
     Exit Function 
    End If 
    Do 
     sHldr = Dir 
     If sHldr = "" Then Exit Do 
     sTemp = sTemp & "|" & sHldr 
    Loop 
    FileList = Split(sTemp, "|") 
End Function 

편집 : 파일이 많은 코드의 적은 라인이 당신이 원하는 무엇을 받아야에서 CSV

+1

흥미로운 링크 : http://www.softinterface.com/Convert-XLS % 5CFeatures % 5CConvert-CSV-To-XLS.htm Google을 검색하면 이미이 작업을 수행하고있는 다른 소프트웨어가 있습니다. 그러나 운동으로 이것을하는 경우 링크를 무시하십시오. –

답변

3

로 포맷 .txt 인 파일입니다. 그러나 매번 통합 문서를 열어 저장하고 닫을 수 있기 때문에이 방법을 사용하는 것이 가장 빠르지 않을 수 있습니다. 나는 더 빠른 길을 찾겠지만, 머리 꼭대기에서 그 방법을 잊어 버린다.

Sub batchconvertcsvxls() 

Dim wb As Workbook 
Dim strFile As String, strDir As String 

strDir = "C:\" 
strFile = Dir(strDir & "*.csv") 

Do While strFile <> "" 

    Set wb = Workbooks.Open(strDir & strFile) 
    With wb 
     .SaveAs Replace(wb.FullName, ".csv", ".xls"), 50 'UPDATE: 
     .Close True 
    End With 
    Set wb = Nothing 
Loop 

End Sub 

는 ** UPDATE ** 당신은 .xls 파일에 대한 적절한 화일 형식 열거 필요합니다. 나는 그것의 50이라고 생각하지만, 그렇지 않다면 여기 Excel File Type Enumeration을 확인할 수 있습니다.

+0

죄송합니다. 나는 csv로 포맷 된 .txt 파일이라고해야합니다. 원래의 질문을 수정했습니다. –

+0

모두 좋습니다. 위의 .csv에 대한 참조를 .txt로 변경하십시오. –

+0

@AlistairWeir -> "루프"앞에이 줄을 추가하십시오. strFile = Dir –

2

Scott Holtzman 코드는 거의 나를 위해 해냈습니다.

  1. 그는 우리의 루프를 다음 파일로 계속 만드는 행을 추가하는 것을 잊어 버렸습니다. 루프 전에 마지막 줄은 예상대로

    strFile = Dir

  2. 가 Workbooks.Open 방법은 내 CSV 파일을 읽어 보지 않았 읽어야합니다 (전체 라인은 첫 번째 셀의 텍스트로 끝났다). 내가 매개 변수 Local:=True를 추가 할 때 그 일 :

    Set wb = Workbooks.Open(Filename:=strDir & strFile, Local:=True)

5

을 스콧 Holtzman와 'ExcelFreak'에 의해 주어진 코드를 결합함으로써, 변환은 아주 잘 작동합니다.

Sub CSV_to_XLS() 

Dim wb As Workbook 
Dim strFile As String, strDir As String 

strDir = "U:\path\" 
strFile = Dir(strDir & "*.csv") 

Do While strFile <> "" 

    Set wb = Workbooks.Open(Filename:=strDir & strFile, Local:=True) 
    wb.SaveAs Replace(wb.FullName, ".csv", ".xls"), 50 'UPDATE: 
    wb.Close True 

    Set wb = Nothing 
    strFile = Dir 
Loop 

End Sub 

경고 매번 변환 된 .xls 파일을 던졌습니다 열기 :

지정된 것보다 "당신은 '이름'을 열려고하는 파일이 다른 형식으로는 마지막 코드는 다음과 같이 보입니다 파일을 열기 전에 파일이 손상되지 않았고 신뢰할 수있는 출처인지 확인하십시오. 지금 파일을 열시겠습니까? "

예를 클릭하면 .xls 파일이 열립니다.

이 경고 메시지를 제거하는 방법이 있습니까? .xls 파일을 열 때마다 Excel에서 경고 메시지를 표시합니다.

+0

wb.SaveAs (wb.FullName, ".csv", ".xls"), 56 '업데이트 : 은 97-2003을 Excel로 저장합니다. 형식을 지정하고 경고를 없애십시오 –

+0

또한 'wb.SaveAs Replace (wb.FullName, ".csv", ".xlsx"), 51'UPDATE : '를 Excel 2007 형식으로 저장하고 파일을 열 때 경고. –

0

적어도 Excel 2013에서는 제대로 작동합니다. filetype 태그 대신 FileFormat : = xlExcel8 매개 변수를 사용하면 보안 문자없이 열리는 파일이 만들어집니다.

서브 CSV_to_XLS() 문자열로서 통합 어둡게 strFile, strDir로서

어둡게 WB로서 문자열

strDir = "C : \ 임시 \" strFile = 디렉터리 (strDir & "* .CSV")

마 strFile <> ""

Set wb = Workbooks.Open(Filename:=strDir & strFile, Local:=True) 
wb.SaveAs Replace(wb.FullName, ".csv", ".xls"), FileFormat:=xlExcel8 
wb.Close True 

Set wb = Nothing 
strFile = Dir 

루프 동안

End Sub

0

이것은 좋은 질문이었고 인터넷에서 몇 가지 답변을 발견했습니다. 아주 작은 변화 만 (이미 출판 된 코드를 편집 할 수 없음) 조금 더 잘 작동하도록 만들 수 있습니다.

Sub CSV_to_XLSX() 

Dim wb As Workbook 
Dim strFile As String, strDir As String 

strDir = "C:\Users\acer\OneDrive\Doctorado\Study 1\data\Retest Bkp\Day 1\Sart\" 
strFile = Dir(strDir & "*.csv") 

Do While strFile <> "" 

    Set wb = Workbooks.Open(Filename:=strDir & strFile, Local:=True) 
    With wb 
     .SaveAs Replace(wb.FullName, ".csv", ".xlsx"), 51 
     .Close True 
    End With 
    Set wb = Nothing 
    strFile = Dir 
Loop 

End Sub 
관련 문제