4

Internet Explorer は、インターネットからダウンロードしたファイルに角かっこで囲まれた数字 (通常は [1]) を追加することに気付きました。これは、角括弧が Excel ワークシート名内の有効なファイル名文字ではないため、Excel スプレッドシートのダウンロードに大きな問題を引き起こします。この問題は IE 固有のものであり、他のブラウザは同じファイル名を保持しています。

たとえば、ファイルを開くときに自動更新されるピボット テーブルがある場合、「file[1].yourPivotTableName」という名前が無効であるというエラー メッセージが表示されます。

その問題の解決策はありますか?

編集: HTTP ディレクティブによって提案されたファイル名が何であれ、IE はすべての場合に [1] を追加し、問題を引き起こしているようです! (したがって、その場合、ファイル名に関する回答は役に立ちません)

編集:ファイルを開くときに別の名前でファイルを保存するために、いくつかのVBAコードを試しました。ただし、機能しません (以前と同じエラー メッセージ)。VBAでそれを修正する方法があると思いますか?

4

10 に答える 10

2

このクールな男 (彼のことを懐かしく思います) によって提供された VBA を使用して動作させました。ファイルの名前を変更し、ピボットを再アタッチします。

http://php.kennedydatasolutions.com/blog/2008/02/05/internet-explorer-breaks-excel-pivot-tables/

于 2008-10-27T19:38:09.853 に答える
2

これは、Internet Explorer に組み込まれている機能です。

ファイルのダウンロード ウィンドウで [開く] の使用をやめ、[保存] の使用を開始します。そうしないと、IE は一時フォルダーに配置するファイルのファイル名に「[1]」を追加します。

System.IO.FileSystemWatcherを使用して、ダウンロードしたファイルまたは何かの作成イベントをキャッチし、ファイルの名前を変更する.NET アプリケーションを構築できます。

于 2008-09-23T13:29:18.620 に答える
2

これは、スプレッドシートを IE で開き、IE が一時ファイルに保存したときに発生すると思います。また、スプレッドシートのファイル名に複数のドットが含まれている場合にのみ発生すると思います。シンプルな「sample.xls」で試してみてください。もう 1 つの回避策は、ファイルをデスクトップに保存してから開くようにユーザーに指示することです。

于 2008-09-23T12:15:50.217 に答える
1

ファイル名、ファイル拡張子 (.dot なし)、および HTTP 要求) の 3 つのパラメーターを渡すメソッドを使用して、この問題を解決しました。次に、ファイル名と拡張子の UTF-8 エンコードを行います。サンプルコード:

public static String encoding(String fileName, String extension, HttpServletRequest request)
{
    String user = request.getHeader( "user-agent" );
    boolean isInternetExplorer = ( user.indexOf( "MSIE" ) > -1 );
    String var = "";
    try
    {           
    fileName = URLEncoder.encode( fileName, "UTF-8" );
        fileName = fileName.trim().replaceAll( "\\+", " " );
        extension = URLEncoder.encode( extension, "UTF-8" );
        extension = extension.trim().replaceAll( "\\+", " " );
        if ( isInternetExplorer )
        {
        disposition = "attachment; filename=\"" + fileName+"."+extension+"\"";
        }
        else
        {
        var = "attachment; filename*=UTF-8''" + fileName+"."+extension;
        }            
    }
    catch ( UnsupportedEncodingException ence )
    {
    var = "attachment; filename=\"" + fileName+"."+extension;
        ence.printStackTrace();
    }

    return var;
}

私の場合、これはうまくいきました。それがあなたのすべてを助けることを願っています。

于 2014-10-08T07:34:56.113 に答える
0

ピボットのオプションボックスで自動更新がオフになっていることを確認できます。これで、サーバーから開いた場合でも、ピボットは完全に機能します

于 2010-04-19T20:33:43.327 に答える
0

以下は私のために働いた:

private string EncodeFileName(string fileName)
    {
        fileName = HttpUtility.UrlEncode(fileName, Encoding.UTF8).Replace("+", " ");
        if (HttpContext.Current.Request.UserAgent.ToLower().Contains("msie"))
        {
            var res = new StringBuilder();
            var chArr = fileName.ToCharArray();
            for (var j = 0; j < chArr.Length; j++)
            {
                if (chArr[j] == '.' && j != fileName.LastIndexOf("."))
                    res.Append("%2E");
                else
                    res.Append(chArr[j]);
            }
            fileName = res.ToString();
        }
        return "\"" + fileName + "\"";
    }
于 2008-11-20T07:37:37.183 に答える
0

私は同じ問題に遭遇し、(imo) VBA を必要としないより良い解決策を思いつきました。

「Content-Disposition」ヘッダーを「inline; filename=<...>」ではなく「attachment; filename=<...>」に設定すると、通常のブラウザーはダイアログを開き、ファイルを保存または開くことができますヘッダーで定義されたファイル名ですが、Internet Explorer は奇妙な動作をします。ファイルのダウンロード ダイアログが開き、[保存] を押すと、ヘッダーで定義されているファイル名が提案されますが、[開く] を押す、一時フォルダーにファイルが保存され、URN と同じ名前で開きます(たとえば、URI がhttp://server/folder/file.htmlの場合、IE はファイルをfile.htmlとして保存します(角かっこは不要です)。これにより、解決策が得られます。

http://server/folder/ *からのリクエストを処理するスクリプトを作成し、XLS ファイルを提供する必要がある場合は、 Content-Dispositionをinlineに設定してそのスクリプトにリダイレクトします (アスタリスクの代わりにファイル名を使用します) 。

于 2010-08-23T13:01:35.790 に答える
0

次の 4 行をコードに挿入します。

response.reset();
response.setHeader("Expires", "0");
response.setHeader("Cache-Control","must-revalidate,post-check=0, pre-check=0");
response.setHeader("Pragma", "public");

お役に立てれば。

于 2010-04-28T14:05:49.887 に答える
0

実際、正しい .NET コードは次のとおりです。

Response.AppendHeader("content-disposition", "attachment;filename=file.xls");
Response.ContentType = "application/vnd.ms-excel";

注: AddHeaderではなくAppendHeaderで、デバッグ Web サーバーと IIS7 でのみ機能すると思います。

于 2008-09-23T12:08:49.640 に答える
-1

.NETでは、経験からこれだけがうまくいくようです:

            Response.AddHeader("Content-Disposition", "attachment; filename=excel.xls");
            Response.AddHeader("Content-Type", "application/vnd.ms-excel");
            Response.ContentType = "application/vnd.ms-excel";

重複の匂いがしますが、これまでのところ、その真相を突き止めたことはありません (おそらく Sebs の投稿で説明されています)。また、「content-Disposition」の値は、; の代わりに : を使用すると非常に扱いにくいように見えます。または、それと「ファイル名」の間のスペースを省略すると、吹き飛ばされます!

また、IIS で圧縮を有効にしている場合、これで問題が解決する場合があります。

Response.ClearHeaders()
于 2008-09-23T12:12:20.380 に答える