using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Web;namespace MVCStudy.Helper
{public class ExcelHandle{/// <summary> /// 将DataTable数据导出到Excel文件中(xlsx) /// </summary> /// <param name="dt">数据源</param> /// <param name="excelName">文件名称</param> public static void TableToExcelForXLSX(DataTable dt, string excelName){XSSFWorkbook xssfworkbook = new XSSFWorkbook();ISheet sheet = xssfworkbook.CreateSheet("Test");//表头 IRow row = sheet.CreateRow(0);for (int i = 0; i < dt.Columns.Count; i++){ICell cell = row.CreateCell(i);cell.SetCellValue(dt.Columns[i].ColumnName);}//数据 for (int i = 0; i < dt.Rows.Count; i++){IRow row1 = sheet.CreateRow(i + 1);for (int j = 0; j < dt.Columns.Count; j++){ICell cell = row1.CreateCell(j);cell.SetCellValue(dt.Rows[i][j].ToString());}}HttpContext curContext = HttpContext.Current;curContext.Response.Clear();curContext.Response.ContentType = "application/x-excel";string filename = HttpUtility.UrlEncode(excelName + DateTime.Now.ToString("yyyyMMddHHmm") + ".xlsx");curContext.Response.AddHeader("Content-Disposition", "attachment;filename=" + filename);xssfworkbook.Write(curContext.Response.OutputStream);curContext.Response.End();}/// <summary>/// 读取excel(版本不低于2007)至DataTable/// </summary>/// <param name="file"></param>/// <returns></returns>public static DataTable ExcelToTableForXLSX(string file){DataTable dt = new DataTable();using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read)){XSSFWorkbook xssfworkbook = new XSSFWorkbook(fs);ISheet sheet = xssfworkbook.GetSheetAt(0);//表头  IRow header = sheet.GetRow(sheet.FirstRowNum);List<int> columns = new List<int>();for (int i = 0; i < header.LastCellNum; i++){object obj = GetValueTypeForXLSX(header.GetCell(i) as XSSFCell);if (obj == null || obj.ToString() == string.Empty){dt.Columns.Add(new DataColumn("Columns" + i.ToString()));}elsedt.Columns.Add(new DataColumn(obj.ToString()));columns.Add(i);}//数据  for (int i = sheet.FirstRowNum + 1; i <= sheet.LastRowNum; i++){DataRow dr = dt.NewRow();bool hasValue = false;foreach (int j in columns){dr[j] = GetValueTypeForXLSX(sheet.GetRow(i).GetCell(j) as XSSFCell);if (dr[j] != null && dr[j].ToString() != string.Empty){hasValue = true;}}if (hasValue){dt.Rows.Add(dr);}}}return dt;}/// <summary>  /// 获取单元格类型(xlsx)  /// </summary>  /// <param name="cell"></param>  /// <returns></returns>  private static object GetValueTypeForXLSX(XSSFCell cell){if (cell == null)return null;switch (cell.CellType){case CellType.Blank: //BLANK:  return null;case CellType.Boolean: //BOOLEAN:  return cell.BooleanCellValue;case CellType.Numeric: //NUMERIC:  return cell.NumericCellValue;case CellType.String: //STRING:  return cell.StringCellValue;case CellType.Error: //ERROR:  return cell.ErrorCellValue;case CellType.Formula: //FORMULA:  default:return "=" + cell.CellFormula;}}/// <summary>/// 将List导出到Excel/// </summary>/// <param name="enList">List数据</param>/// <param name="fileName">Excel文件名</param>/// <param name="sheetName">Excel工作表名</param>/// <param name="cell0Value">首行提示信息</param>public void IListToExcel( IList enList, string fileName, string sheetName,string cell0Value){IWorkbook workbook = new XSSFWorkbook();ISheet sheet = workbook.CreateSheet(sheetName);sheet.CreateRow(0).CreateCell(0).SetCellValue(cell0Value);List<string> Ihead = new List<string>();Type types = enList[0].GetType();foreach(var item in types.GetProperties()){Ihead.Add(item.Name);}IRow row1 = sheet.CreateRow(1);for (int i = 0; i < Ihead.Count; i++){row1.CreateCell(i).SetCellValue(Ihead[i]);}int rowIndex = 2;foreach (var item in enList){IRow rowTmp = sheet.CreateRow(rowIndex);for (int i = 0; i < Ihead.Count; i++){System.Reflection.PropertyInfo properotyInfo = item.GetType().GetProperty(Ihead[i]); // 属性的信息object properotyValue = properotyInfo.GetValue(item, null);// 属性的值string cellValue = properotyValue.ToString()??null;// 单元格的值
                    rowTmp.CreateCell(i).SetCellValue(cellValue);}rowIndex++;}using (FileStream file = new FileStream(fileName, FileMode.Create)){workbook.Write(file);file.Close();}}}
}

