問題
- [バッチファイル] 処理が途中でとまる
バッチファイルに対象のエクセルをドラックアンドドロップすると、フォルダが生成され、エクセルが自動で立ち上がり処理が走るが、"処理中"という状態が続いて、強制終了になってしまう。
前提
エクセルは開かずWindowsのバッチファイルの入ったフォルダに対象ファイルをドラック&ドロップし、以下の処理をかけたい。
対象ファイル:.xlsx または xls
OS:Windows
### 処理
1.バッチファイルの入ったフォルダと同ディレクトリに新規フォルダ"output"を生成
2.ファイルを開く
3.sheet"入力用"を選択
4.各セルの後ろに全角スペースや半角スペースがあれば削除
5.各セル内に改行があれば削除
6. 非表示にしているsheet名"CSV書き出し用"を再表示
7. sheet"CSV書き出し用"を選択した状態にする
8. 名前をつけて保存。ファイル形式は Unicode テキスト (*.txt)。ファイルの名称は元ファイルと同じ
9. outputフォルダに 8.の.txtファイルを格納
10.終了
その他条件
・保護ビューの注意喚起ポップアップは無視する(編集を有効にするをクリック状態にして作業をすすめる)
・複数ファイルを同時にできること
・複数ファイルを同時に処理した場合、出力ファイルを1つにまとめるか個別にわけるかは、バッチファイルのコードで変更できるようにする
・保存する形式やファイル名はバッチファイルのコードで変更できるようにする
・バッチファイルのそれぞれのコードがどういう作動をしているかコメントアウトで説明をいれること
bat
1@echo off 2setlocal enabledelayedexpansion 3 4REM フォルダ名とファイル名を取得 5set "folder=%~dp1" 6set "filename=%~nx1" 7 8REM 出力フォルダを作成 9if not exist "%folder%output" mkdir "%folder%output" 10 11REM Excelファイルを開く 12start "" /wait excel.exe "%filename%" 13 14REM 変換処理を実行 15for %%f in ("%folder%*.xlsx" "%folder%*.xls") do ( 16 REM ファイルを開く 17 start "" /wait excel.exe "%%f" 18 19 REM シートを選択 20 echo "入力用"シートを選択中... 21 powershell -Command "$excel = New-Object -ComObject Excel.Application; $workbook = $excel.Workbooks.Open('%%f'); $worksheet = $workbook.Sheets.Item('入力用'); $worksheet.Activate(); $workbook.Save(); $workbook.Close(); $excel.Quit();" 22 23 REM スペースと改行を削除 24 echo スペースと改行を削除中... 25 powershell -Command "$excel = New-Object -ComObject Excel.Application; $workbook = $excel.Workbooks.Open('%%f'); $worksheet = $workbook.Sheets.Item('入力用'); $range = $worksheet.UsedRange; for ($i = 1; $i -le $range.Rows.Count; $i++) { for ($j = 1; $j -le $range.Columns.Count; $j++) { $cell = $range.Item($i, $j); $cell.Value2 = $cell.Value2.ToString().Replace(' ', '').Replace([char]10, '').Replace([char]13, ''); } }; $workbook.Save(); $workbook.Close(); $excel.Quit();" 26 27 REM CSV書き出し用シートを表示 28 echo "CSV書き出し用"シートを選択中... 29 powershell -Command "$excel = New-Object -ComObject Excel.Application; $workbook = $excel.Workbooks.Open('%%f'); $worksheet = $workbook.Sheets.Item('CSV書き出し用'); $worksheet.Visible = 1; $worksheet.Activate(); $workbook.Save(); $workbook.Close(); $excel.Quit();" 30 31 REM テキストファイルに保存 32 echo テキストファイルに保存中... 33 powershell -Command "$excel = New-Object -ComObject Excel.Application; $workbook = $excel.Workbooks.Open('%%f'); $worksheet = $workbook.Sheets.Item('CSV書き出し用'); $worksheet.SaveAs('%%~dpnxf.txt', -4158); $workbook.Close(); $excel.Quit();" 34 35 REM 出力ファイルを移動 36 echo 出力ファイルを移動中... 37 move "%%~dpnxf.txt" "%folder%output" 38) 39 40REM 終了処理 41echo 処理が完了しました。 42pause

回答1件
あなたの回答
tips
プレビュー