質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

Q&A

1回答

2209閲覧

バッチファイルで複数件のExcelファイルをcsv形式に変更したい

ojimahirokazu

総合スコア0

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

0グッド

0クリップ

投稿2023/02/09 06:27

実現したいこと

指定のディレクトリ内の複数件ある保護されたxlsファイルを文字化けなしのcsvファイルへ変更したい

前提

  • 【BAT】xlsをcsvに変換するBAT(xls2csv.bat) と csvをxlsに変換するBAT(csv2xls.bat) を参考に、xlsファイルをCSVへ変換することはできました。
  • 一方、上記のBATファイル内処理では逐次ファイル名を指定する必要があり、対象となるファイル数が膨大で上記での対応が難しいです。
  • 当方 コマンドトロンプトについて明るくなく、 cmd上での繰り返し処理が適当なのか、BATファイル内を改変した方が良いのか、方向性を知りたいです。

試したこと

  • 上記BATファイルを利用する前に、cmdのrenコマンドで拡張子を変更することは試みましたが、文字化けやセキュリティ等ではじかれてしまいダメでした。

該当のソースコード(BATファイル内)

@if (1==1) /* @echo off if "%~2"=="" goto :USAGE if "%~1"=="/?" goto :USAGE rem ******************************************************************************** :MAIN CScript //nologo //E:JScript "%~f0" %* If ERRORLEVEL 1 goto :USAGE goto :eof rem ******************************************************************************** :USAGE echo USAGE:%~n0 [-s シート名] 入力ファイル 出力ファイル echo xlsファイルを開き、CSV(カンマ区切り)形式で保存(SaveAs)します。 echo. echo 【オプション】 echo -s シート名 echo この指定がない場合、1シート目を変換対象とします echo. echo 入力ファイル echo 入力ファイルを指定します echo. echo 出力ファイル echo 出力ファイルを指定します goto :eof rem ******************************************************************************** rem */ @end //---------------------------------------------------------- セットアップ var Args = WScript.Arguments; var EXCEL = WScript.CreateObject("EXCEL.Application"); var SHELL = WScript.CreateObject("WScript.Shell"); function echo(o){ WScript.Echo(o); } // EXCELの定数 var xlCSV = 6; //---------------------------------------------------------- 引数処理 var sheet = null; var infile = null; var outfile = null; for (var i=0; i<Args.Length; i++){ var p = Args(i); switch (p) { case "-s": sheet = Args(++i); break; default: if (!infile) { infile = p; } else { outfile = p; } break; } } if (!infile){ echo("入力ファイルが指定されていません"); WScript.Quit(9); } if (!outfile){ echo("出力ファイルが指定されていません"); WScript.Quit(9); } //---------------------------------------------------------- 主処理 // カレントディレクトリの切り替え if (EXCEL.DefaultFilePath != SHELL.CurrentDirectory){ EXCEL.DefaultFilePath = SHELL.CurrentDirectory; delete EXCEL; EXCEL = WScript.CreateObject("EXCEL.Application"); } // ファイルを開く var book = EXCEL.Workbooks.Open(infile); EXCEL.DisplayAlerts = false; try{ // シート切り替え if (sheet != null){ book.Worksheets(sheet).Activate(); } // xls変換 book.SaveAs(outfile, xlCSV); } catch(e){ echo(e.number + ":" + e.description); } finally { book.Close(false); }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

簡単には、もう一つバッチファイル作って、そのバッチファイルを呼び出せば良いです。

カレントディレクトリーの xls ファイルすべてを、拡張子 csv のファイルに変換するとすると、
( xlsx じゃなくて xls なんですか??)

CMD

1for %%F in (*.xls) do call "そのバッチファイル" "%%~F" "%%~nF.csv"

コマンドプロンプトで直接打ち込んでもOK。
for %F in (*.xls) do call "そのバッチファイル" "%~F" "%~nF.csv"

あるいは、Excelファイルをドラッグ&ドロップしてバッチを実行するなら、

CMD

1:LOOP 2if "%1"=="" exit /b 3call "そのバッチファイル" "%~1" "%~dpn1.csv" 4shift 5goto LOOP

投稿2023/02/09 07:17

otn

総合スコア84557

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問