转载于:https://www.cnblogs.com/fuxuyang/p/7210930.html

ExcelHandle相关推荐

  1. 浅谈python+requests实现接口自动化

    前言 今年2月调去支持项目接口测试,测试过程中使用过postman.jmeter工具,基本能满足使用,但是部分情况下使用较为麻烦. 比如:部分字段存在唯一性校验或字段间有业务性校验,每次请求均需手工修 ...

  2. Python将py文件生成exe文件

    使用PyCham软件运行生成可执行文件后,最完美的就是将py文件生成exe文件,这样可以任意复制移植到其他电脑上,供他人共享. 由于新手初步尝试,自己一个人摸索,遇到了很多坑.这里先给出最简单有效的方 ...

  3. JAVA EXCEL API(jxl)简介

    Java Excel是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该 API非 Windows操作系统也可以通过纯Ja ...

  4. python读取excel,数字都是浮点型,日期格式是数字的解决办法

    excel文件内容: 读取excel: # coding=utf-8 import xlrd import sysreload(sys) sys.setdefaultencoding('utf-8') ...

  5. 基于Spring开发的DUBBO服务接口测试

    基于Spring开发的DUBBO服务接口测试 知识共享主要内容: 1. Dubbo相关概念和架构,以及dubbo服务程序开发步骤. 2. 基于Spring开发框架的dubbo服务接口测试相关配置. 3 ...

  6. 经常需要在开发中使用Excel COM,为简化使用写了这个类,感觉还是不太方便

     1using System;   2   3namespace ExcelHandle   4{   5    /**//// <summary>   6    /// ExcelHan ...

  7. Excel数据导入数据库(Java)

    Excel 文件数据导入数据库 首先说明下读写Excel三种常用的技术: POI : 效率高,操作相对JXL复杂,支持公式,宏,图像图表,一些企业应用上会比较实用.能够修饰单元格属性.字体 数字 日期 ...

  8. 关于JXL读写以及修改EXCEL文件转

    首先引用网上的文章,谈谈JXL与POI的区别 POI为apache公司的一个子项目,主要是提供一组操作windows文档的Java API.  Java Excel俗称jxl是一开放源码项目,通过它J ...

  9. Java生成和操作Excel文件

    JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该API非Windows操作系统也可以通过 ...

最新文章

  1. 用python打造一款文件搜索工具,所有功能自己定义!
  2. 美团爱问Kafka?太真实了!
  3. 尚硅谷谷粒学院2020 高级篇代码_尚硅谷联合KubeSphere ,共同打造企业级云原生课程!...
  4. 信息安全系统设计基础第十五周总结
  5. .net项目开发工具最新动态
  6. ESP8266固件烧录软件flash_download_tools的安装过程
  7. 司空见惯 - 英雄扫雷鼠
  8. 弹出启动windows安全中心服务器,Win10每次开机都弹出启用Windows安全中心服务怎么办?...
  9. rtx2060为什么叫智商卡_作为世界上智商最低的狗种之一,中华田园犬是否“名副其实”?...
  10. XMU 1612 刘备闯三国之桃园结义 【二分】
  11. R语言绘制带误差和可信区间的折线图
  12. 创建简易的金融数据库
  13. 深度理解面向对象的基础-抽象(一)
  14. wifi mesh组网
  15. 【论文笔记】MultiPath: Multiple Probabilistic Anchor TrajectoryHypotheses for Behavior Prediction
  16. 查看zookeeper的版本号
  17. 文件扩展名有误?怎么批量修改文件扩展名?
  18. win10计算机导航栏怎么删除,如何自定义导航栏?win10资源管理器导航栏删除多余选项的操作方法...
  19. 保姆的式教程手把手教你,菜鸟玩转博客搭建!
  20. 不想丧班?BOSS直聘包场邀你免费嗨唱一夜 | 互联网行业公会

热门文章

  1. 一图解惑SQL JOINS
  2. golang *time.Time类型转*timestamppb.Timestamp
  3. redis专题:redis缓存穿透、缓存击穿、缓存雪崩等问题如何解决?
  4. CentOS离线安装gcc4.8.2 + 并安装网卡驱动
  5. Python精通-运算符与基本数据类型(一)
  6. OSTaskDelReq()--请求删除任务函数
  7. Eureka实例自动过期
  8. java模拟多线程买票问题
  9. (四十九)java SpringCloud版本b2b2c鸿鹄云商平台全套解决方案
  10. 字符串拷贝记得strcpy