如何在从Web服务器保存excel文件时解决[1]IE错误?

如何在从Web服务器保存excel文件时解决[1]IE错误?,excel,download,vba,Excel,Download,Vba,我注意到Internet Explorer在从Internet下载的文件中添加了一个方括号中的数字(通常为[1])。这会在下载Excel电子表格时产生一个大问题,因为在Excel工作表名称中,方括号不是有效的文件名字符。这个问题是IE特有的,其他浏览器保持相同的文件名 因此,例如,如果在打开文件时自动刷新了数据透视表,则会收到一条错误消息,说明名称“file[1].yourPivotTableName”无效 那个问题有什么解决办法吗 编辑:似乎无论HTTP指令建议的文件名是什么,IE都会在所有情

我注意到Internet Explorer在从Internet下载的文件中添加了一个方括号中的数字(通常为[1])。这会在下载Excel电子表格时产生一个大问题,因为在Excel工作表名称中,方括号不是有效的文件名字符。这个问题是IE特有的,其他浏览器保持相同的文件名

因此,例如,如果在打开文件时自动刷新了数据透视表,则会收到一条错误消息,说明名称“file[1].yourPivotTableName”无效

那个问题有什么解决办法吗

编辑:似乎无论HTTP指令建议的文件名是什么,IE都会在所有情况下添加[1],这会导致问题!(因此,在这种情况下,有关文件名的答案没有帮助)


编辑:我尝试了一些VBA代码,在文件打开时用另一个名称保存文件。但是,它不起作用(与以前的错误消息相同)。你认为有没有办法用VBA解决这个问题?

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

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

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

在.NET中,我从经验中发现,这似乎只适用于我:

            Response.AddHeader("Content-Disposition", "attachment; filename=excel.xls");
            Response.AddHeader("Content-Type", "application/vnd.ms-excel");
            Response.ContentType = "application/vnd.ms-excel";
重复的气味,但到目前为止,我还没有得到它的底部(也许Sebs的帖子解释了这一点)。此外,“内容配置”值似乎非常挑剔,使用a:而不是a;或者把它和“文件名”之间的空格去掉,它就爆炸了

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

Response.ClearHeaders()

我认为当你在IE中打开电子表格,IE将其保存到一个临时文件时,就会发生这种情况。我认为只有当电子表格的文件名中有一个以上的点时才会发生这种情况。用一个简单的“sample.xls”试试看。
另一个解决方法是告诉用户将文件保存到桌面,然后打开它。

这是Internet Explorer的内置功能

停止使用“打开”,开始在文件下载窗口中使用“保存”,否则IE会将“[1]”附加到它放在某个临时文件夹中的文件名中


您可以使用它来构建一些.NET应用程序,它可以捕获创建下载文件或其他内容的事件并重命名该文件。

我已经使用这个酷家伙提供的VBA实现了这一功能(请亲切地想想他)。 它重命名文件,然后重新附着轴


以下几点对我很有用:

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 + "\"";
    }
private string EncodeFileName(字符串文件名)
{
fileName=HttpUtility.UrlEncode(fileName,Encoding.UTF8)。替换(“+”,”);
if(HttpContext.Current.Request.UserAgent.ToLower().Contains(“msie”))
{
var res=新的StringBuilder();
var chArr=fileName.ToCharArray();
对于(变量j=0;j
这对我来说效果不错。
希望它能对大家有所帮助。

就我而言,我不能使用一张纸,但是,你是真的,只有当你试图直接打开文件时,问题才会出现,而不是在你保存文件时。但这不是一个好的“客户友好”回答…:)你的服务器设置是什么?IIS?阿帕奇?使用CMS?URL重写会有帮助吗?我的webapp是基于J2EE的,在IBM改进的apache服务器(IHS)后面的IBM Web应用服务器上工作。URL重写不会有帮助,因为这是IE的工作方式。我想了很多VBA宏来拯救我…我试图用excel宏以另一个名称保存文件,但问题仍然存在,即使文件名已更改…安装新的Internet Explorer。那么它与web服务器无关。新的Internet Explorer?你什么意思?我现在正在使用IE6,但缺陷似乎也出现在IE7中:我尝试了很多方法,包括在刷新透视表之前使用VBA宏以另一个名称保存文件。我现在还没有取得任何成功,但我认为这可能是解决方案的一部分。。。你认为呢?非常感谢,我认为这是解决问题的办法。我试试看。