[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ExcelファイルをコマンドでPDF化したい』(あらじぃ)
同じフォルダに100個のxlsxファイルがあるのですが、これを100個のPDFにしたく、各エクセルファイルは、すべてそれぞれ1シートしかありません。
WSH/JScriptのスクリプトファイル(拡張子.jse)を公開されている方がいますが、それらは対象ファイルのドラッグ&ドロップが前提のようです。
私は、コマンドで、たとえば、c:\tempにxlsxファイルがたくさんある場合、c:\temp\*.*を引き数にしてなんらかのコマンドを打つとずらずらとPDF化されるようなものが理想なのですが、どうしたら良いのでしょうか。
< 使用 Excel:Excel2019、使用 OS:Windows8 >
コマンドラインではないですが、VBAで 処理、ではだめですか?
Dir関数を使って指定フォルダ内のブック を処理する、FileSystemObjectを使って 指定フォルダ内の指定の拡張子のファイル に対して処理を行う、などの方法があります。 (MK) 2023/05/01(月) 16:34:55
(あらじぃ) 2023/05/01(月) 16:40:33
専用のQ&Aサイトはないのですか? ここはエクセルのQ&Aサイトなので。
餅は餅屋ですよ。 (MK) 2023/05/01(月) 16:45:40
ちょっと転載が微妙だったので紹介だけですが・・・ http://marupeke296.com/IKDADV_JS_FileNameCollect.html >var extArray = ["txt", "exe"]; をエクセルの拡張子に変更 >var rootDir = wsh.CurrentDirectory; を実行したいフォルダに書き換え \ は \\ にエスケープしてください。 例:C:\ABC\ならC:\\ABC\\ >for (var i = 0; i < filePathAry.length; i++) の後ろに { var file = filePathAry[i]; xls2pdf(file, file + ".pdf"); } としておく 階層が深いところだと、サブフォルダで時間とると思うので、 その部分はコメントアウトしておいたほうが無難かも。
あとは https://qiita.com/tnakagawa/items/6c468ee355eb9f7c0664 のページから xls2pdf 関数だけ引っこ抜いて同じファイルに入れておけば問題なく動きました。
(稲葉) 2023/05/02(火) 10:19:40
え?そっから? ↑で案内したjsファイルが既にできているとして、仮にCドライブ直下にtest.jsとして保存する 追加で var args = WScript.Arguments; を入れる その下に、rootDirの右辺を下記の通りにする var rootDir = args.Unnamed(0);
ファイルの行頭に var args = WScript.Arguments; var rootDir = args.Unnamed(0); と入れておくと間違いないかと。
処理したいフォルダがC:\abc\とした場合
コマンドプロンプトを立ち上げて、 cscript C:\test.js C:\abc\ って打ち込めば実行できるかと。
拡張子の指定などはjsファイルの中にあって、 (稲葉) 2023/05/02(火) 10:19:40 の投稿で修正方法を説明済み
前回の投稿で紹介したURLを穴が開くまで読み込んで、 簡単なコードから試して得心いってから本来やりたかったこと試してください。 それでもわからなかったら、また聞きに来てください。
引数の渡し方 https://ooo.iiyudana.net/htm/js_chp3frame.htm
(稲葉) 2023/05/02(火) 14:01:33
あーーーと jsファイルは文字コードがShiftJISにしないといけないので、 メモ帳で一度保存した後、 再度メモ帳で開いて、ファイル>名前を付けて保存 ダイヤログの下部に文字コードを選ぶところがあるので、ANSI(=ShiftJISの意)を選択して上書き保存してください。
(稲葉) 2023/05/02(火) 14:05:28
1) >var rootDir = wsh.CurrentDirectory; を実行したいフォルダに書き換え
これについては、この行ごと単純に C:\\ABC\\ とかと入れ替えるのでしょうか。
それとも var rootDir = C:\\ABC\\ でしょうか
2) >xls2pdf 関数だけ引っこ抜いて同じファイルに入れて..
これは、そのwebページのコードをxls2pdf.js というテキストファイルにして、c:\abcに入れておくという意味でしょうか
(あらじぃ) 2023/05/02(火) 14:54:52
1)については、コマンドラインからの指定が希望そうでしたので、忘れてください。 (稲葉) 2023/05/02(火) 14:01:33 の投稿通り、 var rootDir = args.Unnamed(0); としてください。
2)コードだけです。 メインコードがこちらで、 http://marupeke296.com/IKDADV_JS_FileNameCollect.html 書き換えが必要なところは >var extArray = ["txt", "exe"]; をエクセルの拡張子に変更 と
ファイルの行頭に var args = WScript.Arguments; //追加部分 var rootDir = args.Unnamed(0); //書き換え部分 と
>for (var i = 0; i < filePathAry.length; i++) の後ろに { var file = filePathAry[i]; xls2pdf(file, file + ".pdf"); } を付け足す
このコードの下にfunction xls2pdfのコードを持ってくる https://qiita.com/tnakagawa/items/6c468ee355eb9f7c0664
あとは(稲葉) 2023/05/02(火) 14:01:33と(稲葉) 2023/05/02(火) 14:05:28で示した通りです。
これでわからなかったら、どなたか助けてください。
(稲葉) 2023/05/02(火) 15:12:00
ご指示通り作った(と思われる)jsファイルはここに公開してもよいものでしょうか。
(あらじぃ) 2023/05/02(火) 18:34:00
登録ユーザーなら自由に使えるらしいです。 一部ならまだしも、今回は全部コピーなんでどうなんでしょうね。 創作性が担保されているかどうかなんか、わかんないですしね。
本題ですが、 たぶん、サブフォルダが多すぎて深く潜りすぎてるんじゃないですかね? (稲葉) 2023/05/02(火) 10:19:40の投稿で >階層が深いところだと、サブフォルダで時間とると思うので、 >その部分はコメントアウトしておいたほうが無難かも。 と申し上げましたが、いかがですか?
>Ctrl+c で終了しないと永遠にロックしている感じでした。 コマンドプロンプトからCScriptに権限移っているので、Ctrl+Cが利かないのは当然かと・・・。
素直にVBAで作ればこんな煩わしいことにならないと思うんですけど、 なんのこだわりがあってコマンドがいいんです?
(稲葉) 2023/05/02(火) 18:54:37
言ってる意味が分かんないんだけど、 遠隔って箸もってマウス扱うから、D&Dできないとかそういう意味じゃないよね?
リモートデスクトップなら制限ないだろうし、どういう遠隔操作だとコマンドライン限定になるの・・・?
(稲葉) 2023/05/02(火) 20:38:03
ならそのソフトに繰り返し処理やらせればいいんじゃ? 悪いけど、ここで降ります (稲葉) 2023/05/02(火) 21:26:39
以下の内容を XLS2PDF.VBS とかのファイル名で保存して、実行します
'----- XLS2PDF.VBS ここから------ Dim FSO Dim xlApp Function EnumFiles(path) With CreateObject("Wscript.Shell") EnumFiles = Split(.Exec("cmd /c dir /b /s """ & path & """").StdOut.ReadAll, vbCrLf) End With End Function Sub Book2PDF(file) if Not FSO.FileExists(file) Then Exit Sub If "XLS" <> UCASE(Left(FSO.GetExtensionName(file),3)) Then Exit Sub Set xlsfile = FSO.GetFile(file) Dim PdfName PdfName = FSO.GetParentFolderName(xlsfile) & "\" & FSO.GetBaseName(xlsfile) & ".PDF" xlTypePDF =0 xlQualityStandard = 0 With xlApp.Workbooks.Open(xlsfile) .ExportAsFixedFormat xlTypePDF, PdfName, xlQualityStandard .Close Flase End With End Sub Sub Main() Set FSO = CreateObject("Scripting.FileSystemObject") Set xlApp = CreateObject("Excel.Application") xlApp.Visible = True For Each arg In WScript.Arguments Select Case True Case FSO.FileExists(arg) Book2PDF arg Case FSO.FolderExists(arg) For Each file in EnumFiles(arg & "\*.xls?") Book2PDF file Next Case Else For Each file in EnumFiles(arg) Book2PDF file Next End Select Next xlApp.Quit Set xlApp = Nothing Set FSO = Nothing Exit Sub End Sub
If WScript.Arguments.Count > 0 Then Call Main() '----- XLS2PDF.VBS ここまで------ (´・ω・`) 2023/05/03(水) 06:22:18
稲葉さん、見放さずにここまでお付き合いいただいて感謝です!
(あらじぃ) 2023/05/03(水) 09:40:30
私じゃないです (稲葉) 2023/05/03(水) 10:03:46
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.