导出excel文件出现的有关问题
导出excel文件出现的问题
代码如下
问题就是能够正常的生成excel文件,下载下来后,打开的时候会提示“您尝试打开的文件”学生成绩.xls“的格式与扩展名指定的格式不一样,打开文件前请验证文件没有损坏且来源可信”,然后我就把后缀名改成xlsx试了一下,仍然是这个错误。拜托大家指点下
------解决方案--------------------
1、打开注册表编辑器
方法:开始 -> 运行 -> 输入regedit -> 确定
2、找到注册表子项
HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Excel\Security
3、在右侧空白处点击鼠标右键,选择“新建 -> DWORD值(D)”,输入“ExtensionHardening”点击确定。
4、用鼠标右键点击ExtensionHardening,然后单击“修改(M)”,在数值数据中填写“0”即可确定。
5、关闭注册表编辑器,再次打开xls文件看看是不是提示是不是不见了?
小知识:ExtensionHardening设置的值的数据设置:
* 0: 不检查文件扩展名和文件类型并绕过该函数的警告消息。
* 1: 检查文件扩展名和文件类型。如果它们不匹配会显示警告消息。
* 2: 检查文件扩展名和文件类型。如果它们不匹配不要打开该文件。
试一下行不行
代码如下
- C# code
Scores score = new Scores(); //创建Scores对象 DataSet ds = score.QueryScore(); //调用QueryScore方法查询成绩并将查询结果放到DataSet数据集中 DataTable DT = ds.Tables[0]; //生成将要存放结果的Excel文件的名称 string NewFileName = DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls"; //转换为物理路径 NewFileName = Server.MapPath("Temp/" + NewFileName); //根据模板正式生成该Excel文件 File.Copy(Server.MapPath("../Module01.xls"), NewFileName, true); //建立指向该Excel文件的数据库连接 string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + NewFileName + ";Extended Properties='Excel 8.0;'"; OleDbConnection Conn = new OleDbConnection(strConn); //打开连接,为操作该文件做准备 Conn.Open(); OleDbCommand Cmd = new OleDbCommand("", Conn); foreach (DataRow DR in DT.Rows) { string XSqlString = "insert into [Sheet1$]"; XSqlString += "([用户姓名],[试卷],[成绩],[考试时间]) values("; XSqlString += "'" + DR["UserName"] + "',"; XSqlString += "'" + DR["PaperName"] + "',"; XSqlString += "'" + DR["Score"] + "',"; XSqlString += "'" + DR["ExamTime"] + "')"; Cmd.CommandText = XSqlString; Cmd.ExecuteNonQuery(); } //操作结束,关闭连接 Conn.Close(); //打开要下载的文件,并把该文件存放在FileStream中 System.IO.FileStream Reader = System.IO.File.OpenRead(NewFileName); //文件传送的剩余字节数:初始值为文件的总大小 long Length = Reader.Length; Response.Buffer = false; Response.AddHeader("Connection", "Keep-Alive"); Response.ContentType = "application/octet-stream"; Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode("学生成绩.xls")); Response.AddHeader("Content-Length", Length.ToString()); byte[] Buffer = new Byte[10000]; //存放欲发送数据的缓冲区 int ByteToRead; //每次实际读取的字节数 while (Length > 0) { //剩余字节数不为零,继续传送 if (Response.IsClientConnected) { //客户端浏览器还打开着,继续传送 ByteToRead = Reader.Read(Buffer, 0, 10000); //往缓冲区读入数据 Response.OutputStream.Write(Buffer, 0, ByteToRead); //把缓冲区的数据写入客户端浏览器 Response.Flush(); //立即写入客户端 Length -= ByteToRead; //剩余字节数减少 } else { //客户端浏览器已经断开,阻止继续循环 Length = -1; } } //关闭该文件 Reader.Close(); //删除该Excel文件 File.Delete(NewFileName);
问题就是能够正常的生成excel文件,下载下来后,打开的时候会提示“您尝试打开的文件”学生成绩.xls“的格式与扩展名指定的格式不一样,打开文件前请验证文件没有损坏且来源可信”,然后我就把后缀名改成xlsx试了一下,仍然是这个错误。拜托大家指点下
------解决方案--------------------
1、打开注册表编辑器
方法:开始 -> 运行 -> 输入regedit -> 确定
2、找到注册表子项
HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Excel\Security
3、在右侧空白处点击鼠标右键,选择“新建 -> DWORD值(D)”,输入“ExtensionHardening”点击确定。
4、用鼠标右键点击ExtensionHardening,然后单击“修改(M)”,在数值数据中填写“0”即可确定。
5、关闭注册表编辑器,再次打开xls文件看看是不是提示是不是不见了?
小知识:ExtensionHardening设置的值的数据设置:
* 0: 不检查文件扩展名和文件类型并绕过该函数的警告消息。
* 1: 检查文件扩展名和文件类型。如果它们不匹配会显示警告消息。
* 2: 检查文件扩展名和文件类型。如果它们不匹配不要打开该文件。
试一下行不行