1、添加引用

2、封装方法

using System;
using System.Data;
using System.IO;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel; namespace Demo
{
/// <summary>
/// Excel操作类
/// </summary>
public class Excel
{
private readonly HSSFWorkbook workbook = null;
private readonly DataSet dataSet = null;
private readonly string excelFilename = string.Empty; private readonly ICellStyle cellDateTimeStyle = null; /// <summary>
/// Excel操作类构造函数
/// </summary>
/// <param name="dataSet"></param>
/// <param name="excelFilename"></param>
public Excel(DataSet dataSet, string excelFilename)
{
this.dataSet = dataSet;
this.excelFilename = excelFilename;
workbook = new HSSFWorkbook(); IDataFormat iDataFormat = workbook.CreateDataFormat();
//设置一个DateTime单元格的样式
cellDateTimeStyle = workbook.CreateCellStyle();
cellDateTimeStyle.DataFormat = iDataFormat.GetFormat("yyyy-m-d h:mm:ss");
} /// <summary>
/// 生成excel
/// </summary>
/// <returns></returns>
public bool Write()
{
bool returns = false;
using (FileStream saveFile = new FileStream(excelFilename, FileMode.Create, FileAccess.ReadWrite))
{
WriteExcelFile(dataSet);
workbook.Write(saveFile);
returns = true;
}
return returns;
} private void WriteExcelFile(DataSet ds)
{
foreach (DataTable dt in ds.Tables)
{
ISheet sheet = workbook.CreateSheet(dt.TableName);
WriteDataTableToExcelWorksheet(dt, sheet);
}
} private void WriteDataTableToExcelWorksheet(DataTable dt, ISheet sheet)
{
//生成sheet第一行列名
IRow row = sheet.CreateRow();
for (int i = ; i < dt.Columns.Count; i++)
{
ICell cell = row.CreateCell(i);
cell.SetCellValue(dt.Columns[i].Caption);
}
//写入数据
for (int i = ; i < dt.Rows.Count; i++)
{
IRow rows = sheet.CreateRow(i + );
for (int j = ; j < dt.Columns.Count; j++)
{
ICell cell = rows.CreateCell(j);
var cellValue = dt.Rows[i][j];
if (cellValue == DBNull.Value)
{
continue;
}
//类型判断处理
var type = cellValue.GetType();
var typeName = type.Name.ToLower();
switch (typeName)
{
case "int32":
cell.SetCellValue(double.Parse(cellValue.ToString()));
break;
case "string":
cell.SetCellValue(cellValue.ToString());
break;
case "datetime":
cell.CellStyle = cellDateTimeStyle;
cell.SetCellValue(DateTime.Parse(cellValue.ToString()));
break;
case "guid":
cell.SetCellValue(cellValue.ToString());
break;
case "boolean":
cell.SetCellValue(bool.Parse(cellValue.ToString()));
break;
default:
throw new Exception(string.Format("类型:{0}未做处理,请自行添加", typeName));
}
}
}
}
}
}

3、实际应用

using System;
using System.Data; namespace Demo
{
class Program
{
static void Main(string[] args)
{
DataSet dataSet = new DataSet();
DataTable dataTable = new DataTable();
dataTable.TableName = "Demo";
dataTable.Columns.Add("Id", typeof(int));
dataTable.Columns.Add("名称", typeof(string));
dataTable.Columns.Add("年龄", typeof(int));
dataTable.Columns.Add("添加日期", typeof(DateTime)); for (int i = ; i < ; i++)
{
dataTable.Rows.Add(i, "名称demo" + i, , DateTime.Now);
}
dataSet.Tables.Add(dataTable); Excel excel = new Excel(dataSet, "Demo.xls");
excel.Write();
}
}
}

