回答:
メモ帳を開き、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
このスクリプトはxlsに限定されていないため、スクリプトの名前をExcelToCsvに変更しました。予想通り、xlsxは問題なく動作します。
Office 2010でテスト済み。
ScottFのgroovy 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()
使い方はこちら
$Excel.Workbooks.Open
方法の難しさでした。指定されたファイルが見つかりませんでした。で始まる2行Get-Item
のファイルを使用してForEach-Object
ループにパイプすることでこれを回避しました(とにかく最終的な実装で最終的に行うことになるものです)$Workbook
。
CD /D C:\ && DIR YOURDOC.csv /s
。ファイルがデフォルトでマイドキュメントに保存されたことがわかります。そのため、作業中の同じフォルダー(マイドキュメント以外の場合)にファイルを保存する場合は、スクリプトにさらに追加する必要があります。
さまざまなワークシートからいくつかのCVを抽出する必要があったので、ここにワークシート名を指定できるように変更されたバージョンのプランコードがあります。
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のインストールが必要ありません)。コマンドラインからコンソールアプリケーションを呼び出すことができます。
ここで投稿が行き詰まっているのを見つけたら、きっとあなたが助けを得るでしょう。
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言語構成をサポートしています(例については、ユーザーマニュアルを参照してください)。
WindowsにはExcel OLEDBデータプロバイダーが組み込まれています。これを使用して、ADO.NET経由でExcelシートを「クエリ」し、結果をCSVファイルに書き込むことができます。少量のコーディングが必要ですが、マシンに何もインストールする必要はありません。
Jon of All Tradesが提供したものに基づいて、次の(〜n)は厄介な二重拡張の問題を削除しました。
FOR /f "delims=" %%i IN ('DIR *.xlsx /b') DO ExcelToCSV.vbs "%%i" "%%~ni.csv"
ScottF VBソリューションを試してみました。ただし、マルチタブ(ワークブック)のExcelファイルを1つの.csvファイルに変換したいと思いました。
これは機能せず、1つのタブ(Excelで開いたときに強調表示されているタブ)だけがコピーされました。
マルチタブのExcelファイルを単一の.csvファイルに変換できるスクリプトを知っている人はいますか?
スコットFの答えは私がインターネットで見つけた中で最高です。私のニーズに合わせて彼のコードを追加しました。追加した:
エラー時に再開次へ <-上部のバッチ処理で欠落しているxlsファイルを説明します。 oBook.Application.Columns( "A:J")。NumberFormat = "@" < -SaveAs行の前に、データがテキストとしてフォーマットされて保存されていることを確認して、先頭のゼロを削除したり、データ内の数値文字列のコンマを削除したりしないようにします。つまり(1,200〜1200)。カラムの範囲は、ニーズに合わせて調整する必要があります(A:J)。
また、インタラクティブではないようにするために、エコーの「完了」を削除しました。
次に、スクリプトをcmdバッチファイルに追加して、タスクを介して1時間ごとに自動データを処理しました。
これらの答えのすべては、私は自動的にXLS * CSVファイルに変換します次のスクリプト構築に役立っその逆と副のスクリプト(またはコマンドライン経由)に1つまたは複数のファイルをドロップすることで、。ぎこちないフォーマットの謝罪。
' /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
デスクトップに「xls2csv.vbs」という名前のTXTファイルを作成し、コードを貼り付けます。
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」など)。「test.xls.csv」という名前の変換されたCSVファイルが作成されます。次に、名前を「test.csv」に変更します。できました。