• C#导出涉及行列合并的复杂的Excel数据


    一、导出数据格式

    二、实现代码

            /// <summary>
            /// 导出经费统计excel表格
            /// </summary>
            /// <param name="taskid"></param>
            /// <param name="taskname"></param>
            /// <returns></returns>
            public ActionResult ExportFundDataToExcel(Guid taskid, string taskname)
            {
                var fileHtml = getFundDataCollect(taskid, taskname);
                if (fileHtml == "当前任务没有要导出的经费数据")
                {
                    return Fail(fileHtml);
                }
                byte[] fileContents = Encoding.Default.GetBytes(fileHtml);
                return File(fileContents, "application/ms-excel", taskname + ".xls");
            }
    
            /// <summary>
            /// 获取经费统计html表格
            /// </summary>
            /// <param name="taskid"></param>
            /// <param name="taskname"></param>
            /// <returns></returns>
            public string getFundDataCollect(Guid taskid,string taskname)
            {
                var dt = ProjectFundCalculateService.getFundDataTabe(taskid);
                if (null == dt)
                {
                    return "当前任务没有要导出的经费数据";
                }
                if (dt.Rows.Count < 1)
                {
                    return "当前任务没有要导出的经费数据";
                }
                var fileHtml = new StringBuilder();
                fileHtml.Append("<table border="1" style="table-layout:fixed;" cellspacing='0' cellpadding='0'>");
                fileHtml.Append("<tr>");
                fileHtml.Append("<td colspan="10" style="font-size: 16px; font-family: 宋体; text-align: center; height: 30px;">");
                fileHtml.AppendFormat(" <strong> {0}经费概算</strong>", taskname);
                fileHtml.Append("</td>");
                fileHtml.Append(" </tr>");
                fileHtml.Append("<tr>");
                fileHtml.Append(" <td colspan="10" style="font-size: 16px; text-align: center; height: 30px;">");
                fileHtml.Append(" 计费依据:四川省物价局、四川省财政厅《关于调整环境监测服务收费标准的函》(川价函〔2007〕6号)附件“四川省环境监测服务收费标准”。");
                fileHtml.Append(" </td>");
                fileHtml.Append(" </tr>");
                fileHtml.Append(" <tr>");
                fileHtml.Append(" <td colspan="8"></td>");
                fileHtml.Append(" <td colspan="2" style="text-align: center;font-size: 12px;">单位:元</td>");
                fileHtml.Append(" </tr>");
                fileHtml.Append("<tr>");
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    fileHtml.AppendFormat("<td>{0}</td>", dt.Columns[i].ColumnName);
                }
                fileHtml.Append(" </tr>");
                int rowspan = 1;//要合并的列数
                string flag = "";//rowspan="$flag"的初始值,后面用rowspan替换
                for (var j = 0; j < dt.Rows.Count; j++)
                {
                    fileHtml.Append("<tr>");
                    if (dt.Rows[j][0].ToString() == "小计" || dt.Rows[j][0].ToString() == "监测费用合计" || dt.Rows[j][0].ToString() == "总计")
                    {
                        fileHtml.AppendFormat("<td colspan="2" style="text-align: center;">{0}</td>", dt.Rows[j][0]);
                        var sumtotal = dt.Rows[j][2].ToString();
                        if (dt.Rows[j][0].ToString() == "总计")
                        {
                            sumtotal = new EcanRMB().CmycurD(sumtotal) + "(¥" + sumtotal + "元)";
                        }
                        fileHtml.AppendFormat("<td colspan="8" style="text-align: center;"><strong>{0}</strong></td>", sumtotal);
                    }
                    else if (dt.Rows[j][0].ToString() == "报告编制费" || dt.Rows[j][0].ToString() == "车船费")
                    {
                        fileHtml.AppendFormat("<td colspan="2" style="text-align: center;">{0}</td>", dt.Rows[j][0]);
                        fileHtml.AppendFormat("<td colspan="7" style="text-align: center;">{0}</td>", dt.Rows[j][2]);
                        fileHtml.AppendFormat("<td style="text-align: center;"><strong>{0}</strong></td>", dt.Rows[j][dt.Columns.Count - 1]);
                    }
                    else if (dt.Rows[j][1].ToString() == "人工费")
                    {
    
                        rowspan++;
                        //人工费第一列默认合并
                        fileHtml.AppendFormat("<td style="text-align: center;">{0}</td>", dt.Rows[j][1]);
                        fileHtml.AppendFormat("<td colspan="7" style="text-align: center;">{0}</td>", dt.Rows[j][2]);
                        fileHtml.AppendFormat("<td style="text-align: center;">{0}</td>", dt.Rows[j][dt.Columns.Count - 1]);
    
                        fileHtml.Replace("$" + flag, rowspan.ToString());
                        rowspan = 1;
                        flag = "";
    
                    }
                    else
                    {
                        if (j > 0)
                        {
                            //如果当前列与上一列的值相等则合并,否则初始化rowspan和flag
                            if (dt.Rows[j][0].ToString() == dt.Rows[j - 1][0].ToString())
                            {
                                rowspan++;
                            }
                            else
                            {
                                fileHtml.Replace("$" + flag, rowspan.ToString());
                                if (rowspan > 1)
                                {
                                    rowspan = 1;
                                    flag = "";
                                }
                            }
                        }
                        for (var k = 0; k < dt.Columns.Count; k++)
                        {
                            if (k == 0 && rowspan == 1)
                            {
                                flag = dt.Rows[j][0].ToString();
                                fileHtml.AppendFormat("<td rowspan="${0}" style="text-align: center;">{1}</td>", flag, dt.Rows[j][k]);
                            }
                            else if (k == 0 && rowspan > 1)
                            {
                                fileHtml.Append("");
                            }
                            else
                            {
                                fileHtml.AppendFormat("<td style="text-align: center;">{1}</td>", j, dt.Rows[j][k]);
                            }
                        }
    
                    }
                    fileHtml.Append("</tr>");
                   
                }
                if (rowspan > 1)
                {
                    fileHtml.Replace("$" + flag, rowspan.ToString());
                }
                fileHtml.Append("</table>");
                return fileHtml.ToString();
            }
  • 相关阅读:
    How to hide an entry in the Add/Remove Programs applet?
    常用 VS 快捷键积累
    CruiseControl.NET : Configuration Preprocessor
    BYTE、WORD与DWORD类型
    Cabarc Overview (Microsoft TechNet)
    Windows 7 Shortcuts (完整兼具分类有序,想我所想,赞!)
    CLR has been unable to transition from COM context for 60 seconds
    1. Storm介绍
    4.1 MapReduce架构(1.0)
    3. hdfs原理分析
  • 原文地址:https://www.cnblogs.com/zjbky/p/5263435.html
Copyright © 2020-2023  润新知