【C#-导出Excel】DataSet导出Excel的更多相关文章

  1. NPOI DataSet导出excel

    /// <summary> /// DataSet导出到Excel的MemoryStream /// </summary> /// <param name="d ...

  2. C# DataSet导出Excel

    //多个DataSet导出Excel文件 public static void DataSetToExcel(DataSet p_ds,string strSavePath) { ;//多个DataS ...

  3. 【C#常用方法】2.DataTable(或DataSet)与Excel文件之间的导出与导入(使用NPOI)

    DataTable与Excel之间的互导 1.项目添加NPOI的引用 NPOI项目简介: NPOI是一个开源的C#读写Excel.WORD等微软OLE2组件文档的项目,特点是可以在没有安装Office ...

  4. DataSet导出到Excel,并生成文件(C#实现,可合并行和列)

    using System; using System.IO; using System.Data; using System.Reflection; using System.Diagnostics; ...

  5. 【基于WinForm+Access局域网共享数据库的项目总结】之篇二:WinForm开发扇形图统计和Excel数据导出

    篇一:WinForm开发总体概述与技术实现 篇二:WinForm开发扇形图统计和Excel数据导出 篇三:Access远程连接数据库和窗体打包部署 [小记]:最近基于WinForm+Access数据库 ...

  6. C# 之 EXCEL导入导出

    以下方式是本人总结的一些经验,肯定有很多种方法,在此先记下,留待以后补充... 希望朋友们一起来探讨相关想法,请在下方留言. A-1:EXCEL模板导出 非常简单,将EXCEL模板上传到项目中后,将其 ...

  7. Excel 导入 导出 Microsoft

    导出: private void exportExcel() { if (saveFileDialog1.ShowDialog() == DialogResult.OK) { Application. ...

  8. C#实现Excel模板导出和从Excel导入数据

    午休时间写了一个Demo关于Excel导入导出的简单练习 1.窗体 2.引用office命名空间 添加引用-程序集-扩展-Microsoft.Office.Interop.Excel 3.封装的Exc ...

  9. 如何使用NPOI 导出到excel和导入excel到数据库

    近期一直在做如何将数据库的数据导出到excel和导入excel到数据库. 首先进入官网进行下载NPOI插件(http://npoi.codeplex.com/). 我用的NPOI1.2.5稳定版. 使 ...

随机推荐

  1. POJ2367(拓扑排序裸题

    #include<iostream> #include<vector> #include<queue> using namespace std; typedef l ...

  2. 对CSRF(跨站请求伪造)的理解

    一.什么是CSRF? CSRF是Cross Site Request Forgery的缩写,翻译过来就是跨站请求伪造.那么什么是跨站请求伪造呢?让我一个词一个词的解释: 1.跨站:顾名思义,就是从一个 ...

  3. vbs 简单文件操作

    Dim fso, MyFile, fldSet fso = CreateObject("Scripting.FileSystemObject")Set fld = fso.crea ...

  4. sql循环(WITH AS短语也叫做子查询部分)

    --表结构 SELECT id,position,Parentid FROM op_client_sales_structure WITH TEST_CTE AS ( SELECT id,positi ...

  5. git 查看当前仓库地址以及设置新的仓库地址

    1.查看当前仓库地址 git remote show origin 2.设置新的仓库地址 1.先登录 gitlab 查看当前仓库地址: 执行修改地址命令 git remote set-url orig ...

  6. 一行python能干什么?

    我们都知道,python作为一个编程语言,它有一个最大的优势就是代码简短,那么一行python代码能实现哪些操作呢?一起来看看吧! 1.打印Hello World! 这是最基础的,相信不管学习哪一门语 ...

  7. 基于光线追踪的渲染中景深(Depth of field)效果的实现

    图形学离线渲染中常用的透视摄像机模型时根据小孔成像的原理建立的,其实现通常是从向成像平面上发射ray,并把trace这条ray的结果作为成像平面上对应交点的采样结果.即: 图片来自<Fundam ...

  8. MySQL之常见错误

    1)mysql导入较大sql文件,出现MySQL server has gone away ERROR (HY000) at line in file: 'E:\xampp\htdocs\SsCpc\ ...

  9. Python字符串、组合数据类型练习

    一.Python字符串练习 1.http://news.gzcc.cn/html/2017/xiaoyuanxinwen_1027/8443.html 取得校园新闻的编号. (这个方法就很多了,一般方 ...

  10. yii2 response多次输出问题的查找

    { "IsSuccess": 1, "ErrMsg": "OK", "Data": { "IsSuccess& ...