本项目基于NPOI组件,实现对常规格式的excel导入导出封装。
导出的excel格式,符合office格式,并非html格式的。
很多朋友应该都接触过NPOI,但是写一个导入导出,还是很繁琐的,基于此,我们封装了一个组件
请从nuget上搜索 KYSharpCore.NPOI
利用该组件,我们可以实现以下功能
数据导出:
支持DataTable的数据
支持匿名数组的数据
支持实体列表的数据
再导出时,本组件也支持一些单元格合并的处理,但是相对繁琐,本文不做介绍。
数据导入:
支持从excel导入到DataTable
excel支持.xls和.xlsx 的格式
下面就介绍下如何使用
一、数据导出
首先,我们利用组件,将数据转成符合的MemoryStream流,再处理流导出到文件。
对于控制台程序和web项目来说,流导出的文件的处理方式有些不一样。
1、DataTable数据源
直接看代码,只要一行代码,我们就可以将datatable数据源转成符合excel格式的流
var sm = KYSharpCore.NPOI.Excel.Export(dt, true);
其中第二个参数为 是否为 xls格式,默认是true,false将导出.xlsx格式的文档
public MemoryStream GetStream1()
{
DataTable dt = new DataTable();
dt.Columns.Add("姓名");
for(int i=0;i<10;i++)
{
DataRow dr = dt.NewRow();
dr[0] = "张" + i;? dt.Rows.Add(dr);
}
var sm = KYSharpCore.NPOI.Excel.Export(dt, true);
return sm;
}
public MemoryStream GetStream2()也是非常简单,直接将数据源替换即可。
{
var query = new[] {
new { 姓名="张三"},
new { 姓名="李四"},
};
var sm = KYSharpCore.NPOI.Excel.Export(query, true);
return sm;
}
public MemoryStream GetStream3()最后,我们分别看下在控制台环境和web环境下如何导出文件
{
List<Student> list = new List<Student>() {
new Student(){ Name="张三" },
new Student(){ Name="李四"}
};
var sm = KYSharpCore.NPOI.Excel.Export(list, true);
return sm;
}
public void GetFile(MemoryStream sm)控制台的方式,只能将文件写入服务器上指定的目录。
{
var buffer = sm.ToArray();
string outfile = @"e:\k8008\huangminghui\桌面\aa.xlsx"; //指定文件存储路径
using (FileStream fileStream = new FileStream(outfile, FileMode.OpenOrCreate, FileAccess.Write))
{
fileStream.Write(buffer, 0, buffer.Length);
}
}
public FileResult Export()web下,可利用这种方式直接导出到客户端。
{
var sm = GetStream();
return File(sm.ToArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "项目.xlsx");
}
public static DataTable ExcelToDataTable(Stream sm, string p_tableName, int p_sheetIndex, bool isExcel2003 = true)参数说明
public static DataTable ExcelToDataTable(string filepath, string p_tableName, int p_sheetIndex, bool isExcel2003 = true)
- 本文标题: WPF之EXCEL导入导出的分享
- 文章分类:【WinForm/WPF】
- 非特殊说明,本文版权归【胡同里的砖头】个人博客 所有,转载请注明出处.