Response.ContentType = "application/octet-stream";
Response.AddHeader "Content-Disposition","attachment; filename=aaaaa.csv"
↑を使用してダウンロードダイアログを表示しクライアントへのダウンロードを行う場合、
ダウンロードダイアログの[開く]を押下(※1)して表示すると、おかしなシート名 ".csv]aaaaa[1]" になってしまいます。
これを避ける事は可能でしょうか?
また、[開く]という選択肢無しでクライアントへのダウンロードに導く方法・アイデアが有りましたらご教授願います。
※1 クライアントPCにExcelが入っており、かつcsvが関連付けられている場合。
ファイル名に
[]
を使用していないでしょうか?(正確には ] 。)
EXCEL内部ではシート名は
[ファイル名]シート名
という形式で管理しているため、ファイル名に[]があるとシート名がおかしくなります。
恐らくこれが関係しているのではないかと思います。
例
1. [].xlsを作成(中身は空でも良い)
2. [].xlsを開き、シート名を変更
→シート名がおかしくなります。
また、ダイアログを出さずにEXCELで開くようにするには
http://support.microsoft.com/kb/303475/ja/
をご参照下さい。
参考までに、
エクセルとVBScriptを使用して、
ダイアログ非表示でCSVファイルをダウンロードする方法を紹介します。
※VBScriptを使用しているので、IE限定です。
※Excelを使用しているので、ローカルマシンにExcelが必要です。
※実際にはセキュリティレベルを落とさないと駄目だと思うので、社内イントラ等での利用に限定されるかと思います。
以下の内容をローカルに保存して[ダウンロード]ボタンを押下してみてください。
<html>
<body>
<input type="button" value="ダウンロード" onClick="DownLoad()">
</body>
</html>
<script Language="VBScript">
Option Explicit
Sub DownLoad()
Dim objExcel
Const xlCSV = 6
'エクセルオブジェクトを作成します
Set objExcel = CreateObject("Excel.Application")
'エクセル画面を非表示
objExcel.Visible = True
'各種の確認ダイアログを非表示
objExcel.DisplayAlerts = False
'ワークブックを開きます(■ダウンロードするCSVを設定)
objExcel.Workbooks.Open "http://xxxx/test.csv"
'ワークブックの保存(■保存先を設定)
objExcel.ActiveWorkbook.SaveAs "c:\download.csv", xlCSV
'エクセルを終了します
objExcel.Quit
'エクセルオブジェクトの破棄
Set objExcel = Nothing
MsgBox "おしまい"
End Sub
</script>
※インターネットやイントラネットのセキュリティーゾーンで使用する場合は、
IEのセキュリティの設定で、
「スクリプトを実行しても安全だとマークされていないActiveXコントロールの初期化とスクリプトの実行」
項目を「ダイアログを表示する」または「有効にする」に設定してください。
回答有難う御座います。
Excel使用を前提にしてしまうと色々と面倒な様ですね。結局、ダウンロードファイルの拡張子をtxtにし、csvへのリネーム・Excelへの読込をクライアントユーザに委ねる事で落ち着きました。
回答有難う御座います。
ファイル名に[]は指定していません。