1.ExcelHelper封装

 namespace NPOI操作Excel
{
public class ExcelHelper
{
/// <summary>
/// DataTable转成Excel,返回一个文件流
/// </summary>
/// <param name="dataTable"></param>
/// <returns></returns>
public static Stream DatatableToExcel(DataTable dataTable)
{
IWorkbook wk = new HSSFWorkbook();
MemoryStream ms = new MemoryStream();
ISheet sheet = wk.CreateSheet();
IRow headerRow = sheet.CreateRow(); //处理标题部分
foreach (DataColumn column in dataTable.Columns)
{
headerRow.CreateCell(column.Ordinal).SetCellValue(column.ColumnName);
}
//处理table中的数据
int rowIndex = ;
foreach (DataRow row in dataTable.Rows)
{
IRow dataRow = sheet.CreateRow(rowIndex);
foreach (DataColumn column in dataTable.Columns)
{
//column.Ordinal得到从0开始的列的位置,column.ColumnName的到列的名称
dataRow.CreateCell(column.Ordinal).SetCellValue(row[column.ColumnName].ToString());
}
rowIndex++;
}
wk.Write(ms);
ms.Flush();
ms.Position = ; sheet = null;
headerRow = null;
return ms;
} /// <summary>
/// 读取Excel文件,转换成DataTable
/// </summary>
/// <param name="ExcelFileStream">读取到Excel的文件流</param>
/// <param name="SheetIndex">表的索引</param>
/// <param name="HeaderRowIndex">标题行的索引</param>
/// <returns></returns>
public static DataTable DataTableFromExcel(Stream ExcelFileStream, int SheetIndex, int HeaderRowIndex)
{
IWorkbook wk = new HSSFWorkbook(ExcelFileStream);
ISheet sheet = wk.GetSheetAt(SheetIndex); DataTable table = new DataTable(); IRow headerRow = sheet.GetRow(HeaderRowIndex);
int cellCount = headerRow.LastCellNum; //处理标题行的数据
for (int i = headerRow.FirstCellNum; i < cellCount; i++)
{
DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue);
table.Columns.Add(column);
}
//循环遍历sheet中的每一行,读取每一单元格的数据,同时创建table中的每一行,填充数据
int rowCount = sheet.LastRowNum;
for (int i = (sheet.FirstRowNum + ); i <= sheet.LastRowNum; i++)
{
IRow row = sheet.GetRow(i);
//以表的格式创建一个新的行
DataRow dataRow = table.NewRow(); for (int j = row.FirstCellNum; j < cellCount; j++)
{
if (row.GetCell(j) != null)
{
dataRow[j] = row.GetCell(j).ToString();
}
}
//dataRow的数据填充好后把行加到表中
table.Rows.Add(dataRow);
}
ExcelFileStream.Close();
wk = null;
sheet = null;
return table;
}
}
}

2.SqlHelper封装

 namespace NPOI操作Excel
{
public static class SqlHelper
{
//从配置文件中读取连接字符串
private static readonly string conStr = ConfigurationManager.ConnectionStrings["conStr"].ConnectionString;
//执行命令的方法 insert update delete
public static int ExecuteNonquey(string sql, params SqlParameter[] ps)
{
using (SqlConnection con = new SqlConnection(conStr))
{
using (SqlCommand cmd = new SqlCommand(sql, con))
{
con.Open();
cmd.Parameters.AddRange(ps);
return cmd.ExecuteNonQuery();
}
}
}
//获取首行首列
public static object ExecuteScalar(string sql, params SqlParameter[] ps)
{
using (SqlConnection con = new SqlConnection(conStr))
{
using (SqlCommand cmd = new SqlCommand(sql, con))
{
con.Open();
cmd.Parameters.AddRange(ps);
return cmd.ExecuteScalar();
}
}
} //获取读取数据库的对象
public static SqlDataReader ExecuteDataReader(string sql, params SqlParameter[] ps)
{
SqlConnection con = new SqlConnection(conStr);
using (SqlCommand cmd = new SqlCommand(sql, con))
{
try
{
con.Open();
cmd.Parameters.AddRange(ps);
return cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
}
catch (Exception ex)
{
con.Close();
con.Dispose();
throw ex;
}
}
}
//获取结果集
public static DataTable GetDataTable(string sql, params SqlParameter[] ps)
{
//构造数据表,用于接收查询结果
DataTable dt = new DataTable();
//构造适配器对象
using (SqlDataAdapter sda = new SqlDataAdapter(sql, conStr))
{
//添加参数
sda.SelectCommand.Parameters.AddRange(ps);
//执行
sda.Fill(dt);
return dt;
}
} }
}

