[windows] 명령 줄에서 XLS를 CSV로 변환

Windows 명령 줄에서 XLS 파일을 CSV 파일로 어떻게 변환 할 수 있습니까?

컴퓨터에 Microsoft Office 2000이 설치되어 있습니다. Microsoft Office를 사용할 수없는 경우 OpenOffice를 설치할 수 있습니다.



답변

메모장을 열고 XlsToCsv.vbs라는 파일을 만들어 다음 위치에 붙여 넣습니다.

if WScript.Arguments.Count < 2 Then
    WScript.Echo "Error! Please specify the source path and the destination. Usage: XlsToCsv SourcePath.xls Destination.csv"
    Wscript.Quit
End If
Dim oExcel
Set oExcel = CreateObject("Excel.Application")
Dim oBook
Set oBook = oExcel.Workbooks.Open(Wscript.Arguments.Item(0))
oBook.SaveAs WScript.Arguments.Item(1), 6
oBook.Close False
oExcel.Quit
WScript.Echo "Done"

그런 다음 명령 줄에서 .vbs 파일을 저장 한 폴더로 이동하여 다음을 실행합니다.

XlsToCsv.vbs [sourcexlsFile].xls [destinationcsvfile].csv

그래도 사용중인 컴퓨터에 Excel이 설치되어 있어야합니다.


답변

절대 파일 경로가 필요하지 않은 약간 수정 된 ScottF 답변 버전 :

if WScript.Arguments.Count < 2 Then
    WScript.Echo "Please specify the source and the destination files. Usage: ExcelToCsv <xls/xlsx source file> <csv destination file>"
    Wscript.Quit
End If

csv_format = 6

Set objFSO = CreateObject("Scripting.FileSystemObject")

src_file = objFSO.GetAbsolutePathName(Wscript.Arguments.Item(0))
dest_file = objFSO.GetAbsolutePathName(WScript.Arguments.Item(1))

Dim oExcel
Set oExcel = CreateObject("Excel.Application")

Dim oBook
Set oBook = oExcel.Workbooks.Open(src_file)

oBook.SaveAs dest_file, csv_format

oBook.Close False
oExcel.Quit

이 스크립트는 xls에만 국한되지 않으므로 ExcelToCsv 스크립트의 이름을 변경했습니다. xlsx 예상대로 잘 작동합니다.

Office 2010으로 테스트되었습니다.


답변

ScottF의 멋진 VB 스크립트에 대한 작은 확장 :이 배치 파일은 디렉토리의 .xlsx 파일을 반복하여 * .csv 파일로 덤프합니다.

FOR /f "delims=" %%i IN ('DIR *.xlsx /b') DO ExcelToCSV.vbs "%%i" "%%i.csv"

참고 : 확장자 .xlsx를 .xls로 변경하고 스크립트 ExcelToCSV의 이름을 XlsToCsv로 변경할 수 있습니다.


답변

PowerShell은 어떻습니까?

코드는 다음과 같아야하지만 테스트되지는 않았습니다.

$xlCSV = 6
$Excel = New-Object -Com Excel.Application
$Excel.visible = $False
$Excel.displayalerts=$False
$WorkBook = $Excel.Workbooks.Open("YOUDOC.XLS")
$Workbook.SaveAs("YOURDOC.csv",$xlCSV)
$Excel.quit()

사용 방법을 설명하는 게시물입니다.

Windows PowerShell을 사용하여 Microsoft Excel을 자동화하려면 어떻게해야합니까?


답변

다른 워크 시트에서 여러 cv를 추출해야했기 때문에 워크 시트 이름을 지정할 수있는 수정 된 버전의 plang 코드가 있습니다.

if WScript.Arguments.Count < 3 Then
    WScript.Echo "Please specify the sheet, the source, the destination files. Usage: ExcelToCsv <sheetName> <xls/xlsx source file> <csv destination file>"
    Wscript.Quit
End If

csv_format = 6

Set objFSO = CreateObject("Scripting.FileSystemObject")

src_file = objFSO.GetAbsolutePathName(Wscript.Arguments.Item(1))
dest_file = objFSO.GetAbsolutePathName(WScript.Arguments.Item(2))

Dim oExcel
Set oExcel = CreateObject("Excel.Application")

Dim oBook
Set oBook = oExcel.Workbooks.Open(src_file)

