Jawaban:
Buka Notepad, buat file bernama XlsToCsv.vbs dan tempel ini di:
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"
Kemudian dari baris perintah, buka folder tempat Anda menyimpan file .vbs dan jalankan:
XlsToCsv.vbs [sourcexlsFile].xls [destinationcsvfile].csv
Ini membutuhkan Excel untuk diinstal pada mesin yang Anda gunakan.
oExcel.Workbooks.Open
baris dengan indeks lembar kerja yang diinginkan (dimulai pada 1): oBook.Worksheets(1).Activate
Versi jawaban ScottF yang sedikit dimodifikasi, yang tidak memerlukan jalur file absolut:
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
Saya telah mengganti nama skrip ExcelToCsv, karena skrip ini tidak terbatas pada xls sama sekali. xlsx Bekerja dengan baik, seperti yang kita harapkan.
Diuji dengan Office 2010.
Ekspansi kecil pada skrip VB keren ScottF: file batch ini akan mengulang melalui file .xlsx dalam direktori dan membuangnya ke file * .csv:
FOR /f "delims=" %%i IN ('DIR *.xlsx /b') DO ExcelToCSV.vbs "%%i" "%%i.csv"
Catatan: Anda dapat mengubah ekstensi .xlsx menjadi .xls dan nama skrip ExcelToCSV menjadi XlsToCsv
Bagaimana dengan PowerShell?
Kode harus terlihat seperti ini, meskipun tidak diuji
$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()
Berikut adalah postingan yang menjelaskan cara menggunakannya
Bagaimana Saya Dapat Menggunakan Windows PowerShell untuk Mengotomatiskan Microsoft Excel?
$Excel.Workbooks.Open
metode ini. Itu tidak dapat menemukan file yang ditentukan. Saya bekerja di sekitar ini dengan menggunakan Get-Item
pada file dan menyalurkannya ke ForEach-Object
loop (sesuatu yang pada akhirnya akan saya lakukan dalam implementasi terakhir saya) untuk dua baris yang dimulai dengan $Workbook
.
CD /D C:\ && DIR YOURDOC.csv /s
. Ternyata file tersebut disimpan ke My Documents secara default. Jadi, Anda perlu memasukkan lebih banyak ke dalam skrip jika Anda ingin menyimpan file ke folder yang sama dengan tempat Anda bekerja (jika selain My Documents).
Saya perlu mengekstrak beberapa cv dari lembar kerja yang berbeda, jadi berikut ini adalah versi modifikasi dari kode plang yang memungkinkan Anda menentukan nama lembar kerja.
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
Ini adalah versi yang akan menangani banyak file yang diseret dan dilepaskan dari windows. Berdasarkan karya di atas oleh
Christian Lemer
plang
ScottF
Buka Notepad, buat file bernama XlsToCsv.vbs dan tempel ini di:
'* 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
Mengapa tidak menulis sendiri?
Saya melihat dari profil Anda, Anda memiliki setidaknya beberapa pengalaman C # /. NET. Saya akan membuat aplikasi konsol Windows dan menggunakan pembaca Excel gratis untuk membaca file Excel Anda. Saya telah menggunakan Excel Data Reader yang tersedia dari CodePlex tanpa masalah (satu hal yang menyenangkan: pembaca ini tidak memerlukan Excel untuk diinstal). Anda dapat memanggil aplikasi konsol Anda dari baris perintah.
Jika Anda menemukan diri Anda terjebak posting di sini dan saya yakin Anda akan mendapatkan bantuan.
Anda dapat melakukannya dengan Alacon - utilitas baris perintah untuk database Alasql . Ini berfungsi dengan Node.js, jadi Anda perlu menginstal Node.js dan kemudian paket Alasql .
Untuk mengonversi file Excel ke CVS (ot TSV) Anda dapat memasukkan:
> node alacon "SELECT * INTO CSV('mydata.csv', {headers:true}) FROM XLS('mydata.xls', {headers:true})"
Secara default, Alasql mengonversi data dari "Sheet1", tetapi Anda dapat mengubahnya dengan parameter:
{headers:false, sheetid: 'Sheet2', range: 'A1:C100'}
Alacon mendukung jenis konversi lain (CSV, TSV, TXT, XLSX, XLS) dan konstruksi bahasa SQL (lihat Panduan Pengguna untuk mengetahui contoh).
Ada penyedia data OLEDB Excel yang terpasang di Windows; Anda dapat menggunakan ini untuk 'menanyakan' lembar Excel melalui ADO.NET dan menulis hasilnya ke file CSV. Ada sedikit pengkodean yang diperlukan, tetapi Anda tidak perlu menginstal apa pun di mesin.
Berdasarkan apa yang telah disediakan Jon of All Trades, berikut ini (~ n) menghilangkan masalah ekstensi ganda yang mengganggu:
FOR /f "delims=" %%i IN ('DIR *.xlsx /b') DO ExcelToCSV.vbs "%%i" "%%~ni.csv"
Saya mencoba solusi ScottF VB dan membuatnya berfungsi. Namun saya ingin mengonversi file excel multi-tab (buku kerja) menjadi satu file .csv.
Ini tidak berhasil, hanya satu tab (yang disorot ketika saya membukanya melalui excel) disalin.
Apakah ada yang mengetahui skrip yang dapat mengonversi file excel multi-tab menjadi satu file .csv?
Jawaban Scott F adalah yang terbaik yang saya temukan di internet. Saya menambahkan pada kodenya untuk memenuhi kebutuhan saya. Saya tambahkan:
On Error Resume Next <- Untuk memperhitungkan file xls yang hilang dalam pemrosesan batch saya di bagian atas. oBook.Application.Columns ("A: J"). NumberFormat = "@" <- Sebelum baris SaveAs untuk memastikan data saya disimpan dalam format teks agar excel tidak menghapus awalan nol dan menghilangkan koma di string angka dalam data saya yaitu (1.200 hingga 1200). Kisaran kolom harus disesuaikan untuk memenuhi kebutuhan Anda (A: J).
Saya juga menghapus Echo "selesai" agar tidak interaktif.
Saya kemudian menambahkan skrip ke dalam file batch cmd untuk memproses data otomatis setiap jam melalui tugas.
Semua jawaban ini membantu saya membuat skrip berikut yang secara otomatis akan mengonversi file XLS * ke CSV dan sebaliknya , dengan meletakkan satu atau lebih file pada skrip (atau melalui baris perintah). Maaf atas format janky.
' /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
:: Untuk UTF-8 bekerja untuk Microsoft Office 2016 dan lebih tinggi!
Coba kode ini:
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
Buat file TXT di desktop Anda dengan nama "xls2csv.vbs" dan tempel kode:
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
Seret file XLS ke sana (seperti "test.xls"). Ini akan membuat file CSV yang dikonversi bernama "test.xls.csv". Kemudian, ganti namanya menjadi "test.csv". Selesai.