3.winform中操作

3.1从数据库读取数据导入到Excel中

         private void button1_Click(object sender, EventArgs e)
{
DataTable dt = SqlHelper.GetDataTable("select * from t_persons");
MemoryStream ms = ExcelHelper.DatatableToExcel(dt) as MemoryStream; string saveFileNme = "";
bool fileSaved = false;
//保存文件对话框
SaveFileDialog saveDialog = new SaveFileDialog();
//设置默认的文件类型
saveDialog.DefaultExt = "xls";
saveDialog.Filter = "Excel文件|*.xls";
//设置文件名
saveDialog.FileName = "保存";
saveDialog.ShowDialog();
//获得文件全路径
saveFileNme = saveDialog.FileName;
if (saveFileNme.IndexOf(":") < ) return;
if (saveFileNme != "")
{
try
{
FileStream fs = new FileStream(saveDialog.FileName, FileMode.Create);
fs.Write(ms.GetBuffer(), , ms.GetBuffer().Length);
ms.Close();
ms.Dispose();
fs.Close();
fileSaved = true;
}
catch (Exception ex)
{
fileSaved = false;
MessageBox.Show("导出文件出错,文件可能正在被占用\n" + ex.Message);
}
}
else
{
fileSaved = false;
}
GC.Collect();//强行销毁
if (fileSaved&&File.Exists(saveFileNme))
{
MessageBox.Show("导出成功", "通知");
}
else
{
MessageBox.Show("导出失败", "通知");
}
}

3.2读取Excel文件,转换成DataTable绑定到DataGridView上

         private void button2_Click(object sender, EventArgs e)
{
//打开文件对话框
OpenFileDialog fileDialog=new OpenFileDialog();
//指定要打开文件的格式
fileDialog.Filter = "Excel文件|*.xls";
//设置默认打开路径
fileDialog.InitialDirectory = @"C:\Users\LWP1398\Desktop";
if (fileDialog.ShowDialog()==DialogResult.OK)
{
string fileName = fileDialog.FileName;//得到文件全路径
using (FileStream fsRead=new FileStream(fileName,FileMode.Open,FileAccess.Read))
{
DataTable dt = ExcelHelper.DataTableFromExcel(fsRead, , );
dgv.DataSource = dt;
}
}
MessageBox.Show("ok");
}
}

NPOI目前主要还是操作xls文件,对操作xlsx文件支持得不是很好