oBook.Sheets(WScript.Arguments.Item(0)).Select
oBook.SaveAs dest_file, csv_format

oBook.Close False
oExcel.Quit


답변

다음은 창에서 여러 파일을 끌어서 놓을 수있는 버전입니다. 위의 작품을 바탕으로

Christian Lemer
plang
ScottF

메모장을 열고 XlsToCsv.vbs라는 파일을 만들어 다음 위치에 붙여 넣습니다.

'* Usage: Drop .xl* files on me to export each sheet as CSV

'* Global Settings and Variables
Dim gSkip
Set args = Wscript.Arguments

For Each sFilename In args
    iErr = ExportExcelFileToCSV(sFilename)
    ' 0 for normal success
    ' 404 for file not found
    ' 10 for file skipped (or user abort if script returns 10)
Next

WScript.Quit(0)

Function ExportExcelFileToCSV(sFilename)
    '* Settings
    Dim oExcel, oFSO, oExcelFile
    Set oExcel = CreateObject("Excel.Application")
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    iCSV_Format = 6

    '* Set Up
    sExtension = oFSO.GetExtensionName(sFilename)
    if sExtension = "" then
        ExportExcelFileToCSV = 404
        Exit Function
    end if
    sTest = Mid(sExtension,1,2) '* first 2 letters of the extension, vb's missing a Like operator
    if not (sTest =  "xl") then
        if (PromptForSkip(sFilename,oExcel)) then
            ExportExcelFileToCSV = 10
            Exit Function
        end if
    End If
    sAbsoluteSource = oFSO.GetAbsolutePathName(sFilename)
    sAbsoluteDestination = Replace(sAbsoluteSource,sExtension,"{sheet}.csv")

    '* Do Work
    Set oExcelFile = oExcel.Workbooks.Open(sAbsoluteSource)
    For Each oSheet in oExcelFile.Sheets
        sThisDestination = Replace(sAbsoluteDestination,"{sheet}",oSheet.Name)
        oExcelFile.Sheets(oSheet.Name).Select
        oExcelFile.SaveAs sThisDestination, iCSV_Format
    Next

    '* Take Down
    oExcelFile.Close False
    oExcel.Quit

    ExportExcelFileToCSV = 0
    Exit Function
End Function

Function PromptForSkip(sFilename,oExcel)
    if not (VarType(gSkip) = vbEmpty) then
        PromptForSkip = gSkip
        Exit Function
    end if

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

    sPrompt = vbCRLF & _
        "A filename was received that doesn't appear to be an Excel Document." & vbCRLF & _
        "Do you want to skip this and all other unrecognized files?  (Will only prompt this once)" & vbCRLF & _
        "" & vbCRLF & _
        "Yes    - Will skip all further files that don't have a .xl* extension" & vbCRLF & _
        "No     - Will pass the file to excel regardless of extension" & vbCRLF & _
        "Cancel - Abort any further conversions and exit this script" & vbCRLF & _
        "" & vbCRLF & _
        "The unrecognized file was:" & vbCRLF & _
        sFilename & vbCRLF & _
        "" & vbCRLF & _
        "The path returned by the system was:" & vbCRLF & _
        oFSO.GetAbsolutePathName(sFilename) & vbCRLF

    sTitle = "Unrecognized File Type Encountered"

    sResponse =  MsgBox (sPrompt,vbYesNoCancel,sTitle)
    Select Case sResponse
    Case vbYes
        gSkip = True
    Case vbNo
        gSkip = False
    Case vbCancel
        oExcel.Quit
        WScript.Quit(10)    '*  10 Is the error code I use to indicate there was a user abort (1 because wasn't successful, + 0 because the user chose to exit)
    End Select

    PromptForSkip = gSkip
    Exit Function
End Function


답변

직접 작성해 보지 않겠습니까?

귀하의 프로필에서 최소한 C # /. NET 경험이있는 것으로 보입니다. Windows 콘솔 응용 프로그램을 만들고 무료 Excel 리더를 사용하여 Excel 파일을 읽습니다. CodePlex에서 제공 하는 Excel 데이터 리더 를 아무 문제없이 사용했습니다 (한 가지 좋은 점 :이 리더는 Excel을 설치할 필요가 없습니다). 명령 줄에서 콘솔 애플리케이션을 호출 할 수 있습니다.

여기에 게시 된 게시물을 발견하면 도움을받을 수있을 것입니다.