.NET使用NPOI将数据导出/导入到Excel文件介绍

http://www.csharpwin.com/csharpspace/13394r3700.shtml

现在多数软件都支持Excel的导入导出功能。因为将软件中的数据导出到Excel中以后,财务专员就可以很方便的操作这些数据了。这样可以节省很多工作量。并且,有数据导入功能可以使用户启用软件时,不必花费时间就可以将上万条记录导如到软件系统的数据库中。大大减少了用户的工作量,否则,用户只能乖乖的一条条录入了,如果录入后没保存,那就只能…..,大家懂的。

今天咱们就来看下如何使用NPOI将程序中的数据导出的Excel文件。当然,将程序中的数据导出到Excel文件的方法有很多。但本人以为NPOI的最大优点就是即使你心爱的电脑没有安装office或者wps,那么依然可以正常导出。但是如果使用office组件类库的方式,那么就不敢恭维了…

言归正传,下面咱们一起来看下NPOI的伟大魅力吧!

这里我带领大家一起来写个小例子,大家就会掌握NPOI的用法了。

第1步:请大家新建一个Winfrom窗体应用程序命名为ExportOrImport,在窗体上放一个DataGridView控件和一个button控件。

第二步:在当前项目中新建一个lib文件夹,并且将如下类库复制到该文件夹下,然后右键点击”引用”→”添加引用”,找到lib的各个dll文件,完成添加。

.NET使用NPOI将数据导出/导入到Excel文件介绍_第1张图片

第三步:在项目中引入如下命名空间:

  
  
  
  
using NPOI.HSSF.UserModel; using NPOI.HPSF; using NPOI; using System.IO;

第四步:通过ADO.NET从数据库中读取数据到DataGridView中

  
  
  
  
string str = " data source=.;initial catalog=Myschool;uid=sa "; SqlConnection con = new SqlConnection(str); string sql = " select studentno,studentname,address,birthday from student "; SqlDataAdapter da = new SqlDataAdapter(sql,con); DataSet ds = new DataSet(); da.Fill(ds, " Student "); dataGridView1.DataSource = ds.Tables[ 0];
第五步:将DataGridView中的数据导出到Excel文件中

不多说了 ,直接上代码

  
  
  
  
// 通过SaveFileDialog类弹出一个保存对话框 SaveFileDialog sfd = new SaveFileDialog(); // 设置文件的保存类型,默认选中Excel文件 sfd.Filter = " Excel文件|*.xls "; // 设置默认保存文件名称 sfd.FileName = " 学生信息表 "; // 如果用户点击了保存对话框的确定按钮 if (sfd.ShowDialog()==DialogResult.OK) { // 获取到Excel文件名 string filename = sfd.FileName; // 获取学生列表 // List<Student> list = dataGridView1.DataSource as List<Student>; // 内存中创建一个空的Excel文件 HSSFWorkbook workbook = new HSSFWorkbook(); // 在Excel文件上通过对HSSFSheet创建一个工作表 HSSFSheet sheet = workbook.CreateSheet( " students "); // 给工作表上添加一行 HSSFRow row1 = sheet.CreateRow( 0); // 在添加的航上创建一个列 HSSFCell cell1 = row1.CreateCell( 0,HSSFCell.CELL_TYPE_STRING); // 设置该列的值 cell1.SetCellValue( " 学号 "); cell1 = row1.CreateCell( 1, HSSFCell.CELL_TYPE_STRING); cell1.SetCellValue( " 学生姓名 "); cell1 = row1.CreateCell( 2, HSSFCell.CELL_TYPE_STRING); cell1.SetCellValue( " 家庭住址 "); cell1 = row1.CreateCell( 3, HSSFCell.CELL_TYPE_STRING); cell1.SetCellValue( " 出生日期 "); // 遍历dataGridView中的所有列,然后将列添加到Excel工作表中 for ( int i = 1; i <=dataGridView1.Rows.Count; i++) { // 设置字体 HSSFFont font = workbook.CreateFont(); // 字体名称 font.FontName = " 华文行楷 "; // 设置字体大小 font.FontHeightInPoints = 25; // 设置列的样式 HSSFCellStyle style1 = workbook.CreateCellStyle(); // 设置列的背景色 style1.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.ORANGE.index; // 设置填充边框样式 style1.FillPattern = HSSFCellStyle.SOLID_FOREGROUND; // 设置字体显示样式 style1.SetFont(font); HSSFCellStyle style2 = workbook.CreateCellStyle(); style2.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.YELLOW.index; style2.FillPattern = HSSFCellStyle.SOLID_FOREGROUND; HSSFRow row = sheet.CreateRow(i); HSSFCell cell = row.CreateCell( 0, HSSFCell.CELL_TYPE_NUMERIC); cell.CellStyle = style1; cell.SetCellValue(dataGridView1.Rows[i - 1].Cells[ 0].Value.ToString()); cell = row.CreateCell( 1,HSSFCell.CELL_TYPE_STRING); cell.CellStyle = style1; cell.SetCellValue(dataGridView1.Rows[i- 1].Cells[ 1].Value.ToString()); cell = row.CreateCell( 2, HSSFCell.CELL_TYPE_STRING); cell.CellStyle = style2; cell.SetCellValue(dataGridView1.Rows[i- 1].Cells[ 2].Value.ToString()); cell = row.CreateCell( 3, HSSFCell.CELL_TYPE_STRING); cell.CellStyle = style2; cell.SetCellValue(dataGridView1.Rows[i- 1].Cells[ 3].Value.ToString()); } using (FileStream fs= new FileStream(filename,FileMode.OpenOrCreate)) { // 将内容写入到硬盘中 workbook.Write(fs); } MessageBox.Show( " 导出成功! "); }
其实,还有一种思路,这里留给大家去思考。

接下来咱们看下如何将一个已经存在的Excel文件导入到DataGridView中。

由于上面对导出做了详细的分析,而导入只是一个逆向的过程,这里就直接看代码了。

  
  
  
  
void InitializeWorkbook( string path) { // read the template via FileStream, it is suggested to use FileAccess.Read to prevent file lock. // book1.xls is an Excel-2007-generated file, so some new unknown BIFF records are added. using (FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read)) { hssfworkbook = new HSSFWorkbook(file); } } DataSet ds = new DataSet(); void ConvertToDataTable() { HSSFSheet sheet = hssfworkbook.GetSheetAt( 0); System.Collections.IEnumerator rows = sheet.GetRowEnumerator(); DataTable dt = new DataTable(); for ( int j = 0; j < 5; j++) { dt.Columns.Add(Convert.ToChar((( int) ' A ') + j).ToString()); } while (rows.MoveNext()) { HSSFRow row = (HSSFRow)rows.Current; DataRow dr = dt.NewRow(); for ( int i = 0; i < row.LastCellNum; i++) { HSSFCell cell = row.GetCell(i); if (cell == null) { dr[i] = null; } else { dr[i] = cell.ToString(); } } dt.Rows.Add(dr); } ds.Tables.Add(dt); } // 从Excel导入 private void button2_Click( object sender, EventArgs e) { InitializeWorkbook( " 学生信息表.xls "); ConvertToDataTable(); dgvexport.DataSource= ds.Tables[ 0]; }

你可能感兴趣的:(.NET使用NPOI将数据导出/导入到Excel文件介绍)