文件错误提示提示:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<recoveryLog xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"><logFileName>error023160_01.xml</logFileName>
<summary>在文件“C:\Users\微软中国\Desktop\EccForcast-ECC_2017_9.xlsx”
中检测到错误</summary><additionalInfo><info>Excel 已完成文件级验证和修复。此工作簿的某些部分可能已被修复或丢弃。
</info></additionalInfo></recoveryLog>
以下是我下载处理代码:
public static void DownLoadFile(string FilePath, string FileName)
{
try
{
//FilePath:服务器文件路径
System.IO.FileStream fs = System.IO.File.OpenRead(FilePath);
byte[] FileData = new byte[fs.Length];
fs.Read(FileData, 0, (int)fs.Length);
(HttpContext.Current.Handler as System.Web.UI.Page).Response.Clear();
(HttpContext.Current.Handler as System.Web.UI.Page).Response.ClearHeaders();
(HttpContext.Current.Handler as System.Web.UI.Page).Response.Buffer = true;
FileName = System.Web.HttpUtility.UrlEncode(System.Text.Encoding.UTF8.GetBytes(FileName));
(HttpContext.Current.Handler as System.Web.UI.Page).Response.ContentType = "application/octet-stream;charset=gbk";
(HttpContext.Current.Handler as System.Web.UI.Page).Response.AddHeader("Content-Disposition", "inline;filename=" + System.Convert.ToChar(34) + FileName + System.Convert.ToChar(34));
(HttpContext.Current.Handler as System.Web.UI.Page).Response.BinaryWrite(FileData);
(HttpContext.Current.Handler as System.Web.UI.Page).Response.Flush();
(HttpContext.Current.Handler as System.Web.UI.Page).Response.Clear();
System.Web.HttpContext.Current.ApplicationInstance.CompleteRequest();
fs.Close();
// System.IO.File.Delete(FilePath);
}
catch (Exception ex)
{
}
}
17 个解决方案
#1
为何要指定charset=gbk,excel和gbk貌似没什么关系吧
#2
我试下其他的编码
#3
并不是编码错误引起的,所以的我都试过了
#4
你可以参考下http://www.cnblogs.com/LoveQin/p/6846839.html
#5
把最后3行代码删掉。
另外,检查一下服务器端的 xlsx 文件是否能正常打开?有些所谓的“导出excel”功能产生的文件根本不是正规的 xlsx 文件,例如只不过是写了一个xml 文本,然后把文件名改为 .xlsx。那么这种文件在 Excel 打开时就会报警告。
另外,检查一下服务器端的 xlsx 文件是否能正常打开?有些所谓的“导出excel”功能产生的文件根本不是正规的 xlsx 文件,例如只不过是写了一个xml 文本,然后把文件名改为 .xlsx。那么这种文件在 Excel 打开时就会报警告。
#6
在服务器能正常打开,我有很多地方用到下载功能的,方法都一样,代码都一样的,就只有这个地方出问题,只是数据不一样
#7
生成xlsx的方法没问题,生成xlsx后能打开,就是通过下载再打开就出问题了
#8
生成xlsx的方法没问题,生成xlsx后能打开,就是通过下载再打开就出问题了
你要参考就是下载部分,生成excel那些代码和你无关
#9
各位说的方法我都试过了,不是这个原因
#10
对比一下下载到的文件和原始文件的文件大小。
文件不大的话直接io.file.readallbytes获取吧。二进制读的文件,编码不用关心。
文件不大的话直接io.file.readallbytes获取吧。二进制读的文件,编码不用关心。
#11
我打开xlsx文件提示如下图,是不是某些字符有问题?
#12
下载方法不对
public FileContentResult downLoadFile()
{
var file = File.OpenRead("filePath");
return File(file.Content, "appliction/octet-stream", "you want file Name");//第二参数根据文件类型调整
}
#13
下载方法不对
public FileContentResult downLoadFile()
{
var file = File.OpenRead("filePath");
return File(file.Content, "appliction/octet-stream", "you want file Name");//第二参数根据文件类型调整
}
#14
有没可能是因为某些字符不符规格,导致文件打不开的?
#15
对比一下原始文件和下载下来的文件的字节数。或者创建一个excel,只留一个sheet,在A1输入ABC,这样能得到一个最小体积的excel文件,直接断点DEBUG比对byte[],看是哪步的问题。
#16
对比一下原始文件和下载下来的文件的字节数。或者创建一个excel,只留一个sheet,在A1输入ABC,这样能得到一个最小体积的excel文件,直接断点DEBUG比对byte[],看是哪步的问题。
读取字节是一样的,下载后,下载文件就比原始文件要大。
完全想不到是哪出问题了,如果是下载,或者生成xlsx的方法错误,应该很多地方都出错的,但是就一个地方下载出错误
#17
下载时,数据写入时数据不完全,所以下载后打不开。使用一个较大的数组写入数据,把那个直接数组的长度写大一些。
#1
为何要指定charset=gbk,excel和gbk貌似没什么关系吧
#2
为何要指定charset=gbk,excel和gbk貌似没什么关系吧
我试下其他的编码
#3
为何要指定charset=gbk,excel和gbk貌似没什么关系吧
并不是编码错误引起的,所以的我都试过了
#4
并不是编码错误引起的,所以的我都试过了
你可以参考下http://www.cnblogs.com/LoveQin/p/6846839.html
#5
把最后3行代码删掉。
另外,检查一下服务器端的 xlsx 文件是否能正常打开?有些所谓的“导出excel”功能产生的文件根本不是正规的 xlsx 文件,例如只不过是写了一个xml 文本,然后把文件名改为 .xlsx。那么这种文件在 Excel 打开时就会报警告。
另外,检查一下服务器端的 xlsx 文件是否能正常打开?有些所谓的“导出excel”功能产生的文件根本不是正规的 xlsx 文件,例如只不过是写了一个xml 文本,然后把文件名改为 .xlsx。那么这种文件在 Excel 打开时就会报警告。
#6
把最后3行代码删掉。
另外,检查一下服务器端的 xlsx 文件是否能正常打开?有些所谓的“导出excel”功能产生的文件根本不是正规的 xlsx 文件,例如只不过是写了一个xml 文本,然后把文件名改为 .xlsx。那么这种文件在 Excel 打开时就会报警告。
在服务器能正常打开,我有很多地方用到下载功能的,方法都一样,代码都一样的,就只有这个地方出问题,只是数据不一样
#7
并不是编码错误引起的,所以的我都试过了
你可以参考下http://www.cnblogs.com/LoveQin/p/6846839.html
生成xlsx的方法没问题,生成xlsx后能打开,就是通过下载再打开就出问题了
#8
生成xlsx的方法没问题,生成xlsx后能打开,就是通过下载再打开就出问题了
你要参考就是下载部分,生成excel那些代码和你无关
#9
各位说的方法我都试过了,不是这个原因
#10
对比一下下载到的文件和原始文件的文件大小。
文件不大的话直接io.file.readallbytes获取吧。二进制读的文件,编码不用关心。
文件不大的话直接io.file.readallbytes获取吧。二进制读的文件,编码不用关心。
#11
我打开xlsx文件提示如下图,是不是某些字符有问题?
#12
下载方法不对
public FileContentResult downLoadFile()
{
var file = File.OpenRead("filePath");
return File(file.Content, "appliction/octet-stream", "you want file Name");//第二参数根据文件类型调整
}
#13
下载方法不对
public FileContentResult downLoadFile()
{
var file = File.OpenRead("filePath");
return File(file.Content, "appliction/octet-stream", "you want file Name");//第二参数根据文件类型调整
}
#14
有没可能是因为某些字符不符规格,导致文件打不开的?
#15
对比一下原始文件和下载下来的文件的字节数。或者创建一个excel,只留一个sheet,在A1输入ABC,这样能得到一个最小体积的excel文件,直接断点DEBUG比对byte[],看是哪步的问题。
#16
对比一下原始文件和下载下来的文件的字节数。或者创建一个excel,只留一个sheet,在A1输入ABC,这样能得到一个最小体积的excel文件,直接断点DEBUG比对byte[],看是哪步的问题。
读取字节是一样的,下载后,下载文件就比原始文件要大。
完全想不到是哪出问题了,如果是下载,或者生成xlsx的方法错误,应该很多地方都出错的,但是就一个地方下载出错误
#17
下载时,数据写入时数据不完全,所以下载后打不开。使用一个较大的数组写入数据,把那个直接数组的长度写大一些。