我注意到Internet Explorer增加了一个数字在方括号内,从互联网下载的文件(通常[1]).这创造了一个很大的问题与下载的Excel电子表格作为方括号内是不是一个有效的文件名字里面的Excel工作表姓名。这个问题是即具体、其他浏览器保持相同文件的名称。

所以,如果你有一个枢轴表自动刷新文件的开口为例,你会得到错误的消息说,名为"文件[1].yourPivotTableName"是不是有效的。

是否有任何解决这一问题?

编辑:看来,不管什么 文件建议通过HTTP指令, ,即增加了[1]在所有情况下,造成问题!(因此,解答有关文件名是不是有帮助的,在这种情况下)

编辑:我已经尝试了一些载>>>情绪,以保存的文件在另一个名字的时候它会打开。然而,它不工作(相同的错误信息,比前)。你认为有一种方法来解决这个问题与VBA?

有帮助吗?

解决方案

我使用这个很酷的家伙提供的VBA工作(深情地想起他)。 它重命名文件,然后重新连接枢轴。

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

其他提示

我认为当您在IE中打开电子表格并将IE保存到临时文件时会发生这种情况。我认为只有当电子表格的文件名中包含多个点时才会发生这种情况。尝试使用简单的<!>“sample.xls <!>”; 另一种解决方法是告诉用户将文件保存到桌面然后再打开它。

这是一个内在特性,在互联网浏览器。

停止使用"开放",开始使用"保存"在本文件载窗口,否则即将添加"[1]"的文件的文件,它将在一些临时文件夹。

你可以建立一些。网应用程序的使用 系统。IO.更改 捕捉的事件创造的下载文件或类和重新命名的文件。

我通过使用传递3个参数的方法解决了这个问题:文件名,文件扩展名(没有.dot)和HTTP请求);然后执行文件名和扩展名的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;
}

在我的情况下这很好用。 希望它能帮助你们所有人。

实际上,正确的.NET代码如下:

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

注意: AppendHeader ,而不是 AddHeader ,我认为这只适用于调试网络服务器和IIS7。

以下对我有用:

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 + "\"";
    }

您可以确保在枢轴的选项框中关闭自动刷新功能。现在即使从服务器打开,枢轴也能正常工作

我遇到了同样的问题,并提出了(imo)一个不需要任何VBA的更好的解决方案。

如果设置<!>“; Content-Disposition <!>”;标题为<!>“;附件;文件名= LT <!>; ... GT <!>; <!> QUOT;而不是<!> quot; inline;文件名= LT <!>; ... GT <!>; <!> QUOT;普通的浏览器会打开一个对话框,允许保存或打开一个文件头中定义的文件名,但是Internet Explorer的行为方式会很奇怪。它将打开文件下载对话框,如果按保存,它将建议在标题中定义的文件名,但是如果按打开,它会将文件保存到临时文件夹并使用与您的URN (没有'命名空间')相同的名称打开它,例如如果您的URI是 http://server/folder/file.html ,那么IE将保存您的文件作为 file.html (没有括号,呜呜!)。这引出了我们的解决方案:

编写一个脚本来处理来自 http:// server / folder / *的请求以及何时需要提供服务XLS文件只是重定向到该脚本(使用您的文件名而不是星号), Content-Disposition 设置为 inline

将这四行放在您的代码中:

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

希望这有帮助。

在.NET中,我从经验中发现,这似乎对我有用:

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

重复的味道,但到目前为止,我从来没有到底(也许Sebs的帖子解释了这一点)。还有<!> quot; content-Disposition <!> quot;价值看起来非常挑剔使用a:而不是a;或者省略它和'filename'之间的空格,它就会爆炸!

此外,如果您在IIS上启用了压缩,这可能会为您解决问题:

Response.ClearHeaders()
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top