Excel操作--使用NPOI导入导出Excel为DataTable的更多相关文章

  1. NPOI导入导出Excel

    .net mvc利用NPOI导入导出excel 注意:如何导出的提交方式ajax导出是失效的! 解决方案是:js处理l两个表单的提交  代码:  第一步. 在页面里面加入2个隐藏的iframe, 如下 ...

  2. .Net core NPOI导入导出Excel

    最近在想.net core NPOI 导入导出Excel,一开始感觉挺简单的,后来真的遇到很多坑.所以还是写一篇博客让其他人少走一些弯路,也方便忘记了再重温一遍.好了,多的不说,直接开始吧. 在.Ne ...

  3. NPOI导入导出EXCEL通用类,供参考,可直接使用在WinForm项目中

    以下是NPOI导入导出EXCEL通用类,是在别人的代码上进行优化的,兼容xls与xlsx文件格式,供参考,可直接使用在WinForm项目中,由于XSSFWorkbook类型的Write方法限制,Wri ...

  4. Npoi导入导出Excel操作

    之前公司的一个物流商系统需要实现对订单的批量导入和导出,翻阅了一些资料,最后考虑使用NPOI实现这个需求. 在winform上面实现excel操作:http://www.cnblogs.com/Cal ...

  5. <转>Npoi导入导出Excel操作<载>

    //Datatable导出Excel private static void GridToExcelByNPOI(DataTable dt, string strExcelFileName) { tr ...

  6. .net mvc利用NPOI导入导出excel

    1.导出Excel :首先引用NPOI包(Action一定要用FileResult) /// <summary> /// 批量导出需要导出的列表 /// </summary> ...

  7. ASP.Net MVC利用NPOI导入导出Excel

    因近期项目遇到所以记录一下: 首先导出Excel: 首先引用NPOI包 http://pan.baidu.com/s/1i3Fosux (Action一定要用FileResult) /// <s ...

  8. net mvc 利用NPOI导入导出excel

    1.导出Excel : 首先引用NPOI包(Action一定要用FileResult) /// <summary> /// 批量导出需要导出的列表 /// </summary> ...

  9. NPOI 导入导出excel 支持 03 07

    因为微软的office成本太高了,所以开发项目的时候电脑上没安装office,而是安装了wps.但开发语言用的是C#,所以直接调用微软的office组件是很方便的,但一方面慢,一方面成本高,所以从网上 ...

随机推荐

  1. 如何编写好的jQuery代码

    本文就是自己看,如果您不小心进到了这里,请看源处,是这个作者翻译的:http://blog.sae.sina.com.cn/archives/4157 讨论jQuery和javascript性能的文章 ...

  2. Java工程转换为Maven工程-b

    1. 前言 在开发中经常要建立一个Maven的子工程,对于没有模板的同学来说从Java工程来转换也是一个不错的选择.本文就如何从一个Java工程创建一个Maven工程做了一个介绍,相信对于将一个Jav ...

  3. 简单易用的导出文件(Excel、word等各种格式)的方法

    以前学习过NPOI导出数据到Excel中,代码较长,不易记忆.工作中,看到了其他同事写的代码,研究了一下,贴出来,共同学习. 使用这种方式,不仅可以设置表格的样式,而且代码简洁. 首先,在后台中通过S ...

  4. mysql 执行流程

    mysql 执行流程 我们可以人为的把mysql 的主要功能分为如下模块. 1.初始化模块 mysql启动的时候执行初始化工作,如读取配置文件,分配一些全局变量(sql_model,catch buf ...

  5. QT for android 比较完美解决 全屏问题

    项目用到QT qml,需要在android下面全屏显示,折腾了一晚上,搞定,分享下,希望能帮助他人. 参考 Qt on Android:让 Qt Widgets 和 Qt Quick 应用全屏显示 该 ...

  6. MoveManager管理类

    MoveManager:移动管理类 struct MoveOpt { int cur_seq; ObjecInfo* obj; }; std::map<ObjID, MoveOpt> m_ ...

  7. iOS开发之数据存取2-CoreData后台查询数据

    注意:本人所讲的后台查询必须在使用CoreData时选择存储类型为“SQLite”,因为二进制或者XML存储方式会在打开的时候直接读到内存中. 1.CoreData数据后台查询出现的情况 CoreDa ...

  8. visual studio 2010运行速度提速

    前段时间为了一个项目而把VS2008换成了VS2010,结果原本就不堪重负的本本跑起VS2010来那更是慢得没话说,于是看了遍VS2010选项,又从网上到处找资料找优化方法,总算使我的VS2010跑得 ...

  9. Indent Guides VS 插件 对齐线

  10. poj 3620 Avoid The Lakes(广搜,简单)

    题目 找最大的一片湖的面积,4便有1边相连算相连,4角不算. runtime error 有一种可能是 数组开的太小,越界了 #define _CRT_SECURE_NO_WARNINGS #incl ...