• C#的NPOI根据模板导出动态EXCEL图表,


    对于数据导出网上数不胜数,可是图表却寥寥无几,可能我没搜到吧。。。。

    这个方法感觉对于EXCEL模板的要求比较高,模板做的好导出来的效果相对完美一点,导出的数据若是动态行列的不妨看下如下这篇,先做好一份好的模板

    https://www.zhihu.com/question/48727312/answer/113147034

    顺便再放一个纵向折线图画法

    http://www.officedoyen.com/a/exceltubiao/yibantubiao/zhexiantu/2015/0714/10795.html

    接下来就是一些代码了

    js代码,写一个点击事件访问后台方法,后面跟自己要加的参数

    //导出点击事件
        $("#btExport").click(function () {
          
            window.open("/text/ajax/export.aspx?Method=export&language=" +c.language);
        });

    后台代码

       
     DBClass db = new DBClass();       
         MemoryStream ms = new MemoryStream();
           IWorkbook workbook = new HSSFWorkbook();
    
            //模板路径,从ajax的上一层test找到excel文件下的模板.xls
            string excelTempPath = Server.MapPath("~/test/") + "/excel/模板.xls";
            //读取Excel模板
            using (FileStream fs = new FileStream(excelTempPath, FileMode.Open, FileAccess.Read))
            {
                workbook = new HSSFWorkbook(fs);
            }
         
            ISheet sheet = workbook.GetSheetAt(0);//表示在模板的第一个工作簿里写入
            IRow headerRow = sheet.CreateRow(0);
            try
            {
                //string starttime = Request.Params["Ssss"].ToString();//后台取出传来的数据
                //倘若是ajax的方式传值用MyForm["Method"].ToString().ToLower()
                //读取数据库的名称
                DataTable newTable = new DataTable();
                SqlCommand comm;
                DataSet ds;
                string sql = "这里写取数据的sql"
                comm = db.getSqlCommand(sql);
                ds = db.getDataSetBySqlCommand(comm);
            //下面这部分一般人不需要可以删掉
                newTable = ds.Tables[0].Copy();
                DataRow dr = newTable.NewRow();
                int BSum = 0;
                int PNum = 0;
    
                for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                {
                    BSum += int.Parse(ds.Tables[0].Rows[i][1].ToString());
                    PNum += int.Parse(ds.Tables[0].Rows[i][2].ToString());
                }
                object[] objs = { "业务部", BSum, PNum };
                dr.ItemArray = objs;
                newTable.Rows.Add(dr);
            //新插入一行数据
                DataTable table = newTable;
    
                int k = 0;
                string language = Request.Params["language"].ToString();
        //以下还是有必要的加上头部名称
    foreach (DataColumn column in table.Columns) {
            //  headerRow.CreateCell(column.Ordinal).SetCellValue(column.Caption)//加上为列名的头部  
              if (language == "zh-cn") {
                //设置自定义头部名称 headerRow.CreateCell(column.Ordinal).SetCellValue(deptbusinessTitle[k].Split(
    ',')[0]); } else { headerRow.CreateCell(column.Ordinal).SetCellValue(deptbusinessTitle[k].Split(',')[1]); } k++; } int rowIndex = 1; foreach (DataRow row in table.Rows) { IRow dataRow = sheet.CreateRow(rowIndex); int colnum = 0; foreach (DataColumn column in table.Columns) { if (colnum == 0)//导入excel时一些数据列必须是int类型的,否则它就不会自己绘制 { dataRow.CreateCell(column.Ordinal).SetCellValue(row[column].ToString()); } else { dataRow.CreateCell(column.Ordinal).SetCellValue(int.Parse(row[column].ToString())); } colnum++; } rowIndex++; } workbook.Write(ms); ms.Flush(); ms.Position = 0; string fileName = "导出文件.xls"; if (Request.Browser.Browser == "IE") fileName = HttpUtility.UrlEncode(fileName); Response.AddHeader("Content-Disposition", "attachment;fileName=" + fileName); Response.BinaryWrite(ms.ToArray()); } catch (Exception e) { throw e; } finally { db.CloseConn(); }
  • 相关阅读:
    yii修改密码 弹出修改成功提示(八)
    yii模型规则的简单使用以及开启前端的验证(七)
    利用ab测试并发可靠么
    yii数据库链接(六)
    初始化collectionViewCell
    监听事件
    ControllerEvent
    代码构建视图
    DeveloperAppleHelp
    Xcode 小技巧
  • 原文地址:https://www.cnblogs.com/wangjiaxiaoxi/p/7198827.html
Copyright © 2020-2023  润新知