C#使用Datatable导出Excel

本文实例为大家分享了C#使用Datatable导出Excel的具体代码,供大家参考,具体内容如下

using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using Newtonsoft.Json;
namespace EasyFrame.Common
{
 /// <summary>
 ///title调用信息
 /// </summary>
 public class ChartTitle
 {
  /// <summary>
  /// 调用名
  /// </summary>
  public string CallName { get; set; }
  /// <summary>
  /// 标头信息
  /// </summary>
  public List<ChartName> SetNameList { get; set; }
 }
 public class ChartName
 {
  /// <summary>
  /// 一级标头
  /// </summary>
  public string Name { get; set; }
  /// <summary>
  /// 二级标头
  /// </summary>
  public List<string> ChartChildNameList { get; set; }

 }

 public class ExcelHelper
 {

  //
  /// <summary>
  /// Datatable导出Excel
  /// </summary>
  /// <param name="dt">数据</param>
  /// <param name="list">表头</param>
  /// <param name="counts">总条数</param>
  /// <param name="filePath">保存地址</param>
  /// <returns></returns>
  public static MemoryStream WriteExcel(DataTable dt, List<ChartTitle> objlist, string filePath)
  {
   var list = objlist.FirstOrDefault(a => a.CallName == "ccc").SetNameList;
   if (!string.IsNullOrEmpty(filePath) && null != dt && dt.Rows.Count > 0)
   {
    XSSFWorkbook book = new XSSFWorkbook();
    NPOI.SS.UserModel.ISheet sheet = book.CreateSheet(dt.TableName);
    ICell cell = null;
    ICellStyle style = book.CreateCellStyle();
    IFont font = book.CreateFont();//创建字体样式
    IFont fonts = book.CreateFont();//创建字体样式
    IFont fontss = book.CreateFont();//创建字体样式
    font.Color = NPOI.HSSF.Util.HSSFColor.Red.Index;//设置字体颜色
    ICellStyle styles = book.CreateCellStyle(); //红色
    fonts.Color = NPOI.HSSF.Util.HSSFColor.Green.Index;
    ICellStyle styless = book.CreateCellStyle(); //绿色
    fontss.Color = NPOI.HSSF.Util.HSSFColor.Blue.Index;
    ICellStyle stylesss = book.CreateCellStyle(); //蓝色
    styless.SetFont(fonts);
    styles.SetFont(font);
    stylesss.SetFont(fontss);
    style.Alignment = HorizontalAlignment.Center;
    NPOI.SS.UserModel.IRow row1 = sheet.CreateRow(0);
    NPOI.SS.UserModel.IRow row2 = sheet.CreateRow(1);
    var row = row1;
    int num = 0;//记录列
    var d = true;//是否第一次加载到二级表单
    #region 创建表头
    //两行单列
    for (int i = 0; i < list.Count; i++)
    {
     if (!d)
     {
      row = row1;
      d = true;
     }
     if (list[i].ChartChildNameList == null)
     {
      cell = row.CreateCell(num);
      sheet.SetColumnWidth(num, 15 * 256);
      cell.SetCellValue(list[i].Name);
      cell.CellStyle = style;
      sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 1, num, num));
      num++;
      continue;
     }
     //两行多列
     var count = list[i].ChartChildNameList.Count; //列数
     cell = row.CreateCell(num);
     cell.SetCellValue(list[i].Name);
     cell.CellStyle = style;
     sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 0, num, count + num - 1));
     if (d)
     {
      d = false;
      row = row2;
     }
     var t = 0;
     var rang = sheet.GetRow(1);
     for (int j = 0; j < count; j++)
     {
      sheet.SetColumnWidth(num + t, 5 * 256);
      cell = row.CreateCell(num + t);
      cell.SetCellValue(list[i].ChartChildNameList[j]);
      cell.CellStyle = style;
      t++;
     }
     num = num + count;
    }
    #endregion 创建表头
    #region 写入数据
    int customs = 0;//记录列数
    int clouns = 0;//记录行数

    filePath = string.Format(filePath, "XXX");
    #region 导出操作
    var data1 = JsonConvert.DeserializeObject<List<类名>>(dt.Rows[0][0].ToString());
    foreach (var item in data1)
    {
     NPOI.SS.UserModel.IRow rows = sheet.CreateRow(clouns + 2);
     customs = 0;
     rows.CreateCell(customs).SetCellValue(Convert.ToString(item.No)); customs++;
     rows.CreateCell(customs).SetCellValue(Convert.ToString(item.LotteryOpenNo)); customs++;
     for (int i = 0; i < item.Wan.Length; i++)
     {
      if (item.LotteryOpenNo.Split(',')[0] == item.Wan[i].ToString())
      {
       cell = rows.CreateCell(customs);
       cell.SetCellValue(item.Wan[i]);
       cell.CellStyle = styles;
       customs++;
      }
      else
      {
       rows.CreateCell(customs).SetCellValue(item.Wan[i]); customs++;
      }
     }
     for (int j = 0; j < item.Qian.Length; j++)
     {
      if (item.LotteryOpenNo.Split(',')[1] == item.Qian[j].ToString())
      {
       cell = rows.CreateCell(customs);
       cell.SetCellValue(item.Qian[j]);
       cell.CellStyle = styles;
       customs++;
      }
      else
      {
       rows.CreateCell(customs).SetCellValue(item.Qian[j]); customs++;
      }
     }
     for (int k = 0; k < item.Bai.Length; k++)
     {
      if (item.LotteryOpenNo.Split(',')[2] == item.Bai[k].ToString())
      {
       cell = rows.CreateCell(customs);
       cell.SetCellValue(item.Bai[k]);
       cell.CellStyle = styles;
       customs++;
      }
      else
      {
       rows.CreateCell(customs).SetCellValue(item.Bai[k]); customs++;
      }
     }
     for (int l = 0; l < item.Shi.Length; l++)
     {
      if (item.LotteryOpenNo.Split(',')[3] == (item.Shi[l].ToString()))
      {
       cell = rows.CreateCell(customs);
       cell.SetCellValue(item.Shi[l]);
       cell.CellStyle = styles;
       customs++;
      }
      else
      {
       rows.CreateCell(customs).SetCellValue(item.Shi[l]); customs++;
      }
     }
     for (int m = 0; m < item.Ge.Length; m++)
     {
      if (item.LotteryOpenNo.Split(',')[4] == (item.Ge[m].ToString()))
      {
       cell = rows.CreateCell(customs);
       cell.SetCellValue(item.Ge[m]);
       cell.CellStyle = styles;
       customs++;
      }
      else
      {
       rows.CreateCell(customs).SetCellValue(item.Ge[m]); customs++;
      }
     }
     for (int n = 0; n < item.Fen.Length; n++)
     {
      if (item.LotteryOpenNo.Contains(item.Fen[n].ToString()))
      {
       cell = rows.CreateCell(customs);
       cell.SetCellValue(item.Fen[n]);
       cell.CellStyle = styles;
       customs++;
      }
      else
      {
       rows.CreateCell(customs).SetCellValue(item.Fen[n]); customs++;
      }

     }
     clouns++;
    }

    #endregion

    #endregion 写入数据
    // 写入到客户端
    using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
    {
     book.Write(ms);
     using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))
     {
      byte[] data = ms.ToArray();
      fs.Write(data, 0, data.Length);
      fs.Flush();
     }
     book = null;
     return ms;
    }
   }
   return null;
  }

 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C#实现Json转DataTable并导出Excel的方法示例

    本文实例讲述了C#实现Json转DataTable并导出Excel的方法.分享给大家供大家参考,具体如下: 需求:有一个log文件,需要整理成Excel,日志文件里面的数据都是json字符串 思路是,把Json字符串转换成DataTable,然后导出到Excel 在网上找了一些资料,整理了以下三种类型的Json 一.Json转换DataTable 1.处理简单Json: [{"mac":"20:f1:7c:c5:cd:80","rssi":&qu

  • c# 将Datatable数据导出到Excel表格中

    话不多说,请看代码: public FileResult GetExcelFile() { if (Session["beginDate"] != null) { string bdate = Session["beginDate"].ToString(); DateTime ld = Convert.ToDateTime(Session["lastDate"].ToString()); DateTime ldate = ld.AddDays(1

  • c#扩展datatable转json示例

    复制代码 代码如下: namespace PadWebServices.Model{   public static class DataTableExtender    {       public static string ToJson(this DataTable dt,string tbName)  // this DataTable 标识对DataTable类的扩展            {                StringBuilder JsonString = new

  • C#中的DataSet、string、DataTable、对象转换成Json的实现代码

    C#中对象,字符串,dataTable.DataReader.DataSet,对象集合转换成Json字符串方法. public class ConvertJson { #region 私有方法 /// <summary> /// 过滤特殊字符 /// </summary> /// <param name="s">字符串</param> /// <returns>json字符串</returns> private s

  • C#实现将json转换为DataTable的方法

    本文实例讲述了C#实现将json转换为DataTable的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: #region 将json转换为DataTable /// <summary> /// 将json转换为DataTable /// </summary> /// <param name="strJson">得到的json</param> /// <returns></returns> pr

  • C#中把Datatable转换为Json的5个代码实例

    实例一: 复制代码 代码如下: /// <summary>         /// Datatable转换为Json         /// </summary>        /// <param name="table">Datatable对象</param>         /// <returns>Json字符串</returns>         public static string ToJson(D

  • C#中DataTable 转换为 Json的方法汇总(三种方法)

    在web开发中,我们可能会有这样的需求,为了便于前台的JS的处理,我们需要将查询出的数据源格式比如:List<T>.DataTable转换为Json格式.特别在使用Extjs框架的时候,Ajax异步请求的数据格式就是Json.鉴于此,我今天来分享将DataTable 转换成 Json的3种方法.换句话说如何在ASP.NET将一个DataTable序列化为 Json数组.或者如何从一个DataTable返回一个Json字符串.这篇文章将采用StringBuilder,JavaScriptSeri

  • C#如何将DataTable导出到Excel解决方案

    最近,由于公司项目中需要将系统内用户操作的所有日志进行转存备份,考虑到以后可能还需要还原,所以最后决定将日志数据备份到Excel中. 下面是我项目当中Excel.cs这个类的全部代码,通过这个类可以很容易地将DataTable中的数据导入到Excel方法中. 首先,必须要下载NPOI.dll这个程序集, 类代码如下: 复制代码 代码如下: using System; using NPOI.HSSF; using NPOI.HPSF; using NPOI.HSSF.UserModel; usin

  • C#实现DataTable,List和Json转换的方法

    本文实例讲述了C#实现DataTable,List和Json转换的方法.分享给大家供大家参考,具体如下: 1. 将DataTable或Ilist<>转换成JSON格式 using System; using System.Data; using System.Text; using System.Collections.Generic; using System.Reflection; /// <summary> /// 将DataTable或Ilist<>转换成JSO

  • asp.net DataTable导出Excel自定义列名的方法

    1.添加引用NPOI.dll 2.cs文件头部添加 using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using System.IO; 3.代码如下: using System; using System.Collections.Generic; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Configuration;

  • C#使用Datatable导出Excel

    本文实例为大家分享了C#使用Datatable导出Excel的具体代码,供大家参考,具体内容如下 using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using Newtonsoft.Json; namespace EasyFrame.Com

  • Asp.net中DataTable导出到Excel的方法介绍

    复制代码 代码如下: #region  DataTable导出到Excel        /// <summary>        /// DataTable导出到Excel        /// </summary>        /// <param name="pData">DataTable</param>        /// <param name="pFileName">导出文件名</p

  • C#把DataTable导出为Excel文件

    实现DataTable转为Excel文件,和上次分享的Excel文件转为DataTable互为反操作.DataTable转化为Excel文件是通过传入一个DataTable类型的参数,然后将传入的DataTable转化为Excel文件.实现关键代码如下: 方法一: /// <summary> /// DataTable数据导出Excel /// </summary> /// <param name="data"></param> ///

  • Aspnetpager对GridView分页并顺利导出Excel

    一.前言 谈到分页,在网页上简直到处都是.网络的资源越来越多,如果不用分页技术来显示,就会拖拉很长很长.下面给大家分享分页技术. 二.基本要点 当要显示数据量足够大的时候,我们往往采用分页显示的处理办法.分页有真分页和假分页. 假分页:从数据库中取出所有的数据,然后分页在界面上显示.访问一次数据库,但由于选择的数据量比较大,所以第一次花费时间比较长,但之后每一页的显示都是直接.快速的,避免对数据库的多次访问. 真分页:确定要显示的数量和内容,然后每次都去数据库取出该少量数据,优点是数据量小,缺点

  • asp.net 利用NPOI导出Excel通用类的方法

    解决中文文件名保存Excel乱码问题,主要是判断火狐或者IE浏览器,然后做对应的判断处理,核心代码如下: System.Web.HttpContext.Current.Response.ContentType = "application/vnd.ms-excel"; //设置下载的Excel文件名\ if (System.Web.HttpContext.Current.Request.ServerVariables["http_user_agent"].ToStr

  • Asp.Net使用Npoi导入导出Excel的方法

    asp.net针对Excel文件的导入与导出是非常常见的功能之一.本文实例讲述了Asp.Net使用Npoi导入导出Excel的方法.分享给大家供大家参考之用.具体方法如下: 在使用Npoi导出Excel的时候,服务器可以不装任何office组件,一般在导出时用到Npoi导出Excel文件,所导Excel也符合规范,打开时也不会有任何文件损坏之类的提示.但是在做导入时还是使用OleDb的方式,这种方式的导入在服务器端似乎还是需要装office组件的. 一.Npoi导出/下载Excel 具体功能代码

  • ASP.NET使用GridView导出Excel实现方法

    本文实例讲述了ASP.NET使用GridView导出Excel实现方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: /// <summary>  /// 将DataTable数据导出到EXCEL,调用该方法后自动返回可下载的文件流  /// </summary>  /// <param name="dtData">要导出的数据源</param>  public static void DataTable1Excel(S

  • GridView选择性导出Excel解决方案

    一.需求分析 首先根据用户需求,可以进行选择性导出,之前已经做了全部导出,这次新需求又来了,不过仔细想想也对,全部导出几万条数据,意义并不大,而可选择性的导出用户需要的数据才是用户需要的.有需求就有解决方法. 任何问题的解决方法都不止一个,GridView的选择性导出也一样,首先GridView绑定的是数据库的表数据,选择导出,我们也可以从数据中查询需要的数据,可以直接从前台GridView表中取得数据,问题来了,怎么判断选中了,怎么后去选中的那条信息的主键(或者获得整条信息)两个方向,到底哪个

随机推荐