アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

VBAでは、「Application.GetSaveAsFilename」で表示できるようですが、PerlのWin32::OLEモジュールでも同じように表示出来ないでしょうか?

A 回答 (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();
    • good
    • 0

>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
    • good
    • 0

> ワークシートをクローズしてからマクロを実行するように記述しましたが間違いでしょうか?



間違えです。マクロを記述してあるブックを閉じてはいけません。


' 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');
    • good
    • 0
この回答へのお礼

回答有難うございました
連絡が遅くなり申し訳ございません

ワークシートのクローズ前にマクロを実行するようにしましたがだめでした。
確認すると、Excel自体にマクロを登録するとPerlでワークシートを開くことが出来ないようです。
Excel自体にマクロを登録すると、今まで作成したExcelファイルを保存できていたものが作成・保存が出来なくなってしまいました。

環境がWindowsXP proSP3、IIS5.1、ActivePerl 5.1、MS-Office Excel 2003ですが、
Excelのセキュリティでマクロのあるファイルは開く事が出来ないのでしょうか?

お礼日時:2010/02/23 14:52

>「名前を付けて保存」ダイアログボックスを表示して保存先を指定できるようにしたいのですが可能でしょうか?



Type Library Browserを見たところ無いようですので、できないと思います。代用としてApplication.GetSaveAsFilenameをVBAのマクロに記述して、そのマクロをperlから実行してみては。
$Excel->Run('ブック名!マクロ名');

この回答への補足

回答有難うございます
早速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('ブック名!保存するファイル名を表示する');

間違い等あれば教えていただけないでしょうか?

補足日時:2010/02/22 01:57
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!