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

通过NPOI操作Excel

2019-11-17 02:58:03
字体:
来源:转载
供稿:网友

通过NPOI操作Excel

最近在做的一个项目中需要生成Excel,通过学习使用NPOI实现了相关需求,写了一个简便操作的类,记录如下:

public class NPOIHelperForExcel    {        #region excel文件属性        //作者        public string Author { get; set; }        //标题        public string Title { get; set; }        //主题        public string Subject { get; set; }        //标记        public string KeyWords { get; set; }        //创建程序信息        public string applicationName { get; set; }        //最后一次保存者        public string LastAuthor { get; set; }        //备注        public string Comments { get; set; }        //创建内容的时间        public DateTime? CreateDateTime { get; set; }        //最后一次打印的时间        public DateTime? LastPRinted { get; set; }        //最后一次保存的时间        public DateTime? LastSaveDateTime { get; set; }        //公司        public string Company { get; set; }        //管理者        public string Manager { get; set; }        //比例        public bool Scale { get; set; }        #endregion        #region 导出,将DataTable导出为Excel文件        /// <summary>        /// DataTable导出到Excel文件        /// </summary>        /// <param name="dtSource">源DataTable</param>        /// <param name="headerTextList">表头摘要信息</param>        /// <param name="strFileName">保存位置</param>        public void Export(DataTable dtSource, List<String> headerTextList, string strFileName)        {            using (MemoryStream ms = Export(dtSource, headerTextList))            {                using (FileStream fs = new FileStream(strFileName, FileMode.Create, Fileaccess.Write))                {                    byte[] data = ms.ToArray();                    fs.Write(data, 0, data.Length);                    fs.Flush();                }            }        }        /// <summary>        /// DataTable导出到Excel的MemoryStream        /// </summary>        /// <param name="dtSource">源DataTable</param>        /// <param name="headerTextList">表头摘要信息</param>        public MemoryStream Export(DataTable dtSource, List<String> headerTextList)        {            HSSFWorkbook workbook = new HSSFWorkbook();            ISheet sheet = workbook.CreateSheet("sheet1");            //设置Excel文件属性信息            SetFileProperty(workbook);            HSSFCellStyle dateStyle = (HSSFCellStyle)workbook.CreateCellStyle();            HSSFDataFormat format = (HSSFDataFormat)workbook.CreateDataFormat();            dateStyle.DataFormat = format.GetFormat("yyyy-mm-dd");            //计算列宽            int[] arrColWidth = new int[dtSource.Columns.Count];            foreach (DataColumn item in dtSource.Columns)            {                arrColWidth[item.Ordinal] = Encoding.GetEncoding(936).GetBytes(item.ColumnName.ToString()).Length;            }            //获取每一列的最大列宽            for (int i = 0; i < dtSource.Rows.Count; i++)            {                for (int j = 0; j < dtSource.Columns.Count; j++)                {                    int intTemp = Encoding.GetEncoding(936).GetBytes(dtSource.Rows[i][j].ToString()).Length;                    if (intTemp > arrColWidth[j])                    {                        arrColWidth[j] = intTemp;                    }                }            }            int rowIndex = 0;            foreach (DataRow row in dtSource.Rows)            {                #region 新建表,填充表头,填充列头,样式                if (rowIndex == 65535 || rowIndex == 0)                {                    if (rowIndex != 0)                    {                        sheet = workbook.CreateSheet();                    }                    #region 表头及样式                    for (int i = 0; i < headerTextList.Count; i++)                    {                        HSSFRow headerRow = (HSSFRow)sheet.CreateRow(i);                        headerRow.HeightInPoints = 18;                        headerRow.CreateCell(0).SetCellValue(headerTextList[i]);                        HSSFCellStyle headerStyle = (HSSFCellStyle)workbook.CreateCellStyle();                        headerStyle.Alignment = HorizontalAlignment.Left;                        HSSFFont font = (HSSFFont)workbook.CreateFont();                        font.FontHeightInPoints = 14;                        //font.Boldweight = 700;                        headerStyle.SetFont(font);                        headerRow.GetCell(0).CellStyle = headerStyle;                        sheet.AddMergedRegion(new CellRangeAddress(0, 0, 0, dtSource.Columns.Count - 1));                    }                    #endregion                    #region 列头及样式                    {                        HSSFRow headerRow = (HSSFRow)sheet.CreateRow(headerTextList.Count);                        HSSFCellStyle headStyle = (HSSFCellStyle)workbook.CreateCellStyle();                        headStyle.Alignment = HorizontalAlignment.Center;                        HSSFFont font = (HSSFFont)workbook.CreateFont();                        font.FontHeightInPoints = 10;                        font.Boldweight = 700;                        headStyle.SetFont(font);                        foreach (DataColumn column in dtSource.Columns)                        {                            headerRow.CreateCell(column.Ordinal).SetCellValue(column.ColumnName);                            headerRow.GetCell(column.Ordinal).CellStyle = headStyle;                            //设置列宽                            sheet.SetColumnWidth(column.Ordinal, (arrColWidth[column.Ordinal] + 1) * 256);                        }                    }                    #endregion                    rowIndex = headerTextList.Count + 1;                }                #endregion                #region 填充表格内容                HSSFRow dataRow = (HSSFRow)sheet.CreateRow(rowIndex);                foreach (DataColumn column in dtSource.Columns)                {                    HSSFCell newCell = (HSSFCell)dataRow.CreateCell(column.Ordinal);                    string drValue = row[column].ToString();                    switch (column.DataType.ToString())                    {                        case "System.String": //字符串类型                            newCell.SetCellValue(drValue);                            break;                        case "System.DateTime": //日期类型                            DateTime dateV;                            DateTime.TryParse(drValue, out dateV);                            newCell.SetCellValue(dateV);                            newCell.CellStyle = dateStyle; //格式化显示                            break;                        case "System.Boolean": //布尔型                            bool boolV = false;                            bool.TryParse(drValue, out boolV);                            newCell.SetCellValue(boolV);                            break;                        case "System.Int16": //整型                        case "System.Int32":                        case "System.Int64":                        case "System.Byte":                            int intV = 0;                            int.TryParse(drValue, out intV);                            newCell.SetCellValue(intV);                            break;                        case "System.Decimal": //浮点型                        case "System.Double":                            double doubV = 0;                            double.TryParse(drValue, out doubV);                            newCell.SetCellValue(doubV);                            break;                        case "System.DBNull": //空值处理                            newCell.SetCellValue("");                            break;                        default:                            newCell.SetCellValue("");                            break;                    }                }                #endregion                rowIndex++;            }            using (MemoryStream ms = new MemoryStream())            {                workbook.Write(ms);                ms.Flush();                ms.Position = 0;                return ms;            }        }        /// <summary>        /// 用于Web导出        /// </summary>        /// <param name="dtSource">源DataTable</param>        /// <param name="headerTextList">表
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表