【C#-导出Excel】DataSet导出Excel
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的更多相关文章
- NPOI DataSet导出excel
/// <summary> /// DataSet导出到Excel的MemoryStream /// </summary> /// <param name="d ...
- C# DataSet导出Excel
//多个DataSet导出Excel文件 public static void DataSetToExcel(DataSet p_ds,string strSavePath) { ;//多个DataS ...
- 【C#常用方法】2.DataTable(或DataSet)与Excel文件之间的导出与导入(使用NPOI)
DataTable与Excel之间的互导 1.项目添加NPOI的引用 NPOI项目简介: NPOI是一个开源的C#读写Excel.WORD等微软OLE2组件文档的项目,特点是可以在没有安装Office ...
- DataSet导出到Excel,并生成文件(C#实现,可合并行和列)
using System; using System.IO; using System.Data; using System.Reflection; using System.Diagnostics; ...
- 【基于WinForm+Access局域网共享数据库的项目总结】之篇二:WinForm开发扇形图统计和Excel数据导出
篇一:WinForm开发总体概述与技术实现 篇二:WinForm开发扇形图统计和Excel数据导出 篇三:Access远程连接数据库和窗体打包部署 [小记]:最近基于WinForm+Access数据库 ...
- C# 之 EXCEL导入导出
以下方式是本人总结的一些经验,肯定有很多种方法,在此先记下,留待以后补充... 希望朋友们一起来探讨相关想法,请在下方留言. A-1:EXCEL模板导出 非常简单,将EXCEL模板上传到项目中后,将其 ...
- Excel 导入 导出 Microsoft
导出: private void exportExcel() { if (saveFileDialog1.ShowDialog() == DialogResult.OK) { Application. ...
- C#实现Excel模板导出和从Excel导入数据
午休时间写了一个Demo关于Excel导入导出的简单练习 1.窗体 2.引用office命名空间 添加引用-程序集-扩展-Microsoft.Office.Interop.Excel 3.封装的Exc ...
- 如何使用NPOI 导出到excel和导入excel到数据库
近期一直在做如何将数据库的数据导出到excel和导入excel到数据库. 首先进入官网进行下载NPOI插件(http://npoi.codeplex.com/). 我用的NPOI1.2.5稳定版. 使 ...
随机推荐
- 代码中 方法 处提示:This method has a constructor name
“此方法具有构造方法的名字” package classpackage; public class Puppy { public void Puppy(String name) { System.ou ...
- 记一次Sqoop抽数据异常
1. 环境 Hadoop Sqoop awsEMR 2.8.5 1.4.7 5.26.0 2.错误描述 在使用Sqoop抽取MySQL数据时,使用hdfs作为缓存,s3作为hive的存储地址,命令如下 ...
- 什么是时序时空数据库TSDB
时序时空数据库(Time Series & Spatial Temporal Database,简称 TSDB)是一种高性能.低成本.稳定可靠的在线时序时空数据库服务,提供高效读写.高压缩比存 ...
- 【LOJ】#3087. 「GXOI / GZOI2019」旅行者
LOJ#3087. 「GXOI / GZOI2019」旅行者 正着求一遍dij,反着求一遍,然后枚举每条边,从u到v,如果到u最近的点和v能到的最近的点不同,那么可以更新答案 没了 #include ...
- 基于 CentOS 7 搭建 SVN
⒈安装 SVN 服务端 1.安装 Subversion Subversion 是一个版本控制系统,相对于的 RCS . CVS ,采用了分支管理系统,它的设计目标就是取代 CVS . yum inst ...
- java注解类型的aop
import java.lang.reflect.Method; import javax.servlet.http.HttpServletRequest; import org.aspectj.la ...
- PAT B1018.锤子剪刀布(20)
一个没有通过,不知道为何 #include <cstdio> int change(char c) { if(c == 'B') return 0; if(c == 'C') return ...
- Python【print函数】
下面是 print函数的一种用法,用逗号隔开,可在同一行打印不同类型的数据.x = input('请你输入被除数:')y = input('请你输入除数:')z = float(x)/float(y) ...
- Ruby Rails学习中:调试信息和 Rails 的三种环境,Users 资源,调试器,Gravatar 头像和侧边栏
注册 一.调试信息和 Rails 环境 现在咱们要实现的用户资料页面是我们这个应用中第一个真正意义上的动态页面.虽然视图的代码不会动态改变, 不过每个用户资料页面显示的内容却是从数据库中读取的.添加动 ...
- STM32的堆与栈与编译信息查看
STM32的堆与栈与编译信息查看 因为一个项目中使用malloc函数动态分配内存400多个字节,返回为0,分配失败.查找失败原因,为堆空间不足分配导致.查看堆和栈分别设置了2K,按正常情况看应能满足分 ...