你  excel 版本问题不?换个版本试试。 现在的版本   docx 估计 不兼容。

解决方案 »

  1.   

    应该不会不兼容吧,.docx都出来很多年了。
      

  2.   

    把下面那段改成这样看看。                in = new ByteArrayInputStream(attachFile.getFileContent());
                    byte[] buffer = new byte[1024];
                    os = response.getOutputStream();
                    int len = 0;
                    while ((len = in.read(buffer)) > 0) {
                        os.write(buffer, 0, len);
                    }          
      

  3.   

    尝试每次读取1024个字节,写入buffer数组,如果少于1024,就会返回实际读取的字节,os.write(buffer);可能多了
      

  4.   

      write 会将缓冲数组全部写入进去的,而一个byte数组值默认是0,但是0也可以表示一个字节,所以当你的byte数组是空的时候也会写入文件中,也会导致文件打不开字节错乱的问题,   建议 要么用 in.available() 这个来创建数组长度,要么就用楼上的那个方法,指定从数组的位置结束填充
      

  5.   


    sorry,现在才回复,os.write(buffer, 0, len);这个的意思是将buffer里面0~len的字节写到输出流里面,下载的文件转换成字节流的字节数一般是不能被1024整除的,当输出最后一部分字节的时候,可能没有1024个字节,那么buffer字节数组里多出来的位置就是初始值0,这些也写到输出流里面去了,也就是多写了很多个值为0的字节进去,所以格式不对。 sorry,语言组织不好,见谅。