Bir XLS dosyasını Windows komut satırında bir CSV dosyasına nasıl dönüştürebilirim.
Makinede Microsoft Office 2000 yüklüdür. Microsoft Office kullanarak mümkün değilse OpenOffice'i kurmaya açığım.
Yanıtlar:
Not Defteri'ni açın, XlsToCsv.vbs adlı bir dosya oluşturun ve şunu yapıştırın:
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"
Ardından bir komut satırından .vbs dosyasını kaydettiğiniz klasöre gidin ve çalıştırın:
XlsToCsv.vbs [sourcexlsFile].xls [destinationcsvfile].csv
Bu, Excel'in kullandığınız makineye yüklenmesini gerektirir.
oExcel.Workbooks.Open
istenen diziniyle satırdan sonra aşağıdaki satırı ekleyin (1'den başlar):oBook.Worksheets(1).Activate
Mutlak dosya yolları gerektirmeyen, biraz değiştirilmiş bir ScottF cevabı sürümü:
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 komut dosyasını yeniden adlandırdım çünkü bu komut dosyası xls ile sınırlı değil. xlsx beklediğimiz gibi gayet iyi çalışıyor.
Office 2010 ile test edilmiştir.
ScottF'nin harika VB komut dosyasında küçük bir genişletme: Bu toplu iş dosyası, bir dizindeki .xlsx dosyaları arasında döngü oluşturacak ve bunları * .csv dosyalarına dökecektir:
FOR /f "delims=" %%i IN ('DIR *.xlsx /b') DO ExcelToCSV.vbs "%%i" "%%i.csv"
Not: .xlsx uzantısını .xls ve ExcelToCSV komut dosyasının adını XlsToCsv olarak değiştirebilirsiniz.
PowerShell'e ne dersiniz?
Kod böyle görünmeli, yine de test edilmemeli
$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()
İşte nasıl kullanılacağını açıklayan bir gönderi
Microsoft Excel'i Otomatikleştirmek için Windows PowerShell'i Nasıl Kullanabilirim?
$Excel.Workbooks.Open
yöntemle ilgili zorluktu . Belirtilen dosyayı bulamadı. Get-Item
Dosyayı kullanarak ve onu bir ForEach-Object
döngüye bağlayarak (yine de son uygulamamda yapacağım bir şey) ile başlayan iki satır için bu sorunu çözdüm $Workbook
.
CD /D C:\ && DIR YOURDOC.csv /s
. Dosyanın varsayılan olarak Belgelerim'e kaydedildiği ortaya çıkar. Bu nedenle, dosyayı çalıştığınız aynı klasöre (Belgelerim dışında) kaydetmek istiyorsanız komut dosyasına daha fazlasını eklemeniz gerekir.
Farklı çalışma sayfalarından birkaç cv çıkarmaya ihtiyacım vardı, işte çalışma sayfası adını belirlemenize izin veren plang kodunun değiştirilmiş bir sürümü.
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
Burada, birden çok dosyayı pencerelerden sürükleyip bırakarak işleyecek bir sürüm. Yukarıdaki çalışmalara göre
Christian Lemer
plang
ScottF
Not Defteri'ni açın, XlsToCsv.vbs adlı bir dosya oluşturun ve şunu yapıştırın:
'* 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
Neden kendiniz yazmıyorsunuz?
Profilinizden en azından biraz C # /. NET deneyiminiz olduğunu görüyorum. Bir Windows konsolu uygulaması oluşturur ve Excel dosyalarınızı okumak için ücretsiz bir Excel okuyucu kullanırdım. Ben kullandım Excel Veri Okuyucu (: Excel gerektirmez bu okuyucu yüklü olması bir güzel bir şey) sorunsuz CodePlex edinilebilir. Konsol uygulamanızı komut satırından çağırabilirsiniz.
Kendinizi burada sıkışıp kalmış bulursanız ve eminim yardım alırsınız.
Alacon - Alasql veritabanı için komut satırı yardımcı programı ile yapabilirsiniz . Node.js ile çalışır, bu nedenle Node.js ve ardından Alasql paketini kurmanız gerekir .
Excel dosyasını CVS'ye (ot TSV) dönüştürmek için şunu girebilirsiniz:
> node alacon "SELECT * INTO CSV('mydata.csv', {headers:true}) FROM XLS('mydata.xls', {headers:true})"
Alasql varsayılan olarak "Sayfa1" deki verileri dönüştürür, ancak bunu parametrelerle değiştirebilirsiniz:
{headers:false, sheetid: 'Sheet2', range: 'A1:C100'}
Alacon, diğer dönüştürme türlerini (CSV, TSV, TXT, XLSX, XLS) ve SQL dil yapılarını destekler ( örnekler için bkz. Kullanım Kılavuzu ).
Windows'ta yerleşik bir Excel OLEDB veri sağlayıcısı vardır; Excel sayfasını ADO.NET aracılığıyla 'sorgulamak' ve sonuçları bir CSV dosyasına yazmak için bunu kullanabilirsiniz. Az miktarda kodlama gerekir, ancak makineye herhangi bir şey yüklemenize gerek yoktur.
Jon of All Trades'in sağladığı bilgilere dayanarak, aşağıdaki (~ n) sinir bozucu çift uzantı sorununu ortadan kaldırdı:
FOR /f "delims=" %%i IN ('DIR *.xlsx /b') DO ExcelToCSV.vbs "%%i" "%%~ni.csv"
ScottF VB çözümünü denedim ve çalışmasını sağladım. Ancak, çoklu sekme (çalışma kitabı) excel dosyasını tek bir .csv dosyasına dönüştürmek istedim.
Bu işe yaramadı, sadece bir sekme (excel ile açtığımda vurgulanan) kopyalandı.
Çok sekmeli bir excel dosyasını tek bir .csv dosyasına dönüştürebilen bir komut dosyasının farkında olan var mı?
Scott F'nin cevabı internette bulduğum en iyisi. İhtiyaçlarımı karşılamak için kodunu ekledim. Ekledim:
Hatada Devam Ettirildiğinde <- En üstteki toplu işlemimdeki eksik xls dosyalarını hesaba katmak için. oBook.Application.Columns ("A: J"). NumberFormat = "@" <- sıfırları silmesini ve verilerimdeki sayı dizelerindeki virgülleri ortadan kaldırmasını önlemek için verilerimin metin olarak biçimlendirilmiş olarak kaydedildiğinden emin olmak için SaveAs satırından önce yani (1.200 - 1200). Sütun aralığı ihtiyaçlarınızı karşılayacak şekilde ayarlanmalıdır (A: J).
Ayrıca etkileşimli olmaması için "tamamlandı" yankısını da kaldırdım.
Daha sonra, otomatik verileri bir görev aracılığıyla saatlik olarak işlemek için komut dosyasını bir cmd toplu iş dosyasına ekledim.
Tüm bu yanıtlar, komut dosyasına bir veya daha fazla dosya bırakarak (veya komut satırı aracılığıyla) XLS * dosyalarını otomatik olarak CSV'ye veya tam tersini yapacak olan aşağıdaki komut dosyasını oluşturmama yardımcı oldu . Kötü biçimlendirme için özür dileriz.
' /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 için Microsoft Office 2016 ve üstü için çalışır!
Bu kodu deneyin:
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
Masaüstünüzde "xls2csv.vbs" adlı bir TXT dosyası oluşturun ve kodu yapıştırın:
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
Bir XLS dosyasını içine sürükleyin ("test.xls" gibi). "Test.xls.csv" adlı dönüştürülmüş bir CSV dosyası oluşturacaktır. Ardından "test.csv" olarak yeniden adlandırın. Bitti.