ฉันจะแปลงไฟล์ XLS เป็นไฟล์ CSV บนบรรทัดคำสั่งของ Windows ได้อย่างไร
เครื่องมี Microsoft Office 2000 ติดตั้งอยู่ ฉันเปิดให้ติดตั้ง OpenOffice หากไม่สามารถใช้ Microsoft Office ได้
ฉันจะแปลงไฟล์ XLS เป็นไฟล์ CSV บนบรรทัดคำสั่งของ Windows ได้อย่างไร
เครื่องมี Microsoft Office 2000 ติดตั้งอยู่ ฉันเปิดให้ติดตั้ง OpenOffice หากไม่สามารถใช้ Microsoft Office ได้
คำตอบ:
เปิด 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 ในเครื่องที่คุณใช้งานอยู่
oExcel.Workbooks.Open
บรรทัดด้วยดัชนีที่ต้องการของแผ่นงาน (เริ่มที่ 1): oBook.Worksheets(1).Activate
คำตอบ 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
การขยายขนาดเล็กบนสคริปต์ VB ที่น่ากลัวของ ScottF: ไฟล์แบตช์นี้จะวนซ้ำไฟล์. 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 เป็นอัตโนมัติได้อย่างไร
$Excel.Workbooks.Open
วิธีการ ไม่พบไฟล์ที่ระบุ ผมทำงานรอบนี้โดยใช้Get-Item
ไฟล์และท่อไปยังForEach-Object
ห่วง (สิ่งที่ฉันจะสิ้นสุดการทำในการดำเนินการครั้งสุดท้ายของฉันอยู่แล้ว) $Workbook
สำหรับสองสายที่เริ่มต้นด้วย
CD /D C:\ && DIR YOURDOC.csv /s
และทำ ปรากฎว่าไฟล์ถูกบันทึกลงใน My Documents ตามค่าเริ่มต้น ดังนั้นคุณต้องใส่ลงในสคริปต์มากขึ้นหากคุณต้องการบันทึกไฟล์ลงในโฟลเดอร์เดียวกับที่คุณกำลังทำงานอยู่ (ถ้านอกเหนือจากเอกสารของฉัน)
ฉันมีความต้องการที่จะแยกหลาย ๆ 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
นี่คือเวอร์ชันที่รองรับไฟล์หลายไฟล์ที่ลากและวางจาก 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
ทำไมไม่เขียนของคุณเอง?
ฉันเห็นจากโปรไฟล์ของคุณคุณมีประสบการณ์ C # /. NET เป็นอย่างน้อย ฉันจะสร้างแอปพลิเคชันคอนโซล Windows และใช้โปรแกรมอ่าน Excel ฟรีเพื่ออ่านในไฟล์ Excel ของคุณ ฉันใช้Excel Data Readerจาก CodePlex โดยไม่มีปัญหาใด ๆ (สิ่งหนึ่งที่ดี: โปรแกรมอ่านนี้ไม่จำเป็นต้องติดตั้ง Excel) คุณสามารถเรียกใช้แอปพลิเคชันคอนโซลของคุณจากบรรทัดคำสั่ง
หากคุณพบว่าตัวเองติดอยู่ที่นี่และฉันมั่นใจว่าคุณจะได้รับความช่วยเหลือ
คุณสามารถทำได้ด้วย 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 (ดูตัวอย่างในคู่มือผู้ใช้ )
มีตัวให้บริการข้อมูล Excel OLEDB ใน Windows คุณสามารถใช้สิ่งนี้เพื่อ 'แบบสอบถาม' แผ่นงาน Excel ผ่าน ADO.NET และเขียนผลลัพธ์ลงในไฟล์ CSV ต้องมีการเข้ารหัสเล็กน้อย แต่คุณไม่จำเป็นต้องติดตั้งอะไรในเครื่อง
จากสิ่งที่ Jon of All Trades ให้ไว้สิ่งต่อไปนี้ (~ n) ได้ลบปัญหาส่วนขยายคู่ที่น่ารำคาญ:
FOR /f "delims=" %%i IN ('DIR *.xlsx /b') DO ExcelToCSV.vbs "%%i" "%%~ni.csv"
ฉันลองใช้โซลูชัน ScottF VB และใช้งานได้จริง อย่างไรก็ตามฉันต้องการแปลงไฟล์ excel หลายแท็บ (สมุดงาน) เป็นไฟล์. csv ไฟล์เดียว
สิ่งนี้ไม่ได้ผลมีเพียงแท็บเดียว (แท็บที่ไฮไลต์เมื่อฉันเปิดผ่าน excel) เท่านั้นที่ถูกคัดลอก
มีใครทราบสคริปต์ที่สามารถแปลงไฟล์ excel หลายแท็บเป็นไฟล์. csv ไฟล์เดียวได้หรือไม่?
คำตอบของ Scott F คือคำตอบที่ดีที่สุดที่ฉันพบบนอินเทอร์เน็ต ฉันเพิ่มรหัสของเขาเพื่อให้ตรงกับความต้องการของฉัน ฉันเพิ่ม:
On Error Resume Next <- เพื่อบัญชีสำหรับไฟล์ xls ที่หายไปในการประมวลผลแบทช์ของฉันที่ด้านบน oBook.Application.Columns ("A: J") NumberFormat = "@" <- ก่อนบรรทัด SaveAs เพื่อให้แน่ใจว่าข้อมูลของฉันได้รับการจัดรูปแบบเป็นข้อความเพื่อป้องกันไม่ให้ excel ลบเลขศูนย์นำหน้าและกำจัดลูกน้ำในสตริงตัวเลขในข้อมูลของฉัน เช่น (1,200 ถึง 1200) ควรปรับช่วงคอลัมน์ให้ตรงกับความต้องการของคุณ (A: J)
ฉันยังลบเสียงสะท้อน "เสร็จสิ้น" เพื่อให้ไม่โต้ตอบ
จากนั้นฉันเพิ่มสคริปต์ลงในไฟล์แบตช์ cmd สำหรับการประมวลผลข้อมูลอัตโนมัติเป็นรายชั่วโมงผ่านงาน
คำตอบทั้งหมดนี้ช่วยให้ฉันสร้างสคริปต์ต่อไปนี้ซึ่งจะแปลงไฟล์ 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
:: สำหรับ 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
สร้างไฟล์ 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" เสร็จแล้ว