首页 > 学院 > 开发设计 > 正文

NPOI导入和导出EXCEL 支持2003/2007

2019-11-06 07:32:19
字体:
来源:转载
供稿:网友

================* Introduction *================This PRoject is the .NET port of POI project at http://poi.apache.org/. POI is an open source java project which can help you read/write xls, doc, PPT files. It has a wide application. For example, you can use it a to generate a Excel report without Microsoft Office suite installed on your server and more efficient than call Microsoft Excel ActiveX at background; you can also use it to extract text from Office documents to help you implement full-text indexing feature (most of time this feature is used to create search engines).==================*  NPOI Website *==================https://github.com/tonyqus/npoi/ (Latest source code available)http://npoi.googlecode.com (No latest source code available)http://npoi.codeplex.com (No latest source code available)http://tonyqus.sinaapp.com (Official Tutorial in Chinese)======================* System Requirement *======================VS2010 with .NET 2.0 or .NET 4.0VS2005 or VS2008 with .NET 2.0 Runtime (SP1) vs2003 with .NET 1.1 medium trust environment in asp.net

using System;using System.Data;using System.IO;using NPOI.HSSF.UserModel;using NPOI.SS.UserModel;using NPOI.XSSF.UserModel;namespace MyNameSpace{    public static class NPOIHelper    {                /// <summary>          /// 将excel导入到datatable          /// </summary>          /// <param name="filePath">excel路径</param>          /// <param name="isColumnName">第一行是否是列名</param>          /// <returns>返回datatable</returns>          public static Tuple<string, DataTable> ImportExcelToDataTable(string filePath, bool isColumnName)        {            DataTable dataTable = null;            FileStream fs = null;            DataColumn column = null;            DataRow dataRow = null;            IWorkbook workbook = null;            ISheet sheet = null;            IRow row = null;            ICell cell = null;            int startRow = 0;            try            {                using (fs = File.OpenRead(filePath))                {                    // 2007版本                      if (filePath.IndexOf(".xlsx") > 0)                        workbook = new XSSFWorkbook(fs);                    // 2003版本                      else if (filePath.IndexOf(".xls") > 0)                        workbook = new HSSFWorkbook(fs);                    if (workbook != null)                    {                        sheet = workbook.GetSheetAt(0);//读取第一个sheet,当然也可以循环读取每个sheet                          dataTable = new DataTable();                        if (sheet != null)                        {                            int rowCount = sheet.LastRowNum;//总行数                              if (rowCount > 0)                            {                                IRow firstRow = sheet.GetRow(0);//第一行                                  int cellCount = firstRow.LastCellNum;//列数                                  //构建datatable的列                                  if (isColumnName)                                {                                    startRow = 1;//如果第一行是列名,则从第二行开始读取                                      for (int i = firstRow.FirstCellNum; i < cellCount; ++i)                                    {                                        cell = firstRow.GetCell(i);                                        if (cell != null)                                        {                                            if (cell.StringCellValue != null)                                            {                                                column = new DataColumn(cell.StringCellValue);                                                dataTable.Columns.Add(column);                                            }                                        }                                    }                                }                                else                                {                                    for (int i = firstRow.FirstCellNum; i < cellCount; ++i)                                    {                                        column = new DataColumn("column" + (i + 1));                                        dataTable.Columns.Add(column);                                    }                                }                                //填充行                                  for (int i = startRow; i <= rowCount; ++i)                                {                                    row = sheet.GetRow(i);                                    if (row == null) continue;                                    dataRow = dataTable.NewRow();                                    for (int j = row.FirstCellNum; j < cellCount; ++j)                                    {                                        cell = row.GetCell(j);                                        if (cell == null)                                        {                                            dataRow[j] = "";                                        }                                        else                                        {                                            //CellType(Unknown = -1,Numeric = 0,String = 1,Formula = 2,Blank = 3,Boolean = 4,Error = 5,)                                              switch (cell.CellType)                                            {                                                case CellType.Blank:                                                    dataRow[j] = "";                                                    break;                                                case CellType.Numeric:                                                    short format = cell.CellStyle.DataFormat;                                                    //对时间格式(2015.12.5、2015/12/5、2015-12-5等)的处理                                                      if (format == 14 || format == 31 || format == 57 || format == 58)                                                        dataRow[j] = cell.DateCellValue;                                                    else                                                        dataRow[j] = cell.NumericCellValue;                                                    break;                                                case CellType.String:                                                    dataRow[j] = cell.StringCellValue;                                                    break;                                            }                                        }                                    }                                    dataTable.Rows.Add(dataRow);                                }                            }                        }                    }                }                return Tuple.Create<string, DataTable>("", dataTable);            }            catch (Exception ex)            {                if (fs != null)                {                    fs.Close();                }                return Tuple.Create<string, DataTable>(ex.Message, null);            }        }        public static Tuple<bool, string> ExportDataTableToExcel(DataTable dt, string saveTopath)        {            bool result = false;            string message = "";            IWorkbook workbook = null;            FileStream fs = null;            IRow row = null;            ISheet sheet = null;            ICell cell = null;            try            {                if (dt != null && dt.Rows.Count > 0)                {                    workbook = new HSSFWorkbook();                    sheet = workbook.CreateSheet("Sheet0");//创建一个名称为Sheet0的表                      int rowCount = dt.Rows.Count;//行数                      int columnCount = dt.Columns.Count;//列数                      //设置列头                      row = sheet.CreateRow(0);//excel第一行设为列头                      for (int c = 0; c < columnCount; c++)                    {                        cell = row.CreateCell(c);                        cell.SetCellValue(dt.Columns[c].ColumnName);                    }                    //设置每行每列的单元格,                      for (int i = 0; i < rowCount; i++)                    {                        row = sheet.CreateRow(i + 1);                        for (int j = 0; j < columnCount; j++)                        {                            cell = row.CreateCell(j);//excel第二行开始写入数据                              cell.SetCellValue(dt.Rows[i][j].ToString());                        }                    }                    using (fs = File.OpenWrite(saveTopath))                    {                        workbook.Write(fs);//向打开的这个xls文件中写入数据                          result = true;                    }                }                else                {                    message = "没有解析到数据!";                }                return new Tuple<bool, string>(result, message);            }            catch (Exception ex)            {                if (fs != null)                {                    fs.Close();                }                return new Tuple<bool, string>(false, ex.Message);            }        }    }}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表