标签:off gets exec 取数据 exce 取数 color .dll row
NPOI: 对Excel表数据的导入导出(当然也有word之类,不过一般用途为Excel)
准备: 下载NPOI相关文件,http://npoi.codeplex.com 解压,添加项目对:NPOI.dll、NPOI.OOXML.dll、NPOI.OpenXml4Net.dll 的引用,这个涉及到office版本的支持问题,
office2003版本或更早的excel文件为: .xls 而2010的为 .xlsx ,支持2010版本的工作簿对象要为 XSSFWorkbook,这个同时也对前版本的支持,而HSSFWorkbook工作簿对象不支持2010版本或更新版本。
IWorkbook wk = new XSSFWorkbook(); //创建一个工作簿的对象 ISheet sheet = wk.CreateSheet("sheetName"); //创建一个工作表
-->从数据库的一张表中导入数据到excel表举例
//读取数据,给工作表添加行 using (SqlDataReader reader = SqlHelper.ExcuteReader(sql)) { if (reader.HasRows) { //创建第一行,表示列名 IRow rowHead = sheet.CreateRow(0); //第一行 for (int i = 0; i < reader.FieldCount; i++) //获取列数 { rowHead.CreateCell(i).SetCellValue(reader.GetName(i)); } int index = 1; while (reader.Read()) { //读取到一行,在excel中创建一行 IRow currentRow = sheet.CreateRow(index); index++; //创建一个单元格 currentRow.CreateCell(0).SetCellValue(int.Parse(reader["UserId"].ToString())); currentRow.CreateCell(1).SetCellValue(reader["UserName"].ToString()); currentRow.CreateCell(2).SetCellValue(reader["UserPwd"].ToString());//currentRow.CreateCell(3).SetCellValue(DateTime.Parse(reader["UserTime"].ToString())); //创建一个单元格 ICell ic = currentRow.CreateCell(3); //创建单元格样式 ICellStyle cellStyle = wk.CreateCellStyle(); cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("m/d/yyh:mm"); //设置当前单元格应用此样式 ic.CellStyle = cellStyle; ic.SetCellValue(DateTime.Parse(reader["UserTime"].ToString())); } } }
-->写入到电脑磁盘中
using (FileStream fsWrite = File.OpenWrite("new.xlsx")) { wk.Write(fsWrite); } //写入到电脑磁盘中,并命名为new.xlsx
-->导入到数据库:
//创建一个读取execl表的流 ▲ using (FileStream fsRead = File.OpenRead("workbookName.xlsx")) { //创建一个工作簿的对象▲ IWorkbook wk = new XSSFWorkbook(fsRead); //遍历工作簿中的每一个工作表▲ for (int i = 0; i < wk.NumberOfSheets; i++) { //获取一个工作表的对象▲ ISheet sheet = wk.GetSheetAt(i); //根据索引来获取 //判断,如果该行存在才遍历 //写sql语句 string sql = "insert into Users (UserName,UserPwd,UserTime) values(@name,@pwd,@time)"; //遍历表中的行,这里要使用等于▲ for (int r = 1; r <=sheet.LastRowNum; r++) { //获取工作表中的每一行,如果该不为空才进行接下来的遍历 IRow row = sheet.GetRow(r); SqlParameter[] parma = new SqlParameter[] { new SqlParameter("@name", SqlDbType.NVarChar,16), new SqlParameter("@pwd",SqlDbType.NVarChar,32), new SqlParameter("@time",SqlDbType.DateTime) }; if (row != null) { //遍历该行,获取每一个单元格▲ for (int c = 1; c < row.LastCellNum; c++) { //获取单元格▲ ICell cell = row.GetCell(c); //判断,如果该单元格为空,则向数据库中插入DBNULL if (cell == null || cell.CellType == CellType.Blank) { parma[c - 1].Value = DBNull.Value; } else { if (c == 3) { parma[c - 1].Value = DateTime.FromOADate(cell.NumericCellValue); } else { parma[c - 1].Value = cell.ToString(); } } } } int n= SqlHelper.ExcuteNonQuery(sql, parma); } } }
总结:读取或者写入都需要一个流,然后都是创建工作簿对象,然后对应创建行,读取行,写入行,读取单元格,写入单元格,注意对excel行和单元格的遍历,根据逻辑对数据进行操作,
有时候可以借助List集合,对数据进行循环遍历操作。
标签:off gets exec 取数据 exce 取数 color .dll row
原文地址:http://www.cnblogs.com/xsh-cs/p/7492662.html