ASP.NET中Excel的导入和导出

导入导出功能一般是安装第三方组件实现的。
安装微软的Office太不友好就不考虑了,简单说下一般方法。

导入

导入的话可以使用组件。使用NPOI组件是一个不错的选择。NPOI官网教程http://npoi.codeplex.com/SourceControl/latest

导出

导出分两种情况:本地Excel文件导出的话直接导出就ok了,但是一般是从数据库读取数据后导出为Excel文件的。使用上面的组件NPOI也可以。这里介绍另一种方法:导出CSV文件。
什么是CSV文件?

  • CSV是字符分隔值文件。
  • 一般以英文逗号分割一行的值。
  • 纯文本文件被广泛地兼容。

建立一个txt文件,后缀名改为csv,可以看见默认是用Excel打开的。开打效果和xls文件一样。
这里写图片描述
这里写图片描述

思路:将数据使用逗号和换行符拼接成字符串,转化为字节数组,然后设置输出的Header头文件的字节长度、Mime类型为Excel、文件名,然后输出字节数组。

   /// <summary>
    /// 输出CSV文件
    /// </summary>
    public  class ExcelHelper
    {
        public void ExportExcel(DataTable dt)
        {
            MemoryStream ms = new MemoryStream();
            StreamWriter sw = new StreamWriter(ms, Encoding.GetEncoding("GB2312"));
            StringBuilder strbu = new StringBuilder();
            //标题
            for (int i = 0; i < dt.Columns.Count; i++)
            {
                strbu.Append(dt.Columns[i].ColumnName.ToString() + "\t");
            }
            //加入换行字符串
            strbu.Append(Environment.NewLine);
            //写入内容
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                for (int j = 0; j < dt.Columns.Count; j++)
                {
                    strbu.Append(dt.Rows[i][j].ToString() + "\t");
                }
                strbu.Append(Environment.NewLine);
            }
            sw.Write(strbu.ToString());
            sw.Flush();
            sw.Close();
            sw.Dispose();
            //转换为字节数组
            byte[] bytes = ms.ToArray();
            ms.Close();
            ms.Dispose();
            OutputClient(bytes);
        }
        public void OutputClient(byte[] bytes)
        {
            HttpResponse response = HttpContext.Current.Response;
            response.Buffer = true;
            response.Clear();
            response.ClearHeaders();
            response.ClearContent();
            response.ContentType = "application/vnd.ms-excel";
            response.AddHeader("Content-Length",bytes.Length.ToString());
            response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.xls", DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss")));
            response.Charset = "GB2312";
            response.ContentEncoding = Encoding.GetEncoding("GB2312");
            response.BinaryWrite(bytes);
            response.Flush();
            response.Close();
        }
    }

CSV注意点:

  • 1.数字都以科学计数法来标记。要将数字转化为文本类型请使用英文的单引号。
  • 2.空值单元格也要写。
  • 3.其它详情请查阅相关文件。

猜你喜欢

转载自blog.csdn.net/qq_34720759/article/details/79190590
今日推荐