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();
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM