แปลง XLS เป็น CSV ในบรรทัดคำสั่ง


104

ฉันจะแปลงไฟล์ XLS เป็นไฟล์ CSV บนบรรทัดคำสั่งของ Windows ได้อย่างไร

เครื่องมี Microsoft Office 2000 ติดตั้งอยู่ ฉันเปิดให้ติดตั้ง OpenOffice หากไม่สามารถใช้ Microsoft Office ได้

คำตอบ:


125

เปิด Notepad สร้างไฟล์ชื่อ 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 ในเครื่องที่คุณใช้งานอยู่


20
ในกรณีที่ใครสงสัยพารามิเตอร์ 6 ในฟังก์ชัน oBook.SaveAs คือค่าคงที่สำหรับรูปแบบ CSV
ScottF

ใช้งานได้ดีและไม่เพียง แต่สำหรับไฟล์ xls เท่านั้น แต่ยังรวมถึง xlsx ด้วย ตามที่แอนดรูว์กล่าวไว้ว่าพา ธ ไฟล์ต้องเป็นค่าสัมบูรณ์หรือในไดเร็กทอรี "data" ของผู้ใช้ (ฉันไม่แน่ใจว่าชื่อภาษาอังกฤษคืออะไร) ฉันยังไม่ทราบวิธีแก้ปัญหานั้นฉันไม่ได้ทำ VBScript มากนัก! :)
plang

3
ฉันได้โพสต์ไว้ด้านล่างเวอร์ชันที่แก้ไขเล็กน้อยซึ่งจัดการเส้นทางไฟล์ได้ดีขึ้น ขอบคุณ ScottF!
plang

7
รหัสจะแปลงเฉพาะแผ่นงานที่ใช้งานอยู่ หากต้องการเลือกแผ่นงานอื่นให้เพิ่มบรรทัดต่อไปนี้หลังoExcel.Workbooks.Openบรรทัดด้วยดัชนีที่ต้องการของแผ่นงาน (เริ่มที่ 1): oBook.Worksheets(1).Activate
humbads

1
ควรสังเกตว่าฟังก์ชันนี้ไม่เพียง แต่ใน xls หรือ xlsx เท่านั้น แต่ยังใช้กับไฟล์ใด ๆ ที่ Excel สามารถเปิดได้
user1318135

81

คำตอบ 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

ฉันได้เปลี่ยนชื่อสคริปต์ ExcelToCsv แล้วเนื่องจากสคริปต์นี้ไม่ จำกัด เฉพาะ xls เลย xlsx ใช้งานได้ดีอย่างที่เราคาดหวัง

ทดสอบกับ Office 2010


ฉันใช้สิ่งนี้ (โดยมีการดัดแปลงเล็กน้อย) เพื่อแปลงจาก XML เป็น XLS อย่างไรก็ตามฉันไม่ต้องการให้มีกล่องข้อความเตือนความเข้ากันได้จาก Excel ในระหว่างการแปลงนี้ คุณรู้ไหมว่าฉันจะปิดคำเตือนนี้ได้อย่างไร
jpnavarini

มีวิธีใดในการบันทึกไฟล์นี้เป็น Unicode char set หรือไม่?
rjv

2
ฉันใส่คำตอบนี้พร้อมกับคำตอบของ @ user565869 ในส่วนสำคัญพร้อมคำแนะนำง่ายๆ ดู: สคริปต์การแปลงไฟล์ Excel เป็น CSV
10GritSandpaper

1
เป็นเรื่องที่ดีในการรวบรวม @ 10GritSandpaper
amrrs

มีวิธีใช้; เป็นตัวคั่นแทน,? ฉันลองเปลี่ยน oBook.SaveAs dest_file, csv_format, Local: = True แต่ฉันได้รับข้อผิดพลาดที่คาดว่าจะมีคำสั่งหลังจาก: เมื่อฉันเพิ่ม "Local: = True" ไม่มีข้อผิดพลาดอีก แต่ยังคงใช้แทน; เป็นตัวคั่น บางทีคุณอาจช่วยฉันได้
suckerp

27

การขยายขนาดเล็กบนสคริปต์ VB ที่น่ากลัวของ ScottF: ไฟล์แบตช์นี้จะวนซ้ำไฟล์. xlsx ในไดเร็กทอรีและถ่ายโอนข้อมูลลงในไฟล์ * .csv:

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

หมายเหตุ: คุณสามารถเปลี่ยนนามสกุล. xlsx เป็น. xls และชื่อของสคริปต์ ExcelToCSV เป็น XlsToCsv


1
@Rieaux: เกี่ยวกับความคิดเห็นของคุณเป็นการแก้ไข: หากสิ่งนี้ทำให้ไฟล์มีนามสกุลสองเท่าไฟล์แบตช์แบบง่ายที่สองสามารถเปลี่ยนชื่อได้ สิ่งนี้กำลังลอยไปสู่คำถามใหม่แม้ว่า; โปรดลองดูและหากคุณไม่สามารถดำเนินการได้ให้โพสต์คำถามใหม่ที่นี่ใน SU

ระบบอัตโนมัตินี้ช่วยชีวิตฉัน :) ขอบคุณ
Pushker Yadav

1
ฉันใส่คำตอบนี้พร้อมกับคำตอบของ @plang ใน Gist พร้อมคำแนะนำง่ายๆ ดู: สคริปต์การแปลงไฟล์ Excel เป็น CSV
10GritSandpaper

@ 10GritSandpaper โดยใช้ Excel 2007 สคริปต์ในลิงก์ของคุณใช้ไม่ได้สำหรับฉัน
Boris_yo

คุณสามารถเปลี่ยน "%% i.csv" เป็น "%% ~ ni.csv" เพื่อลบนามสกุลไฟล์ ".xls" ในไฟล์ csv
Shaohua Li

18

แล้ว 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 เป็นอัตโนมัติได้อย่างไร


นี่เป็นแนวทางที่ดี น่าเสียดายที่ฉันไม่สามารถดำเนินการต่อไปได้ ฉันไม่คุ้นเคยกับ PowerShell ดังนั้นเมื่อฉันพบข้อผิดพลาดฉันไม่รู้ว่าต้องทำอย่างไร ฉันไม่พบโซลูชัน PowerShell-specifc: support.microsoft.com/kb/320369
Joel

นี่คือเคล็ดลับสำหรับ powershell และ excel, blogs.technet.com/heyscriptingguy/archive/2006/09/08/…
คุณ

ฉันได้ทำการทดสอบสิ่งนี้และพบปัญหาเช่นกัน สิ่งหนึ่งที่ฉันพบคือความยากลำบากกับ$Excel.Workbooks.Openวิธีการ ไม่พบไฟล์ที่ระบุ ผมทำงานรอบนี้โดยใช้Get-Itemไฟล์และท่อไปยังForEach-Objectห่วง (สิ่งที่ฉันจะสิ้นสุดการทำในการดำเนินการครั้งสุดท้ายของฉันอยู่แล้ว) $Workbookสำหรับสองสายที่เริ่มต้นด้วย
Iszi

นั่นช่วยแก้ปัญหานั้นได้ แต่ฉันไม่พบผลลัพธ์ "YOURDOC.csv" - มันไม่ได้อยู่ในโฟลเดอร์เดียวกับ "YOUDOC.XLS" ฉันเดินกลับไปที่เก่าและเชื่อถือ CMD CD /D C:\ && DIR YOURDOC.csv /sและทำ ปรากฎว่าไฟล์ถูกบันทึกลงใน My Documents ตามค่าเริ่มต้น ดังนั้นคุณต้องใส่ลงในสคริปต์มากขึ้นหากคุณต้องการบันทึกไฟล์ลงในโฟลเดอร์เดียวกับที่คุณกำลังทำงานอยู่ (ถ้านอกเหนือจากเอกสารของฉัน)
Iszi

8

ฉันมีความต้องการที่จะแยกหลาย ๆ cvs จากแผ่นงานที่แตกต่างกันดังนั้นนี่คือรหัส 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

8

นี่คือเวอร์ชันที่รองรับไฟล์หลายไฟล์ที่ลากและวางจาก Windows จากผลงานข้างต้นโดย

Christian Lemer
plang
ScottF

เปิด Notepad สร้างไฟล์ชื่อ 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

1
มีวิธีการเข้ารหัส UTF-8 หรือไม่?
StuBob

วิธีข้ามส่วนหัวการเขียนในไฟล์ csv เป้าหมาย ฉันไม่เข้าใจสคริปต์ด้านบน แต่ฉันใช้มันในระบบอัตโนมัติของฉัน ขอบคุณ.
TharunRaja

@TharunRaja สคริปต์จะเปิดไฟล์ใน excel จากนั้นทำการ "บันทึกเป็น" เป็น CSV เช่นเดียวกับที่คุณทำด้วยมือยกเว้นจะซ่อนไว้ในพื้นหลัง เนื่องจากสคริปต์ไม่ได้ทำการแปลงและคุณกำลังดำเนินการโดยอัตโนมัติข้อเสนอแนะของฉันคือเรียกสคริปต์ที่สองในไฟล์ csv ผลลัพธ์นี้ส่งข้อความถึงฉันหากคุณต้องการความช่วยเหลือในการสร้างสคริปต์ที่ตัดบรรทัดแรกของ a ไฟล์ที่คุณส่งผ่าน
Chris Rudd

ตัวฉันเองฉันต้องการเวอร์ชันที่มีประสิทธิภาพมากกว่าใน powershell ที่สามารถประมวลผลวันที่ได้อย่างถูกต้องสามารถจัดการส่วนหัวที่ไม่ได้อยู่ในบรรทัดแรกและสิ่งอื่น ๆ อีกสองสามอย่าง (จริงๆแล้วมันจะแยกวิเคราะห์เซลล์แต่ละเซลล์แทนที่จะเชื่อถือ excel) ถ้ามีคนแสดงความต้องการฉันจะโพสต์ แต่เนื่องจากสิ่งนี้ได้รับคำตอบเป็นหลักและเรากำลังเปลี่ยนภาษาฉันไม่ต้องการโพสต์ซ้ำ
Chris Rudd

5

ทำไมไม่เขียนของคุณเอง?

ฉันเห็นจากโปรไฟล์ของคุณคุณมีประสบการณ์ C # /. NET เป็นอย่างน้อย ฉันจะสร้างแอปพลิเคชันคอนโซล Windows และใช้โปรแกรมอ่าน Excel ฟรีเพื่ออ่านในไฟล์ Excel ของคุณ ฉันใช้Excel Data Readerจาก CodePlex โดยไม่มีปัญหาใด ๆ (สิ่งหนึ่งที่ดี: โปรแกรมอ่านนี้ไม่จำเป็นต้องติดตั้ง Excel) คุณสามารถเรียกใช้แอปพลิเคชันคอนโซลของคุณจากบรรทัดคำสั่ง

หากคุณพบว่าตัวเองติดอยู่ที่นี่และฉันมั่นใจว่าคุณจะได้รับความช่วยเหลือ


ที่จริงฉันไม่เคยเขียน C # เลย แต่ฉันคิดว่าฉันจะให้มันแตกด้วย Excel Data Reader
Joel

3
คุณไม่คิดว่าจะมากไปหน่อย กลิ่นของ NIH
คุณบอย

1
ฉันไม่คิดว่าโปรแกรมอ่านข้อมูล Excel เป็น NIH ก่อนอื่นคนอื่นเขียนมัน ประการที่สองมันแก้ปัญหาได้ดีกว่า Excel แบบเต็ม
Justin Dearing

4

คุณสามารถทำได้ด้วย Alacon - ยูทิลิตี้บรรทัดคำสั่งสำหรับฐานข้อมูลAlasql ใช้งานได้กับ Node.js ดังนั้นคุณต้องติดตั้งNode.jsแล้วเลือกแพ็คเกจAlasql

ในการแปลงไฟล์ Excel เป็น CVS (ot TSV) คุณสามารถป้อน:

> node alacon "SELECT * INTO CSV('mydata.csv', {headers:true}) FROM XLS('mydata.xls', {headers:true})"

โดยค่าเริ่มต้น Alasql จะแปลงข้อมูลจาก "Sheet1" แต่คุณสามารถเปลี่ยนแปลงได้ด้วยพารามิเตอร์:

{headers:false, sheetid: 'Sheet2', range: 'A1:C100'}

Alacon รองรับการแปลงประเภทอื่น ๆ (CSV, TSV, TXT, XLSX, XLS) และโครงสร้างภาษา SQL (ดูตัวอย่างในคู่มือผู้ใช้ )


1
ว้าว! Alasql มีพลังมากจริงๆ
Lukasz Wiktor

หากคุณติดตั้ง AlaSQL ทั่วโลก (npm ติดตั้ง alasql -g) คุณสามารถใช้เพียง> alasql "SELECT ... INTO CSV (... ) FROM XLS (... )"
agershun

2

มีตัวให้บริการข้อมูล Excel OLEDB ใน Windows คุณสามารถใช้สิ่งนี้เพื่อ 'แบบสอบถาม' แผ่นงาน Excel ผ่าน ADO.NET และเขียนผลลัพธ์ลงในไฟล์ CSV ต้องมีการเข้ารหัสเล็กน้อย แต่คุณไม่จำเป็นต้องติดตั้งอะไรในเครื่อง


คำตอบต่ำกว่า ทำไมทุกคนถึงติดตั้งไฟล์. DLL ของ บริษัท อื่นในเมื่อ Windows มีฟังก์ชันการทำงานในตัว?
Geoff Griswald

2

จากสิ่งที่ Jon of All Trades ให้ไว้สิ่งต่อไปนี้ (~ n) ได้ลบปัญหาส่วนขยายคู่ที่น่ารำคาญ: FOR /f "delims=" %%i IN ('DIR *.xlsx /b') DO ExcelToCSV.vbs "%%i" "%%~ni.csv"


1

ฉันลองใช้โซลูชัน ScottF VB และใช้งานได้จริง อย่างไรก็ตามฉันต้องการแปลงไฟล์ excel หลายแท็บ (สมุดงาน) เป็นไฟล์. csv ไฟล์เดียว

สิ่งนี้ไม่ได้ผลมีเพียงแท็บเดียว (แท็บที่ไฮไลต์เมื่อฉันเปิดผ่าน excel) เท่านั้นที่ถูกคัดลอก

มีใครทราบสคริปต์ที่สามารถแปลงไฟล์ excel หลายแท็บเป็นไฟล์. csv ไฟล์เดียวได้หรือไม่?


0

คำตอบของ Scott F คือคำตอบที่ดีที่สุดที่ฉันพบบนอินเทอร์เน็ต ฉันเพิ่มรหัสของเขาเพื่อให้ตรงกับความต้องการของฉัน ฉันเพิ่ม:

On Error Resume Next <- เพื่อบัญชีสำหรับไฟล์ xls ที่หายไปในการประมวลผลแบทช์ของฉันที่ด้านบน oBook.Application.Columns ("A: J") NumberFormat = "@" <- ก่อนบรรทัด SaveAs เพื่อให้แน่ใจว่าข้อมูลของฉันได้รับการจัดรูปแบบเป็นข้อความเพื่อป้องกันไม่ให้ excel ลบเลขศูนย์นำหน้าและกำจัดลูกน้ำในสตริงตัวเลขในข้อมูลของฉัน เช่น (1,200 ถึง 1200) ควรปรับช่วงคอลัมน์ให้ตรงกับความต้องการของคุณ (A: J)

ฉันยังลบเสียงสะท้อน "เสร็จสิ้น" เพื่อให้ไม่โต้ตอบ

จากนั้นฉันเพิ่มสคริปต์ลงในไฟล์แบตช์ cmd สำหรับการประมวลผลข้อมูลอัตโนมัติเป็นรายชั่วโมงผ่านงาน


2
ฉันคิดว่าคุณควรพิจารณาโพสต์โค้ดเวอร์ชันสุดท้ายพร้อมความคิดเห็น
ภาษาเริ่มต้น

0

คำตอบทั้งหมดนี้ช่วยให้ฉันสร้างสคริปต์ต่อไปนี้ซึ่งจะแปลงไฟล์ XLS * เป็น CSV โดยอัตโนมัติและในทางกลับกันโดยการวางไฟล์อย่างน้อยหนึ่งไฟล์บนสคริปต์ (หรือผ่านทางบรรทัดคำสั่ง) ขออภัยสำหรับการจัดรูปแบบที่ไม่เหมาะสม

' /programming/1858195/convert-xls-to-csv-on-command-line
' https://gist.github.com/tonyerskine/77250575b166bec997f33a679a0dfbe4

' https://stackoverflow.com/a/36804963/1037948
'* Global Settings and Variables
Set args = Wscript.Arguments

For Each sFilename In args
    iErr = ConvertExcelFormat(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 ConvertExcelFormat(srcFile)

    if IsEmpty(srcFile) OR srcFile = "" Then
        WScript.Echo "Error! Please specify at least one source path. Usage: " & WScript.ScriptName & " SourcePath.xls*|csv"
        ConvertExcelFormat = -1
        Exit Function
        'Wscript.Quit
    End If

    Set objFSO = CreateObject("Scripting.FileSystemObject")

    srcExt = objFSO.GetExtensionName(srcFile)

    ' the 6 is the constant for 'CSV' format, 51 is for 'xlsx'
    ' https://msdn.microsoft.com/en-us/vba/excel-vba/articles/xlfileformat-enumeration-excel
    ' https://www.rondebruin.nl/mac/mac020.htm
    Dim outputFormat, srcDest

    If LCase(Mid(srcExt, 1, 2)) = "xl" Then
        outputFormat = 6
        srcDest = "csv"
    Else
        outputFormat = 51
        srcDest = "xlsx"
    End If

    'srcFile = objFSO.GetAbsolutePathName(Wscript.Arguments.Item(0))
    srcFile = objFSO.GetAbsolutePathName(srcFile)
    destFile = Replace(srcFile, srcExt, srcDest)

    Dim oExcel
    Set oExcel = CreateObject("Excel.Application")
    Dim oBook
    Set oBook = oExcel.Workbooks.Open(srcFile)
    ' preserve formatting? https://stackoverflow.com/a/8658845/1037948
    'oBook.Application.Columns("A:J").NumberFormat = "@"
    oBook.SaveAs destFile, outputFormat
    oBook.Close False
    oExcel.Quit
    WScript.Echo "Conversion complete of '" & srcFile & "' to '" & objFSO.GetFileName(destFile) & "'"

End Function

0

:: สำหรับ UTF-8 ใช้งานได้กับ Microsoft Office 2016 ขึ้นไป!

ลองใช้รหัสนี้:

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 = 62

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

0

สร้างไฟล์ TXT บนเดสก์ท็อปของคุณชื่อ "xls2csv.vbs" และวางโค้ด:

Dim vExcel
Dim vCSV
Set vExcel = CreateObject("Excel.Application")
Set vCSV = vExcel.Workbooks.Open(Wscript.Arguments.Item(0))
vCSV.SaveAs WScript.Arguments.Item(0) & ".csv", 6
vCSV.Close False
vExcel.Quit

ลากไฟล์ XLS ไปที่ไฟล์ (เช่น "test.xls") มันจะสร้างไฟล์ CSV ที่แปลงแล้วชื่อ "test.xls.csv" จากนั้นเปลี่ยนชื่อเป็น "test.csv" เสร็จแล้ว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.