首页 > 其他 > 详细

关于Excel文件的导出

时间:2014-04-04 05:05:08      阅读:534      评论:0      收藏:0      [点我收藏+]

首先需要一个数据源,如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
DataTable dt=new DataTable();
dt.Columns.Add("Colum1",typeof(string));
dt.Columns.Add("Colum2",typeof(string));
dt.Columns.Add("Colum3",typeof(string));
 
//给表dt赋值(可以赋值多行)
DataRow dr=dt。NewRow();
dr["Colum1"]="数据1";
dr["Colum2"]="数据2";
dr["Colum3"]="数据3";
dt.Rows.Add(dr);
 
//赋中文标题
dt.Columns["Colum1"].Caption="列名1";
dt.Columns["Colum2"].Caption="列名2";
dt.Columns["Colum3"].Caption="列名3";
 
//更改整理列顺序
dt.Columns["Colum1"].SetOrdinal(0);
dt.Columns["Colum2"].SetOrdinal(1);
dt.Columns["Colum3"].SetOrdinal(2);

接着是把数据dt转换成Excel文件并且保存起来,以下代码是将数据保存成Excel2007文件类型

其中dt为我们需要传入的数据源(上述)

下面方法则为导出Excel2003的方法,其中大部分内容与2007相似

不同地方如下

1
2
//完整路径名为
string strExcelFullName=excelpath+"\\"+"excel1"+"xls";

接下来文件生成之后就是将文件下载到本地啦,任务已经完成了80%啦

1
2
3
4
5
//当返回的完整路径名(路径+文件名+格式)不为空时(returnFullFileName)
string returnExcelName=System.IO.Path.GetFileName(returnFullFileName);
string returnExcelPath=System.IO.Path.GetDirectoryName(returnFullFileName);
string url=string.Format("~/ViewFile.aspx?FileName={0}&FilePath={1}",System.Web.<br>HttpEncodeUnicode(returnExcelName),System.Web.HttpUtility.UrlEncodeUnicode(returnExcelPath.Replace("&","*")));
Response.Redirect(url);

