NPOI Excel数据写入及读取
2014-08-14 18:05
441 查看
<1>这是一个一般应用程序
Excel里对日期的处理: 在Excel里日期的保存类型为Numeric,这里要给他的格式设置样式格式。
以上代码需要引入NPOI类库,NPOI类库下载点:http://npoi.codeplex.com/releases
选择NPOI 2.1.1 binary文件
using System; using System.Collections.Generic; using System.Linq; using System.Web; using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using System.IO; namespace Excel导出及读取 { /// <summary> /// Excel写入及读取 的摘要说明 /// </summary> public class Excel写入及读取 : IHttpHandler { public void ProcessRequest(HttpContext context) { //FileMode.Open是指:打开Dexcel.xls盘下的excel.xls文件,FileAccess.ReadWrite表示:可以对excel.xls文件可读可写 using (FileStream fileStream = new FileStream("d:/excel.xls", FileMode.Open, FileAccess.ReadWrite)) { //根据路径通过已存在的excel来创建HSSFWorkbook,即整个excel文档 HSSFWorkbook workbook = new HSSFWorkbook(fileStream); //------------------------------------------------------------------------------------------------ //string getsheetName = workbook.GetSheetName(0);//获取第一个页的名字 //获取workbook工作薄的第一个页 //ISheet firstSheet = workbook.GetSheetAt(0); //获取firstSheet页的第一行 //IRow firstRow = firstSheet.GetRow(0); //获取一行最后一个方格的编号 即总的列数 //int colsCount = firstRow.LastCellNum; //返回物理定义的行数(不是表中的行数)注:假如Excel里,只有标识为10的行有数据,那么rowCount=1;而不是10 //int rowCount = firstSheet.PhysicalNumberOfRows; //------------------------------------------------------------------------------------------------ //获取名字为“Sheet1”的页 ISheet getSheet = workbook.GetSheet("Sheet1"); int ii = getSheet.FirstRowNum; //获取页的第一行 注:这个第一行是指:第一个有值的行的行号[索引值],假如第一第二行没有值,第三行才有值,因为第三行的行号[索引值]就是2,所以ii就为2 //----------------------------------------------------LastRowNum------------------------- //获取getSheet页的最后一行的行号[行号从0开始,即索引值],加上1即为最后一行的[行标识]。Excel的行标识从1开始。第0行【即行号为0】,的标识是1 int rowCount = getSheet.LastRowNum; //---------------------------------------------------LastCellNum----------------------------- //因为ii是实际有值的第一行,所以它必定是经过初始化了的,那么那就获取最后一个方格的编号 即总的列数【这个没有下面那个循环获取到的总列数靠谱,所以还是用下面的循环】 //int colsCount = getSheet.GetRow(ii).LastCellNum; int maxCount = 0; for (int i = 0; i <= rowCount; i++) //这个循环就是获取shee1页中,最后有数据的那一列(其目的就是获取总列数) { IRow row = getSheet.GetRow(i); if (row == null) //这一句很关键,因为没有数据的行默认是null ,如果数据源的行为null,就跳出本次循环 { continue; } else { int cellCount = row.LastCellNum; if (cellCount > maxCount) { maxCount = cellCount; //当这个语句循环完毕maxCount就会得到最大列数 } } } //在workbook工作薄中创建"俺的第一页"页 ISheet workbookSheet = workbook.CreateSheet("俺的第2页"); //因为ii是真正在有值的第一行的行号,所以从这里开始遍历更加节约时间,当然你从0开始也没关系,只是浪费电脑做无用功 for (int i = ii; i <= rowCount; i++) { IRow createRows = workbookSheet.CreateRow(i); for (int j = 0; j < maxCount; j++) { IRow row = getSheet.GetRow(i); if (row == null) //这一句很关键,因为没有数据的行默认是null ,如果数据源的行为null,就跳出本次循环 { continue; } ICell cell = row.GetCell(j); if (cell != null) //这一句很关键,因为没有数据的格默认是null ,如果数据源的格不为null,就赋值 { if (cell.CellType == CellType.String) //如果格的类型是String类型... { string s = workbook[0].GetRow(i).GetCell(j).StringCellValue; createRows.CreateCell(j, CellType.String).SetCellValue(s); } if (cell.CellType == CellType.Numeric) //如果格的类型为Numeric类型.. { double s = workbook[0].GetRow(i).GetCell(j).NumericCellValue; createRows.CreateCell(j, CellType.String).SetCellValue(s); } } } } //不知为什么using没结束,连接已经关闭了。所以这里再次打开D盘下的excel.xls文件,进行读写。得到一个excel.xls文件的文件流 using (FileStream fileStream1 = new FileStream("d:/excel.xls", FileMode.OpenOrCreate, FileAccess.ReadWrite)) { workbook.Write(fileStream1);//将workbook这个文件写入到fileStream1流中 } context.Response.Write("OK");//提示成功 } } public bool IsReusable { get { return false; } } } }
Excel里对日期的处理: 在Excel里日期的保存类型为Numeric,这里要给他的格式设置样式格式。
//当Excel的某一列的格要接"收从一个类里传过来,类型为DateTime类型的字段值"的时候的处理方式 //在workbook工作薄中创建一个cell的Style ICellStyle cellStyle = workbook.CreateCellStyle(); //在workbook工作薄中创建一个格式。 IDataFormat styleFormat = workbook.CreateDataFormat(); //指明这个格式的为“2014年8月15日”的样式,并给他赋给刚刚创建的cellStyle cellStyle.DataFormat = styleFormat.GetFormat("yyyy\"年\"m\"月\"d\"日\"");//斜杠是转义符,为后面的"服务的,指明不要把后面的那个"作为一个字符串的结尾 //创建第row行第4列Numeric类型的格 ICell cell = row.CreateCell(3, CellType.Numeric); //指明这个格的样式为CellStyle cell.CellStyle = cellStyle; //给这个格赋值 cell.SetCellValue(Class.riqiTime); //Class.riqiTime实际是指数据源传过来的类的某个字段,这个字段的类型为DateTime类型
以上代码需要引入NPOI类库,NPOI类库下载点:http://npoi.codeplex.com/releases
选择NPOI 2.1.1 binary文件
相关文章推荐
- C#中NPOI操作excel之读取和写入excel数据
- .net(NPOI)实现Excel数据的写入和读取
- C#中NPOI操作excel之读取和写入excel数据
- NPOI组件实现EXCEL大数据的读取和写入
- NPOI 创建Excel,数据读取与写入
- C#中NPOI操作excel之读取和写入excel数据
- NPOI读取Excel模板并向其中写入数据
- C#调用NPOI组件读取excel表格数据转为datatable写入word表格中并向word中插入图片/文字/书签 获得书签列表
- NPOI 创建Excel,数据读取与写入
- C#调用NPOI组件读取excel表格数据转为datatable写入word表格中并向word中插入图片/文字/书签 获得书签列表
- EXCEL读取与写入数据的最佳方案[转]
- Java操作Excel之理解JXL--读取Excel模板动态写入数据并生成Excel
- c#中采用OLEDB方式来读取EXCEL文件和将数据写入EXCEL文件
- EXCEL读取与写入数据的最佳方案[转]
- [转贴]EXCEL读取与写入数据的最佳方案
- 利用POI将读取的数据写入Excel
- [转贴]EXCEL读取与写入数据的最佳方案
- phpexcel 读取含多个sheet的excel,将从数据库中检索出的数据分别写入该excel不同的sheet中 并导出该excel
- 使用Apache POI创建Excel,并从数据库中读取数据写入到Excel文件中
- [转贴]EXCEL读取与写入数据的最佳方案