首页 > 代码库 > 简单操作excel类
简单操作excel类
1 class ExcelHelper : IDisposable 2 { 3 private string fileName = null; //文件名 4 private IWorkbook workbook = null; 5 private FileStream fs = null; 6 private bool disposed; 7 8 public ExcelHelper(string fileName) 9 { 10 this.fileName = fileName; 11 disposed = false; 12 } 13 14 /// <summary> 15 /// 将DataTable数据导入到excel中 16 /// </summary> 17 /// <param name="data">要导入的数据</param> 18 /// <param name="isColumnWritten">DataTable的列名是否要导入</param> 19 /// <param name="sheetName">要导入的excel的sheet的名称</param> 20 /// <returns>导入数据行数(包含列名那一行)</returns> 21 public int DataTableToExcel(DataTable data, string sheetName, bool isColumnWritten) 22 { 23 int i = 0; 24 int j = 0; 25 int count = 0; 26 ISheet sheet = null; 27 28 fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite); 29 if (fileName.IndexOf(".xlsx") > 0) // 2007版本 30 workbook = new XSSFWorkbook(); 31 else if (fileName.IndexOf(".xls") > 0) // 2003版本 32 workbook = new HSSFWorkbook(); 33 34 try 35 { 36 if (workbook != null) 37 { 38 sheet = workbook.CreateSheet(sheetName); 39 } 40 else 41 { 42 return -1; 43 } 44 45 if (isColumnWritten == true) //写入DataTable的列名 46 { 47 IRow row = sheet.CreateRow(0); 48 for (j = 0; j < data.Columns.Count; ++j) 49 { 50 row.CreateCell(j).SetCellValue(data.Columns[j].ColumnName); 51 } 52 count = 1; 53 } 54 else 55 { 56 count = 0; 57 } 58 59 for (i = 0; i < data.Rows.Count; ++i) 60 { 61 IRow row = sheet.CreateRow(count); 62 for (j = 0; j < data.Columns.Count; ++j) 63 { 64 row.CreateCell(j).SetCellValue(data.Rows[i][j].ToString()); 65 } 66 ++count; 67 } 68 workbook.Write(fs); //写入到excel 69 return count; 70 } 71 catch (Exception ex) 72 { 73 Console.WriteLine("Exception: " + ex.Message); 74 return -1; 75 } 76 } 77 78 /// <summary> 79 /// 将excel中的数据导入到DataTable中 80 /// </summary> 81 /// <param name="sheetName">excel工作薄sheet的名称</param> 82 /// <param name="isFirstRowColumn">第一行是否是DataTable的列名</param> 83 /// <returns>返回的DataTable</returns> 84 public DataTable ExcelToDataTable(string sheetName, bool isFirstRowColumn) 85 { 86 ISheet sheet = null; 87 DataTable data = http://www.mamicode.com/new DataTable(); 88 int startRow = 0; 89 try 90 { 91 fs = new FileStream(fileName, FileMode.Open, FileAccess.Read); 92 if (fileName.IndexOf(".xlsx") > 0) // 2007版本 93 workbook = new XSSFWorkbook(fs); 94 else if (fileName.IndexOf(".xls") > 0) // 2003版本 95 workbook = new HSSFWorkbook(fs); 96 97 if (sheetName != null) 98 { 99 sheet = workbook.GetSheet(sheetName);100 }101 else102 {103 sheet = workbook.GetSheetAt(0);104 }105 if (sheet != null)106 {107 IRow firstRow = sheet.GetRow(0);108 int cellCount = firstRow.LastCellNum; //一行最后一个cell的编号 即总的列数109 110 if (isFirstRowColumn)111 {112 for (int i = firstRow.FirstCellNum; i < cellCount; ++i)113 {114 DataColumn column = new DataColumn(firstRow.GetCell(i).StringCellValue);115 data.Columns.Add(column);116 }117 startRow = sheet.FirstRowNum + 1;118 }119 else120 {121 startRow = sheet.FirstRowNum;122 }123 124 //最后一列的标号125 int rowCount = sheet.LastRowNum;126 for (int i = startRow; i <= rowCount; ++i)127 {128 IRow row = sheet.GetRow(i);129 if (row == null) continue; //没有数据的行默认是null 130 131 DataRow dataRow = data.NewRow();132 for (int j = row.FirstCellNum; j < cellCount; ++j)133 {134 if (row.GetCell(j) != null) //同理,没有数据的单元格都默认是null135 dataRow[j] = row.GetCell(j).ToString();136 }137 data.Rows.Add(dataRow);138 }139 }140 141 return data;142 }143 catch (Exception ex)144 {145 Console.WriteLine("Exception: " + ex.Message);146 return null;147 }148 }149 150 public void Dispose()151 {152 Dispose(true);153 GC.SuppressFinalize(this);154 }155 156 protected virtual void Dispose(bool disposing)157 {158 if (!this.disposed)159 {160 if (disposing)161 {162 if (fs != null)163 fs.Close();164 }165 166 fs = null;167 disposed = true;168 }169 }170 }
注意,一定要引用NPOI的dll。
简单操作excel类
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。