在近在网上找了许多给予web的office空间,比如pageoffice,说是免费版的,赶脚很不错,但是用的时候却发现很多只能付费后才能使用。擦,这么忽悠人的,于是乎有学习了nopi的方式,但是网上大多用的都是HSSForwork 也就是说是office2003版本的写法,下面整理的代码是office2007版本以后的及XSSForwork,调用只需传入参数即可,希望对大家有用!

注意:调用的时候请在官方下载最新版本NOPI的包,并添加引用(下载地址:http://npoi.codeplex.com/releases)


1.C#代码:NOPIHelper.cs

/// <summary>
        /// 完整的导出成Excel方法,带表样式
        /// </summary>
        /// <param name="dtSource">数据源 DataTable格式</param>
        /// <param name="dtHeaderText">文件标题</param>
        /// <param name="sheetName">文件工作区名称</param>
        ///  <param name="maxRows">每个工作区sheet的最大行数 ,-1 表示不限制</param>
        ///  <param name="backColor">表头字体权重</param>
        ///  <param name="tilteFontBlod">表头字体权重</param>
        ///  <param name="tilteFamily">表头字体字体大小风格</param>
        ///  <param name="tilteBorder">表头边框</param>
        ///  <param name="tilteHeight">表头行高</param>
        ///  <param name="tilteFontSize">表头字体大小</param>
        ///  <param name="tilteHorV">表头对其方式 可选参数(1:左对齐  2:居中  3:右对齐)</param>
        ///  <param name="headerFontSize">列头字体大小</param>
        ///  <param name="headerFamily">列头字体样式</param>
        ///  <param name="headerFontBold">列头字体权重</param>
        ///  <param name="headerHorV">列头对其方式 可选参数(1:左对齐  2:居中  3:右对齐)</param>
        ///  <param name="contentFontSize">单元格字体大小</param>
        ///  <param name="contentFamily">单元格字体风格</param>
        ///  <param name="contentFontBold">单元格字体权重</param>
        ///  <param name="contentHorV">单元格对其方式 可选参数(1:左对齐  2:居中  3:右对齐)</param>
        /// <param name="headerBorder">列头边框</param>
        /// <param name="unitBorder">单元格边框</param>
        /// <returns>MemoryStream</returns>
        public MemoryStream OutToExcel(DataTable dtSource, String dtHeaderText, string sheetName, int maxRows, short tilteFontBlod, float tilteHeight,
         FontFamily tilteFamily, short tilteFontSize, int tilteHorV, short headerFontBold, FontFamily headerFamily,
         short headerFontSize, bool headerBorder, short contentFontSize, FontFamily contentFamily, short contentFontBold, int headerHorV, bool unitBorder, int contentHorV)
        {
            //创建一个Excel文件对象
            XSSFWorkbook workbook = new XSSFWorkbook();
            //创建第一个工作区
            XSSFSheet sheet = (XSSFSheet)workbook.CreateSheet(sheetName + "_1");
            //创建列的样式
            XSSFCellStyle cell = (XSSFCellStyle)workbook.CreateCellStyle();
            //cell.SetFillBackgroundColor(new XSSFColor().GetARGBHex("").);
            //创建数据格式
            XSSFDataFormat format = (XSSFDataFormat)workbook.CreateDataFormat();
            cell.DataFormat = format.GetFormat("yyyy-mm-dd hh:mm:ss");
            //取得列宽保存在数组
            int[] arrColWidth = new int[dtSource.Columns.Count];
            foreach (DataColumn item in dtSource.Columns)
            {
                arrColWidth[item.Ordinal] = Encoding.UTF8.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.UTF8.GetBytes(dtSource.Rows[i][j].ToString()).Length;
                    if (intTemp > arrColWidth[j])
                    {
                        arrColWidth[j] = intTemp;
                    }
                }
            }
            //行数
            int rowIndex = 1;
            //工作区标识
            int flagPage = 1;
            foreach (DataRow row in dtSource.Rows)
            {
                #region 新建表,填充表头,填充列头,样式
                if (maxRows != -1)
                {
                    if (rowIndex == maxRows || rowIndex == 1)
                    {
                        if (rowIndex != 1)
                        {
                            flagPage++;
                            sheet = (XSSFSheet)workbook.CreateSheet(sheetName + "_" + flagPage);
                        }
                        CreateTile(dtSource, arrColWidth, workbook, sheet, dtHeaderText, tilteFontBlod, tilteHeight, tilteFamily, tilteFontSize,
                        tilteHorV, headerFontBold, headerFontSize, headerFamily, headerHorV, headerBorder);
                        rowIndex = 2;
                    }
                }
                else if (rowIndex == 1 && maxRows == -1)
                {
                    CreateTile(dtSource, arrColWidth, workbook, sheet, dtHeaderText, tilteFontBlod, tilteHeight, tilteFamily, tilteFontSize,
                        tilteHorV, headerFontBold, headerFontSize, headerFamily, headerHorV, headerBorder);

rowIndex = 2;
                }
                #endregion
                #region 填充内容
                XSSFRow dataRow = (XSSFRow)sheet.CreateRow(rowIndex);
                foreach (DataColumn column in dtSource.Columns)
                {
                    XSSFCell newCell = (XSSFCell)dataRow.CreateCell(column.Ordinal);
                    XSSFCellStyle cellstyle = (XSSFCellStyle)workbook.CreateCellStyle();//样式

switch (contentHorV)
                    {
                        case 1: cellstyle.Alignment = HorizontalAlignment.Left;
                            break;
                        case 2: cellstyle.Alignment = HorizontalAlignment.Center;
                            break;
                        case 3: cellstyle.Alignment = HorizontalAlignment.Right;
                            break;
                        default:
                            cellstyle.Alignment = HorizontalAlignment.Center;
                            break;
                    }
                    if (unitBorder)
                    {
                        cellstyle.BorderBottom = BorderStyle.Thin;
                        cellstyle.BorderLeft = BorderStyle.Thin;
                        cellstyle.BorderRight = BorderStyle.Thin;
                        cellstyle.BorderTop = BorderStyle.Thin;
                    }

newCell.CellStyle = cellstyle;
                    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 = cell;//格式化显示
                            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.Dispose();
                workbook.Clear();
                workbook.Close();
                return ms;
            }

}
        /// <summary>
        /// 创建表头和列头
        /// </summary>
        /// <param name="dtSource"></param>
        /// <param name="arrColWidth"></param>
        /// <param name="workbook"></param>
        /// <param name="sheet"></param>
        /// <param name="dtHeaderText"></param>
        /// <param name="tilteFontBlod"></param>
        /// <param name="tilteHeight"></param>
        /// <param name="tilteFamily"></param>
        /// <param name="tilteFontSize"></param>
        /// <param name="tilteHorV"></param>
        /// <param name="headerFontBold"></param>
        /// <param name="headerFontSize"></param>
        /// <param name="headerFamily"></param>
        /// <param name="headerHorV"></param>
        /// <param name="headerBorder"></param>
        private void CreateTile(DataTable dtSource, int[] arrColWidth, XSSFWorkbook workbook, XSSFSheet sheet, String dtHeaderText, short tilteFontBlod, float tilteHeight,
FontFamily tilteFamily, short tilteFontSize, int tilteHorV, short headerFontBold, short headerFontSize, FontFamily headerFamily, int headerHorV, bool headerBorder)
        {
            #region 表头及样式
            {
                XSSFRow headerRow = (XSSFRow)sheet.CreateRow(0);
                headerRow.HeightInPoints = tilteHeight;
                headerRow.CreateCell(0).SetCellValue(dtHeaderText);

XSSFCellStyle headStyle = (XSSFCellStyle)workbook.CreateCellStyle();

headStyle.VerticalAlignment = VerticalAlignment.Center;

//  headStyle.SetFillForegroundColor((XSSFColor)IndexedColors.Green);
                //byte[] b = new byte[] { 248, 101, 101 };
                //headStyle.
                //headStyle.setFillPattern(XSSFCellStyle.);
                //headStyle.setFillBackgroundXSSFColor(IndexedColors.RED.getIndex());
                switch (tilteHorV)
                {
                    case 1: headStyle.Alignment = HorizontalAlignment.Left;
                        break;
                    case 2: headStyle.Alignment = HorizontalAlignment.Center;
                        break;
                    case 3: headStyle.Alignment = HorizontalAlignment.Right;
                        break;
                    default:
                        headStyle.Alignment = HorizontalAlignment.Center;
                        break;
                }
                XSSFFont font = (XSSFFont)workbook.CreateFont();
                font.FontHeightInPoints = tilteFontSize;
                font.Boldweight = tilteFontBlod;
                font.SetFamily(tilteFamily);
                headStyle.SetFont(font);
                NPOI.SS.Util.CellRangeAddress reg = new NPOI.SS.Util.CellRangeAddress(0, 0, 0, dtSource.Columns.Count - 1);

sheet.AddMergedRegion(reg);
                headerRow.GetCell(0).CellStyle = headStyle;
            }
            #endregion
            #region 列头及样式
            {
                XSSFRow headerRow = (XSSFRow)sheet.CreateRow(1);
                XSSFCellStyle headStyle = (XSSFCellStyle)workbook.CreateCellStyle();
                headStyle.VerticalAlignment = VerticalAlignment.Center;
                if (headerBorder)
                {
                    headStyle.BorderBottom = BorderStyle.Thin;
                    headStyle.BorderLeft = BorderStyle.Thin;
                    headStyle.BorderRight = BorderStyle.Thin;
                    headStyle.BorderTop = BorderStyle.Thin;
                }
                switch (headerHorV)
                {
                    case 1: headStyle.Alignment = HorizontalAlignment.Left;
                        break;
                    case 2: headStyle.Alignment = HorizontalAlignment.Center;
                        break;
                    case 3: headStyle.Alignment = HorizontalAlignment.Right;
                        break;
                    default:
                        headStyle.Alignment = HorizontalAlignment.Center;
                        break;
                }
                XSSFFont font = (XSSFFont)workbook.CreateFont();
                font.FontHeightInPoints = headerFontSize;
                font.Boldweight = headerFontBold;
                font.SetFamily(headerFamily);
                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]) * 256);
                }
            }
            #endregion

}

