Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
  • 締切済み

Perlでエクセルの「名前をつけて保存」ダイアログを表示する方法を教えてください

PerlのWin32::OLEモジュールを使用してMS-Excelファイルを作成しています。 作成したExcelファイルを $book->SaveAs("ファイル名");のように記述して保存はできるのですが、 「名前を付けて保存」ダイアログボックスを表示して保存先を指定できるようにしたいのですが可能でしょうか? VBAでは、「Application.GetSaveAsFilename」で表示できるようですが、PerlのWin32::OLEモジュールでも同じように表示出来ないでしょうか?

みんなの回答

  • geg01137
  • ベストアンサー率0% (0/0)
回答No.4

# 任意のcsv ファイルを読み込んで、任意のエクセルファイルに書き出す #!/usr/local/bin/perl -w use Win32::OLE; use Win32::OLE::Const 'Microsoft Excel'; my $Excel = Win32::OLE->new('Excel.Application'); my $in_name = $Excel->Application->GetOpenFilename("Microsoft Excel Files (*.*), *.csv)"); # print "[$in_name]";<stdin>; $Excel->Workbooks->Open($in_name); $Excel->{'Visible'} = 1; # Excel を可視化 my $out_name = $Excel->Application->GetSaveAsFilename("", "Microsoft Excel Files (*.*), *.*)"); # print "[$out_name]";<stdin>; $Excel->ActiveWorkbook->SaveAs({Filename => "$out_name", Fileformat => xlWorkbookNormal}); # excel 2007 用 # $Excel->ActiveWorkbook->SaveAs({Filename => "$out_name", Fileformat => xlExcel9795}); # excel 95 or 97 用 $Excel->ActiveWorkbook->Close(); $Excel->Quit();

すると、全ての回答が全文表示されます。
回答No.3

>Excel自体にマクロを登録すると、今まで作成したExcelファイルを >保存できていたものが作成・保存が出来なくなってしまいました。 セキュリティの設定レベルも分からないのでアドバイスできませんし、そのような問題だと、セキュリティ・レベルや証明書だのややこしいのでパスです。 無難な方法としては、操作するブックにはマクロを記述しないこと。マクロは全てPERSONAL.XLSに記述する。PERSONALについてはヘルプで「XLSatrt」を調べてください。Visual Basic Editor(VBE)のProjectでPERSONAL.XLSが表示されない場合は、Excelのマクロの記録で保存先に個人用ブックを選び、マクロの記録を終了すればVBEのProjectにPERSONAL.XLSが現れます。 Excel2003 Personal SP3 ActivePerl 5.8.6

すると、全ての回答が全文表示されます。
回答No.2

> ワークシートをクローズしてからマクロを実行するように記述しましたが間違いでしょうか? 間違えです。マクロを記述してあるブックを閉じてはいけません。 ' PERSONAL.xls のマクロ Sub SaveAsFilename() Dim Ret As Variant Ret = Application.GetSaveAsFilename("MyBook.xls", "Excel ブック (*.xls), *.xls, テキストファイル(*.txt),*.txt") If Ret = False Then MsgBox "キャンセルが選択されました。" Else Application.ActiveWorkbook.SaveAs Ret End If End Sub # PERSONAL.xls は開いたままにしておく。ただし、PERSONAL.xls は非アクティブ・ブックであること # PERSONAL.xls のマクロを実行 $Excel->Run('PERSONAL!SaveAsFilename');

minnaosiet
質問者

お礼

回答有難うございました 連絡が遅くなり申し訳ございません ワークシートのクローズ前にマクロを実行するようにしましたがだめでした。 確認すると、Excel自体にマクロを登録するとPerlでワークシートを開くことが出来ないようです。 Excel自体にマクロを登録すると、今まで作成したExcelファイルを保存できていたものが作成・保存が出来なくなってしまいました。 環境がWindowsXP proSP3、IIS5.1、ActivePerl 5.1、MS-Office Excel 2003ですが、 Excelのセキュリティでマクロのあるファイルは開く事が出来ないのでしょうか?

すると、全ての回答が全文表示されます。
回答No.1

>「名前を付けて保存」ダイアログボックスを表示して保存先を指定できるようにしたいのですが可能でしょうか? Type Library Browserを見たところ無いようですので、できないと思います。代用としてApplication.GetSaveAsFilenameをVBAのマクロに記述して、そのマクロをperlから実行してみては。 $Excel->Run('ブック名!マクロ名');

minnaosiet
質問者

補足

回答有難うございます 早速VBAのマクロを作成してみました。 Excelに下記のマクロを記述し、 Perlから実行してみましたが、うまくいきませんでした。 Sub 保存するファイル名を表示する() Dim Ret As Variant Ret = Application.GetSaveAsFilename("MyBook.xls", "Excel ブック (*.xls), *.xls, テキストファイル(*.txt),*.txt") If Ret = False Then MsgBox "キャンセルが選択されました。" Else MsgBox Ret & "が入力されました。" End If End Sub ワークシートをクローズしてからマクロを実行するように記述しましたが間違いでしょうか? $Excel->Worksheets->close(); $Excel->Run('ブック名!保存するファイル名を表示する'); 間違い等あれば教えていただけないでしょうか?

すると、全ての回答が全文表示されます。

関連するQ&A