123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- using NPOI.HSSF.UserModel;
- using NPOI.XSSF.UserModel;
- using System;
- using System.Data;
- using System.IO;
- namespace MainForm.ClassFile
- {
- /// <summary>
- /// EXCEL操作类
- /// </summary>
- public class NPOIHelper
- {
- /// <summary>
- /// 读取指定路径的Excel文件到DataTable
- /// </summary>
- /// <param name="filePath"></param>
- /// <returns></returns>
- public static DataTable ReadExcel(string filePath)
- {
- NPOI.SS.UserModel.ISheet sheet;
- if (filePath.Contains(".xlsx")) // 2007 xlsx
- {
- #region//初始化信息
- XSSFWorkbook hssfworkbook;
- try
- {
- using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
- {
- hssfworkbook = new XSSFWorkbook(file);
- }
- }
- catch (Exception e)
- {
- throw e;
- }
- sheet = hssfworkbook.GetSheetAt(0);
- #endregion
- System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
- DataTable dt = new DataTable();
- for (int j = 0; j < (sheet.GetRow(0).LastCellNum); j++) // cell数
- {
- dt.Columns.Add(Convert.ToChar(((int)'A') + j).ToString());
- }
- while (rows.MoveNext())
- {
- XSSFRow row = (XSSFRow)rows.Current;
- DataRow dr = dt.NewRow();
- for (int i = 0; i < row.LastCellNum; i++)
- {
- NPOI.SS.UserModel.ICell cell = row.GetCell(i);
- if (cell == null)
- {
- dr[i] = null;
- }
- else
- {
- dr[i] = cell.ToString();
- }
- }
- dt.Rows.Add(dr);
- }
- return dt;
- }
- else // 2003 xls
- {
- HSSFWorkbook hssfworkbook;
- try
- {
- using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
- {
- hssfworkbook = new HSSFWorkbook(file);
- }
- }
- catch (Exception e)
- {
- throw e;
- }
- sheet = hssfworkbook.GetSheetAt(0);
- System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
- DataTable dt = new DataTable();
- for (int j = 0; j < (sheet.GetRow(0).LastCellNum); 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++)
- {
- NPOI.SS.UserModel.ICell cell = row.GetCell(i);
- if (cell == null)
- {
- dr[i] = null;
- }
- else
- {
- dr[i] = cell.ToString();
- }
- }
- dt.Rows.Add(dr);
- }
- return dt;
- }
- }
- /// <summary>
- /// 将DataTable数据写入到指定路径的Excel文件
- /// </summary>
- /// <param name="dt"></param>
- /// <param name="filePath"></param>
- public static void WriteExcel(DataTable dt, string filePath)
- {
- if (!string.IsNullOrEmpty(filePath) && null != dt && dt.Rows.Count > 0)
- {
- if (filePath.Contains(".xlsx")) // 2007 xlsx
- {
- XSSFWorkbook book = new XSSFWorkbook();
- NPOI.SS.UserModel.ISheet sheet = book.CreateSheet(dt.TableName);
- NPOI.SS.UserModel.IRow row = sheet.CreateRow(0);
- for (int i = 0; i < dt.Columns.Count; i++)
- {
- row.CreateCell(i).SetCellValue(dt.Columns[i].ColumnName);
- }
- for (int i = 0; i < dt.Rows.Count; i++)
- {
- NPOI.SS.UserModel.IRow row2 = sheet.CreateRow(i + 1);
- for (int j = 0; j < dt.Columns.Count; j++)
- {
- row2.CreateCell(j).SetCellValue(Convert.ToString(dt.Rows[i][j]));
- }
- }
- // 写入到客户端
- using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
- {
- book.Write(ms);
- using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))
- {
- byte[] data = ms.ToArray();
- fs.Write(data, 0, data.Length);
- fs.Flush();
- }
- book = null;
- }
- }
- else // 2003 xls
- {
- NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();
- NPOI.SS.UserModel.ISheet sheet = book.CreateSheet(dt.TableName);
- NPOI.SS.UserModel.IRow row = sheet.CreateRow(0);
- for (int i = 0; i < dt.Columns.Count; i++)
- {
- row.CreateCell(i).SetCellValue(dt.Columns[i].ColumnName);
- }
- for (int i = 0; i < dt.Rows.Count; i++)
- {
- NPOI.SS.UserModel.IRow row2 = sheet.CreateRow(i + 1);
- for (int j = 0; j < dt.Columns.Count; j++)
- {
- row2.CreateCell(j).SetCellValue(Convert.ToString(dt.Rows[i][j]));
- }
- }
- // 写入到客户端
- using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
- {
- book.Write(ms);
- using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))
- {
- byte[] data = ms.ToArray();
- fs.Write(data, 0, data.Length);
- fs.Flush();
- }
- book = null;
- }
- }
- }
- }
- }
- }
|