NOPI导出excel相关推荐

  1. nopi 导出excel 带图片

    HSSFWorkbook hssfworkbook = new HSSFWorkbook(); var sheet1 = hssfworkbook.CreateSheet("第一个Sheet ...

  2. C# NOPI导出EXCEL报错

    CSharpCode.SharpZipLib, Version=0.86.0.518, Culture=neutral, PublicKeyToken=1b03e6acf116 检查webconfig ...

  3. NOPI导出Excel用法

    https://www.cnblogs.com/Can-daydayup/p/12501400.html

  4. 引用NOPI 按excel模版 导出EXCEL类

    按excel模版(字段带引出数据源字段编号)导出EXCEL using System.Linq; using System.Text; using NPOI; using NPOI.SS.UserMo ...

  5. MVC5中利用NOPI导出EXCLE

    MVC5中利用NOPI导出EXCLE //导出excle 设备效率public JsonResult Exporta(){var jser = new JavaScriptSerializer();s ...

  6. Asp.net高效导出excel篇之Aspose导出excel

    上周在博客中写了一篇<Asp.net高效导出Excel篇>在发布之后收到很多热心网友的建议--使用Excel第三方引擎如NOPI.Aspose.cell等导出Excel,优点:效率高.不需 ...

  7. NOPI操作Excel

    //自定义颜色 ,将颜色转换成NOPI的颜色 private static short GetXLColour(HSSFWorkbook workbook, System.Drawing.Color ...

  8. epplus保存为流_ASP.NET Core使用EPPlus导入导出Excel

    开发过程中,经常会遇到导入导出数据的需求,本篇博客介绍在.NET Core中如何使用EPPlus组件导入导出Excel EPPlus: EPPlus是使用Open Office XML格式(xlsx) ...

  9. java struts2 excel上传_Java Struts2 实现数据库数据导出Excel文件

    HTML: 导出 Struts.xml true application/vnd.ms-excel;charset=GBK excelStream attachment;filename=${file ...

  10. Java springMVC POI 导出 EXCEL

    2019独角兽企业重金招聘Python工程师标准>>> 思路 : 将需要导出的数据存放在一个List中 创建一个EXCEL表 注意 XSSFWorkbook 只能操作2007以上的版 ...

最新文章

  1. CVPR 2020丨基于点云的3D物体检测新框架
  2. 细说SSO单点登录(转)
  3. Visual Studio 2017 社区版的安装与组件修改(C++)
  4. python 惰性_Django中的“惰性翻译”方法的相关使用
  5. nginx https 访问http_Nginx之Http模块系列之访问控制模块
  6. java activiti jbpm_activiti和jbpm工作流引擎哪个比较好?
  7. .Net Crank性能测试入门
  8. JBoss BPM Travel Agency演示与现代BPM数据集成
  9. 怎么查看计算机的系统内存大小,Windows10系统怎么查看电脑内存大小
  10. 导出时间字段的处理_如何快速将发票信息导出到excel表格中?
  11. MFC sendmessage实现进程间通信
  12. 进程间通信 --- 命名管道 有名管道存在与内存中,无名管道存在与文件系统中 换种角度看问题
  13. java发送email_java发送email一般步骤(实例讲解)
  14. WPF学习拾遗(三)TextBox焦点问题
  15. 关于C#操作mysql数据库乱码
  16. Topic 10. 单因素 Logistic 回归分析—单因素分析表格
  17. 802.11e规范的服务质量保障机制
  18. 详解3D结构光如何标定
  19. 文件的打开方式怎么用计算机,电脑怎样修改文件默认打开方式
  20. 使用eNSP配置防火墙USG6000v双机热备(VGMP+HRP+OSPF+NAT)

热门文章

  1. 部署AdminLTE
  2. 红蓝对抗之win10 权限提升
  3. lintcode刷题——左叶子的和
  4. 计算机自带的命令提示符,Windows 10上有十种打开命令提示符的方法,你知道多少...
  5. 实验吧CTF web刷题
  6. HTML的Demo实例
  7. Redis实战(通俗易懂,超详细攻略) V2.0版本
  8. 【离散数学】欧拉图与哈密顿图的区别
  9. 商场客流量统计摄像头设备
  10. 魔鬼训练Day1作业