zoukankan      html  css  js  c++  java
  • NPOI之使用EXCEL模板创建报表

    因为项目中要用到服务器端创建EXCEL模板 无法直接调用EXCEL 查了下发现NPOI很方便很简单就实现了

    其中走了点弯路 第一次弄的时候发现输出的值是文本不是数字型无法直接计算公式 然后又发现打开报表公式没有自动计算 后来都解决了 详见代码

     #region 报表处理
                    using (FileStream file = new FileStream(@"C:InetpubwwwrootClientBinRptBasicRpt_mrp_DepInOut.xls", FileMode.Open, FileAccess.Read))
                    {
    
                        NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook(file);
                        NPOI.SS.UserModel.ISheet sheet = book.GetSheet("Sheet1");
                        ExcelSetValue(sheet, 0, 0, dt.Rows[0]["myconame"].ToString() + kind);
                        ExcelSetValue(sheet, 3, 1, dt.Rows[0]["coname"].ToString());
                        ExcelSetValue(sheet, 3, 3, dt.Rows[0]["Tel"].ToString());
                        ExcelSetValue(sheet, 3, 6, dt.Rows[0]["sNum"].ToString());
                        ExcelSetValue(sheet, 4, 1, dt.Rows[0]["Address"].ToString());
                        ExcelSetValue(sheet, 4, 3, dt.Rows[0]["Lineman"].ToString());
                        ExcelSetValue(sheet, 4, 6, dt.Rows[0]["sdate"].ToString());
                        ExcelSetValue(sheet, 28, 4, dt.Rows[0]["AuditMan"].ToString());
                        ExcelSetValue(sheet, 28, 7, dt.Rows[0]["upby"].ToString());
    
                        int row = 7;
                        for (int i = 0; i < dtd.Rows.Count; i++)
                        {
                            ExcelSetValue(sheet, i + row, 0, dtd.Rows[i]["sNum"].ToString());
                            ExcelSetValue(sheet, i + row, 1, dtd.Rows[i]["itemname"].ToString());
                            ExcelSetValue(sheet, i + row, 02, dtd.Rows[i]["model"].ToString());
                            ExcelSetValue(sheet, i + row, 03, dtd.Rows[i]["unit"].ToString());
                            ExcelSetValue(sheet, i + row, 04, dtd.Rows[i]["num"].ToString());
                            ExcelSetValue(sheet, i + row, 05, dtd.Rows[i]["price"].ToString());
                            ExcelSetValue(sheet, i + row, 06, dtd.Rows[i]["sum"].ToString());
                            ExcelSetValue(sheet, i + row, 07, dtd.Rows[i]["remark"].ToString());
                        }
                        sheet.ForceFormulaRecalculation = true;
                        // 另存为
                        using (FileStream f = new FileStream(@"C:InetpubwwwrootClientBinRpt" + filename + ".xls", FileMode.Create, FileAccess.ReadWrite))
                        {
                            book.Write(f);
                        }
    
    
                    }
                    #endregion


    其中的设置单元格值的方法

         protected void ExcelSetValue(NPOI.SS.UserModel.ISheet sheet, int Row, int Cell,string sValue)
            {         
                if (sheet.GetRow(Row) == null)
                    sheet.CreateRow(Row);
                if (sheet.GetRow(Row).GetCell(Cell) == null)
                    sheet.GetRow(Row).CreateCell(Cell);
                double d;
                if (double.TryParse(sValue, out d))
                {
                    sheet.GetRow(Row).GetCell(Cell).SetCellValue(d);
                }
                else
                    sheet.GetRow(Row).GetCell(Cell).SetCellValue(sValue);
            }


    http://www.shenou123.com/

    基于Silverlight 永久免费的仓库管理系统 

    日记帐系统承接定制开发管理软件 网页游戏辅助等

  • 相关阅读:
    线程、进程、死锁
    堆和栈的区别
    用winrar解压时提示无法设置安全数据 拒绝访问的解决方法
    句子迷
    【Sublime Text3】sublime 推荐必备插件与常用快捷键说明
    【计算机科学】知乎上关于计算机科学、程序语言一些有用的回答~(不定期更新)
    【SQL 函数】日期函数、类型转换、字符串函数
    【Sql Server函数】日期时间函数、日期查询今天、昨天、7天内、30天的数据
    【JAVA环境配置免安装】如何由jdk的安装版本改成非安装版本
    【SQL 社区】一些有用的SQL社区!(持续更新~~)
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3304115.html
Copyright © 2011-2022 走看看