C#中使用NPOI将DataTable导出到Excel文件
2015-10-05 11:24
666 查看
需要引入dll(可以选择.net2.0、.net3.5或者.net4.0的dll)
点击下载DLL Npoi使用手册
后台执行操作
点击下载DLL Npoi使用手册
NopiExcel.cs类 using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Data; using NPOI.HSSF.UserModel; using NPOI.HPSF; using NPOI.SS.UserModel; using System.Collections; using System.Security.Cryptography; namespace Common { public class NPOIExcel { /// <summary> /// 将Excel读入到HashTable /// </summary> /// <param name="path">文件路径</param> /// <returns>相应的DataTable</returns> public static Hashtable ConvertToDataTable(string path) { if (path == "") return null; HSSFWorkbook hssfworkbook=null; try { using (FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read)) { hssfworkbook = new HSSFWorkbook(file); } } catch { return null; } Hashtable ht = new Hashtable(); for (int e = 0; e < (int)hssfworkbook.Count; e++) { //获取excel的第一个sheet ISheet sheet = hssfworkbook.GetSheetAt(e); string sheetName = hssfworkbook.GetSheetName(e); DataTable dt = new DataTable(); //获取sheet的首行 IRow headerRow = sheet.GetRow(0); //一行最后一个方格的编号 即总的列数 int cellCount = headerRow.LastCellNum; for (int i = headerRow.FirstCellNum; i < cellCount; i++) { DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue); dt.Columns.Add(column); } //最后一列的标号 即总的行数 int rowCount = sheet.LastRowNum; for (int i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++) { IRow row = sheet.GetRow(i); DataRow dataRow = dt.NewRow(); for (int j = row.FirstCellNum; j < cellCount; j++) { if (row.GetCell(j) != null) dataRow[j] = row.GetCell(j).ToString(); else dataRow[j] = ""; } dt.Rows.Add(dataRow); } sheet = null; ht.Add(sheetName, dt); } hssfworkbook = null; return ht; } /// <summary> /// DataTable导出到Excel文件 /// </summary> /// <param name="dtSource">源DataTable</param> /// <param name="strHeaderText">表头文本</param> /// <param name="strFileName">保存位置</param> public static void DataTableToExcel(Hashtable ht, string strFileName) { HSSFWorkbook workbook = new HSSFWorkbook(); foreach (DictionaryEntry de in ht) { DataTable dt = (DataTable)de.Value; string sheetName = (string)de.Key; ISheet sheet = workbook.CreateSheet(sheetName); IRow dataRow = sheet.CreateRow(0); foreach (DataColumn column in dt.Columns) { dataRow.CreateCell(column.Ordinal).SetCellValue(column.ColumnName); } //填充内容 for (int i = 0; i < dt.Rows.Count; i++) { dataRow = sheet.CreateRow(i + 1); for (int j = 0; j < dt.Columns.Count; j++) { dataRow.CreateCell(j).SetCellValue(dt.Rows[i][j].ToString()); } } } workbook.Write(new FileStream(strFileName, FileMode.Create, FileAccess.Write)); } } }
后台执行操作
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using Business; using Common;//nopiExcel放在namespace Commom下 using System.Collections; using System.Data; namespace CourseCaculate.PrimaryC { public partial class PrimaryCExport : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { } } /// <summary> /// 导出 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public void btnExport_Click(object sender, EventArgs e) { DataTable dt = CourseMarksDAL.GetDataTableLike(); IList<string> toEraseList = new List<string>(); for (int i = 0; i < dt.Columns.Count; i++) { if (!InNameList(dt.Columns[i].ColumnName)) { //dt.Columns.RemoveAt(i); toEraseList.Add(dt.Columns[i].ColumnName); } } foreach (string s in toEraseList) { dt.Columns.Remove(s); } dt.Columns["TicketNum"].ColumnName = "准考证号"; dt.Columns["StuID"].ColumnName = "学号"; dt.Columns["StuName"].ColumnName = "姓名"; dt.Columns["ProfeName"].ColumnName = "专业名称"; dt.Columns["ExamMarks"].ColumnName = "笔试成绩"; string fileName = "C语言成绩.xls"; NPOIHelper.ExportByWeb(dt, fileName); } /// <summary> /// 判断是否为列名 /// </summary> /// <param name="name"></param> /// <returns></returns> public bool InNameList(string name) { string[] nameList = { "TicketNum", "StuID", "StuName", "ProfeName", "ExamMarks"}; for (int i = 0; i < (int)nameList.Length; i++) { if (name == nameList[i]) { return true; } } return false; } } }
相关文章推荐
- C#获取相对路径
- C#--类成员
- C# 添加,修改,删除Xml节点
- c#的注释规范
- Just4Fun - Comparaison between const and readonly in C#
- 在C#中动态地添加控件
- C#理解泛型(源代码)及 default(T)
- C#理解泛型
- C#学习日记11---数据类型 之 枚举(enum)类型
- C#操作Word总结(二)——设置文档格式并添加文本内容、超链接、添加图片
- 【转】C#文件操作大全
- C# : ADO.NET 读取 Access mdb
- 用C#语言求300以内的素数
- C#将原工程中的WinForm窗体添加到新工程中
- 用C#开发了四天的UWP应用有感
- webform C# log4net不起作用 5种 原因
- C#——.net背景和第一个C#程序
- 从控制台读取password - C#
- 【C#】——抽象类VS接口
- C# WinForm开发系列 - DataGridView 使用方法集锦