其中ViewFile.aspx文件为公共下载页面,需要提供文件名和文件路径连个参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
using System;<br>using System.Collections.Generic;<br>using System.Linq;<br>using System.Web;<br>using System.Web.UI;<br>using System.Web.UI.WebControls;<br>using System.IO;<br>public partial class ViewFile:System.Web.UI.Page
{
    protected FileDownload.FileDownload ptsDownLoadFile;
    private void Page_Load(object sender,System.EventArgs e)
    {
        string strFilePath="";
        string strFileName="";
        if(Request.QueryString["FileName"]!=null)
        {
            strFileName=Request.QueryString["FileName"].ToString();
            strFileName=Server.UrlDecode(strFileName.Replace("*","&"));
        }
        if(Request.QueryString["FilePath"]!=null)
        {
            strFilePath=Request.QueryString["FilePath"].ToString();
            strFilePath=strFilePath.Replace("^^","\\");
            strFilePath=Server.UrlDecode(strFilePath.Replace("*","&"));
        }
        try
        {
            FileDownload.FileDownload fDownload = new FileDownload.FileDownload();
            //文件路径
        fDownload.FileDownloadDirectory=strFilePath+"\\"+strFileName;
            string strFullName=strFileName;
            if(FileLen(strFileName)>155)
            {
                //文件名称长度大于155,截取文件名称,将文件拷贝到临时文件夹下下载
            string strTempDownloadFolder=Server.MapPath("../")+"\\Download"+"\\"+"XX";
                  if(!Directory.Exists(strTempDownloadFolder))
                  {
                       Directory.CreateDirectory(strTempDownloadFolder);    
                  }
                  string[] strFileNameArr=strFileName.split(‘.‘);
                  string strExtName="."+strFileNameArr[strFileNameArr.Length-1];
                  //获取文件名,不包括后缀,不使用strFileNameArr[0]是为了防止文件名中含有“.”
                  string strPrevName=strFileName.Replace(strExtName,"");
                  int iLen=100-strExtName.Length;
                  strPrevName=SubStr(strPrevName,iLen);
 
                  File.Copy(strFilePath+"\\"+strFileName,strTempDownloadFolder+"\\"+strPrevName+strExtName,<br>true);
                  strFilePath=strTempDownloadFolder;
                  strFileName=strPrevName+strExtName;
            }
            //下载,文件不存在或下载出错时会弹出相应提示,并会在downloadlogfile文件夹下记录日志
            fDownload.DownloadFile(Response,strFullName);
            if(Request["RUrl"]!=null)
            {
                Scriptmanager.RegisterClientScriptBlock(this,Page.GetType(),"javascript",<br>"window.location.href=‘"+Request["RUrl"].ToString()+"‘;",true);
            }
        }
        catch(Exception ex)
        {
            SysLog sl=new SysLog();
            sl.WriteErrorLog("File","下载文件失败:",ex);
         //此处的try不能去掉,否则第2次点击附件下载时不会弹出下载框,是什么原因目前还不清楚
        }
    }
    //计算文件名称长度
    private int FileLen(string strFileName)
    {
        int iLen=0;
        for(int i=0;i<strFileName.Length;i++)
        {
            string str=strFileName.Substring(i,1);
            if(Convert.ToInt32(Convert.ToChar(str))>255 || Convert.ToInt32(Convert.ToChar(str))<0)
            {
                iLen+=9;
            }
            else
            {
                iLen+=1;
            }
        }
    }
     //截取字符串
    private string SubStr(string strVal,int len)   
      {
            int iLen=0;
            string strRtn="";
            for(int i=0;i<strVal.Length;i++)
            {
                string str=strFileName.Substring(i,1);
                if(Convert.ToInt32(Convert.ToChar(str))>255 || Convert.ToInt32(Convert.ToChar(str))<0)
                {
                    iLen+=9;
                }
                else
                {
                    iLen+=1;
                }
                if(iLen>len)
                {
                    break;
                }
                strRtn+=str;
            }
            return strRtn;
      }
 
}

ViewFile.aspx中所使用的记录日志的方法和文件下载方法定义如下

文件下载方法

1
2
3
4
5
6
7
8
9
10
11
12
using System;
using System.Web;
namespace FileDownload
{
    public class FileDownload
    {
        public FileDownload();
        public string FileDownloadDirectory{get;set;}
        public bool DownloadFile(HttpResponse Response,string sFileName);
        public bool ExistsFile();
    }
}

记录日志方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
using System;
using System.IO;
 
namespace XXX.Common
{
    public class SysLog
    {
        public SysLog()
        {
            //在此处添加构造函数逻辑
        }
 
        public void WriteErrorLog(string strUser,string strLog,Exception ex)
        {
            try
            {
                string strPath=System.Web.HttpContext.Current.Server.MapPath(System.Web.<br>HttpContext.Current.Request.ApplicationPath+@"/logfile");
                if(!Directory.Exists(strPath))
                {
                    Directory.CreateDirectory(strPath);
                }
                string strFile=strPath+@"/"+strUser+"_"+DateTime.Now.ToString("yyyyMMdd")+".txt";
                if(!File.Exists(strFile))
                {
                    FileStream fs=File.Create(strFile);
                    fs.Close();
                }
                StreamWriter sw=new StreamWriter(strFile,true);
                sw.WriteLine("--------------------------------------------");//TXT文件里的分隔线
           sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
                sw.WriteLine(strLog);
                sw.WriteLine(strLog);
                if(ex!=null)
                {
                    sw.Write(ex.Message+"\r\n");
                    sw.Write(ex.Source+"\r\n");
                    sw.Write(ex.StackTrace+"\r\n");
                    sw.Write(ex.TargetSite+"\r\n");
                }
                sw.Close();
            }
            catch
            {}
        }
    }
}

  

  

 

关于Excel文件的导出,布布扣,bubuko.com

关于Excel文件的导出

原文:http://www.cnblogs.com/jeforser/p/3643135.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!