2008-10-23 2 views

답변

0

csv 파일의 일괄 처리를 구문 분석하고 파일을 저장하기 위해 간단한 콘솔 응용 프로그램을 작성할 수 있습니다.
가장 쉬운 해결책은 아니지만 옵션 일 수 있습니다.

1

이 한 차원 배열로 파일을 얻을 것이다 빠르게

Open "myfile.csv" For Input As 1 
Dim Txt As String 
Txt = Input(LOF(1), 1) 
Close #1 
Dim V As Variant 
V = Split(Txt, ",") 

그런 다음 V는 하나의 열의 모든 항목을 포함, NB 첫 번째 항목 (0)

+0

필자는 vbNewLine을 사용하여 파일을 줄 바꿈하고 각 줄을 쉼표로 분리하는 것이 더 좋을 것이라고 생각합니다. 그렇게하면 각 필드를 V (행) (열)로 지정할 수 있습니다. 라인과 컬럼은 물론 제로 기반 일 것입니다. – bugmagnet

+1

또한 필드가 따옴표로 분리되거나 쉼표가 포함되어 있다고 가정합니다. – Graham

2

나는 조금 의아해 오전 V입니다 대부분의 Excel 버전은 문제없이 .csv 파일을 열 수 있습니다.

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

Do While strFile <> "" 
    Workbooks.Open Filename:=strPath & strFile 
    ActiveWorkbook.SaveAs Filename:=strPath & Mid(strFile, 1, InStr(strFile, ".") - 1) _ 
     & "Conv.xls", FileFormat:=xlNormal 

    strFile = Dir 
Loop 
0

당신은 또한

0

다음과 같이 내가 처음이었다 한 아이디어를 workbooks.opentext 사용할 수 있습니다. 세 가지 글로벌 배열이 데이터

Dog Names,Dog Ages,Collar Size 
Woof,3,4 
Bowser,2,5 
Ruffy,4.5,6 
Angel,1,7 
Demon,7,8 
Dog,9,2 

생성을 감안할 때, Dog_Names, Dog_AgesCollar_Size라고하고 CSV 파일의 데이터로 채 웁니다.

이 VBScript 비트는 해당 작업을 수행하고 결과를 표시합니다. x 서브 루틴의 wscript.echo에서 주석 표시를 제거하여 모든 문제가 발생하는지 확인하십시오.

Option Explicit 

Dim FSO 
Set FSO = CreateObject("Scripting.FileSystemObject") 

Dim oStream 
Dim sData 
Dim aData 

Set oStream = fso.OpenTextFile("data.csv") 
sData  = oStream.ReadAll 
aData  = Split(sData, vbNewLine) 

Dim sLine 
sLine = aData(0) 

Dim aContent 
aContent = Split(sLine, ",") 

Dim aNames() 
Dim nArrayCount 
nArrayCount = UBound(aContent) 
ReDim aNames(nArrayCount) 

Dim i 

For i = 0 To nArrayCount 
    aNames(i) = Replace(aContent(i), " ", "_") 
    x "dim " & aNames(i) & "()" 
Next 

For j = 0 To nArrayCount 
    x "redim " & aNames(j) & "(" & UBound(aData) - 1 & ")" 
Next 

Dim j 
Dim actual 
actual = 0 

For i = 1 To UBound(aData) 
    sLine = aData(i) 
    If sLine <> vbnullstring Then 
    actual = actual + 1 
    aContent = Split(sLine, ",") 
    For j = 0 To nArrayCount 
     x aNames(j) & "(" & i - 1 & ")=" & Chr(34) & aContent(j) & Chr(34) 
    Next 
    End If 
Next 

For j = 0 To nArrayCount 
    x "redim preserve " & aNames(j) & "(" & actual - 1 & ")" 
Next 

For i = 0 To actual - 1 
    For j = 0 To nArrayCount 
    x "wscript.echo aNames(" & j & ")," & aNames(j) & "(" & i & ")" 
    Next 
Next 

Sub x(s) 
    'wscript.echo s 
    executeglobal s 
End Sub 

결과는이 Excel에서 csv 파일을 열 때 얻을 다시 계산을 방지하는 또 다른 방법입니다이

>cscript "C:\Documents and Settings\Bruce\Desktop\datathing.vbs" 
Dog_Names Woof 
Dog_Ages 3 
Collar_Size 4 
Dog_Names Bowser 
Dog_Ages 2 
Collar_Size 5 
Dog_Names Ruffy 
Dog_Ages 4.5 
Collar_Size 6 
Dog_Names Angel 
Dog_Ages 1 
Collar_Size 7 
Dog_Names Demon 
Dog_Ages 7 
Collar_Size 8 
Dog_Names Dog 
Dog_Ages 9 
Collar_Size 2 
>Exit code: 0 Time: 0.338 
+0

부스트 - 내가 이해하는 것처럼 ExecuteGlobal (및 Execute)은 VBScript에서만 사용할 수 있지만 VBA에서는 사용할 수 없습니까? –

1

것 같습니다.

당신은 또한 아무도 실수로 사용되지 않도록, 시트를 숨길 수있는 시트의 객체

Function getCsv(fn) 
    Dim d, scrup As Boolean 
    scrup = Application.ScreenUpdating 
    Application.ScreenUpdating = False 
    With Me.QueryTables.Add(_ 
      Connection:="TEXT;" & fn, _ 
      Destination:=Me.Range("A1") _ 
     ) 
     .Name = "data" 
     .FieldNames = True 
     .RowNumbers = False 
     .FillAdjacentFormulas = False 
     .PreserveFormatting = True 
     .RefreshStyle = xlOverwriteCells 
     .SavePassword = False 
     .SaveData = True 
     .AdjustColumnWidth = False 
     .TextFilePromptOnRefresh = False 
     .TextFilePlatform = 850 
     .TextFileStartRow = 1 
     .TextFileParseType = xlDelimited 
     .TextFileTextQualifier = xlTextQualifierDoubleQuote 
     .TextFileCommaDelimiter = True 
     .Refresh BackgroundQuery:=False 
    End With 

    d = Me.Names(1).RefersToRange.Value 

    Me.Names(1).Delete 
    Me.UsedRange.Rows.Delete 

    Application.ScreenUpdating = scrup 
    getCsv = d 
End Function 

다음 코드를 통합 문서에 빈 시트를 추가하고 추가 할 수 있습니다. 안정성 문제가있을 수 있습니다 (예를 들어, 데이터 1, 데이터 2, ...), 그래서 그런 다음 당신은 약간 나 이름은 당신이 기능을 사용할 때마다 증가됩니다 있다는 것입니다 우려이

dim d 
d = getCsv("C:\temp\some.csv") 

한 가지처럼 사용할 수 있습니다 이 이름들이 어딘가에 저장되면.

관련 문제