Beispiel #1
0
    protected void btnReport_Click(object sender, EventArgs e)
    {
        DataTable dt = CamperHoldingDA.GetData(Int32.Parse(ddlCampYear.SelectedItem.Text));

        string templateFile = Server.MapPath(@"~/Docs/Templates/CamperDetailReport.xls");
        string workFileDir  = Server.MapPath(@"~/Docs");

        // Make a excel report
        ExcelLite.SetLicense("EL6N-Z669-AZZG-3LS7");
        ExcelFile excel = new ExcelFile();

        excel.LoadXls(templateFile);

        ExcelWorksheet ws = excel.Worksheets["Sheet1"];

        ws.Name = "Campers Holding";

        ws.InsertDataTable(dt, 0, 0, true);

        CellStyle tableHeaderStyle = new CellStyle();

        tableHeaderStyle.Font.Weight = ExcelFont.BoldWeight;
        tableHeaderStyle.FillPattern.SetSolid(Color.DarkGray);

        ws.Rows[0].Style    = tableHeaderStyle;
        ws.Columns[0].Width = 20 * 256;
        ws.Columns[1].Width = 20 * 256;
        ws.Columns[2].Width = 30 * 256;
        ws.Columns[4].Width = 17 * 256;
        ws.Columns[5].Width = 42 * 256;
        ws.Columns[6].Width = 40 * 256;
        ws.Columns[7].Width = 16 * 256;
        ws.Columns[8].Width = 16 * 256;

        // Save to a file on the local file system
        string filename = String.Format("\\{0}{1}{2}{3}CamperHoldingReport.xls", DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Millisecond);
        string newFile  = workFileDir + filename;

        excel.SaveXls(newFile);

        string[] strFileParts = newFile.Split(new string[] { "\\" }, StringSplitOptions.None);

        //Display excel spreadsheet
        this.Response.Clear();
        this.Response.Buffer = true;
        this.Response.AddHeader("Content-Disposition", "attachment; filename=" + strFileParts[strFileParts.Length - 1]);
        this.Response.ContentType = "application/vnd.ms-excel";
        this.Response.Charset     = "";

        if (newFile.Length == 0)
        {
            this.Response.Write("Error encountered - no spreadsheet to display");
        }
        else
        {
            this.Response.WriteFile(newFile);
        }

        Response.End();
    }
    protected void btnReport_Click(object sender, EventArgs e)
    {
        DataSet ds;

        // Work sheet #1 - Data grouped by camp
        // the data content section of the report
        if (param.CamperOrg == CamperOrgType.CamperContactInfo)
        {
            ds = CamperApplicationBL.GetCamperContactInfoReportInBatch(UserRole, param.FedID, param.FedID_List, param.CampYearID, param.CampID_List, param.StatusID_List, param.TimesReceivedGrant);
        }
        else if (param.CamperOrg == CamperOrgType.CamperDetailReport)
        {
            ds = CamperApplicationBL.GetCamperDetailReportInBatch(UserRole, param.FedID, param.FedID_List, param.CampYearID, param.CampID_List, param.StatusID_List, param.TimesReceivedGrant);
        }
        else
        {
            ds = CamperApplicationBL.GetFJCCamperReportInBatch(param.CamperOrg, param.ProgramTypeID, param.FedID, param.CampYearID, param.CampID_HaveData_List, param.StatusID_List, param.TimesReceivedGrant);
        }


        string templateFile = Server.MapPath(@"~/Docs/Templates/CamperDetailReport.xls");
        string workFileDir  = Server.MapPath(@"~/Docs");

        // Make a excel report
        ExcelLite.SetLicense("EL6N-Z669-AZZG-3LS7");
        ExcelFile excel = new ExcelFile();

        excel.LoadXls(templateFile);

        ExcelWorksheet ws = excel.Worksheets["Sheet2"];

        //We start at first row, because for ExcelLite control, the header row is not included
        int BEGIN_COLUMN_INDEX;

        if (param.CamperOrg == CamperOrgType.CamperContactInfo || param.CamperOrg == CamperOrgType.CamperDetailReport)
        {
            BEGIN_COLUMN_INDEX = 0;
        }
        else
        {
            BEGIN_COLUMN_INDEX = 1;
        }

        const int CAMP_NAME_MERGED_CELL_NUMBER  = 6;
        const int REPORT_HEADER_CELL_NUMBER     = 6;
        const int REPORT_SUB_HEADER_CELL_NUMBER = 4;

        int iRow = 1;

        // Global artistic seeting
        ws.Columns[0].Width = 20 * 20;

        // Create Report Header
        CellStyle styleReportHeader = new CellStyle();

        styleReportHeader.Font.Color  = System.Drawing.Color.Blue;
        styleReportHeader.Font.Size   = 22 * 20;
        styleReportHeader.Font.Weight = ExcelFont.BoldWeight;

        CellRange ReportHeader = ws.Cells.GetSubrangeAbsolute(iRow, BEGIN_COLUMN_INDEX, iRow, REPORT_HEADER_CELL_NUMBER);

        ReportHeader.Merged = true;
        ReportHeader.Style  = styleReportHeader;

        var fileName = "report";

        ReportHeader.Value = fileName = GetReportName(param.CamperOrg);
        ws.Name            = "By Camp";
        //
        iRow += 1;

        // Create Report SubHeader
        CellStyle styleSubHeader = new CellStyle();

        styleSubHeader.Font.Size   = 16 * 20;
        styleSubHeader.Font.Weight = ExcelFont.BoldWeight;

        CellRange SubHeader = ws.Cells.GetSubrangeAbsolute(iRow, BEGIN_COLUMN_INDEX, iRow, REPORT_SUB_HEADER_CELL_NUMBER);

        SubHeader.Merged = true;
        SubHeader.Value  = String.Format("Camp Year: {0}  Generated on {1}", param.CampYear, DateTime.Now);
        SubHeader.Style  = styleSubHeader;

        iRow += 2;

        CellStyle cs = new CellStyle();

        //cs.Font.Color = System.Drawing.Color.Red;
        cs.Font.Size   = 18 * 20;
        cs.Font.Weight = ExcelFont.BoldWeight;

        CellStyle csFirst = new CellStyle();

        csFirst.FillPattern.SetSolid(Color.Yellow);
        csFirst.Font.Weight = ExcelFont.BoldWeight;
        csFirst.WrapText    = true;

        ws.Columns[0].Width = 20 * 256;

        CellStyle tableHeaderStyle = new CellStyle();

        tableHeaderStyle.Font.Weight = ExcelFont.BoldWeight;
        tableHeaderStyle.FillPattern.SetSolid(Color.DarkGray);

        CellStyle redText = new CellStyle();

        redText.Font.Color = Color.Red;

        foreach (DataTable dt in ds.Tables)
        {
            CellRange cr = ws.Cells.GetSubrangeAbsolute(iRow, BEGIN_COLUMN_INDEX, iRow, CAMP_NAME_MERGED_CELL_NUMBER);
            cr.Merged = true;

            cr.Value = dt.Rows[0]["Camp Name"].ToString();

            //if (param.CamperOrg == CamperOrgType.CamperContactInfo)
            //{
            //    cr.Value = dt.Rows[0]["Camp Name"].ToString();
            //}
            //else
            //{
            //    cr.Value = param.CampsThatHaveDataDict.ElementAt(ds.Tables.IndexOf(dt)).Value;
            //}

            cr.Style = cs;

            ws.Rows[iRow].Height = 25 * 20;

            iRow += 1;

            ws.Rows[iRow].Height = 25 * 20;

            CellRange crFirst = ws.Cells.GetSubrangeAbsolute(iRow, 0, iRow, 0);

            if (param.CamperOrg != CamperOrgType.CamperContactInfo && param.CamperOrg != CamperOrgType.CamperDetailReport)
            {
                crFirst.Value = "Registered at Camp: Enter a Y / N here";
                crFirst.Style = csFirst;
            }

            ws.InsertDataTable(dt, iRow, BEGIN_COLUMN_INDEX, true);

            // 2012-10-28 Need to make allow contact emails stand out so admins won't contact campers who wish not to be contacted
            if (param.CamperOrg == CamperOrgType.CamperContactInfo)
            {
                for (int i = 0; i <= dt.Rows.Count; i++)
                {
                    if (ws.Cells[i + iRow, 14].Value.ToString() == "No")
                    {
                        ws.Cells[i + iRow, 14].Style = redText;
                        ws.Cells[i + iRow, 15].Style = redText;
                        ws.Cells[i + iRow, 16].Style = redText;
                    }
                }
            }
            else
            {
                for (int i = 0; i <= dt.Rows.Count; i++)
                {
                    //if (ws.Cells[i + iRow, 14].Value.ToString() == "No")
                    //{
                    //    ws.Cells[i + iRow, 14].Style = redText;
                    //    ws.Cells[i + iRow, 15].Style = redText;
                    //}
                }
            }

            // loop through each column and 1.set the width of each colum, 2. set the header style of each column
            for (int i = BEGIN_COLUMN_INDEX; i <= dt.Columns.Count; i++)
            {
                if (param.CamperOrg == CamperOrgType.CamperContactInfo)
                {
                    ws.Cells[iRow, i].Style = tableHeaderStyle;
                    if (i == 2)
                    {
                        ws.Columns[i].Width = 22 * 256;
                    }
                    else if (i == 3)
                    {
                        ws.Columns[i].Width = 16 * 256;
                    }
                    else if (i == 4)
                    {
                        ws.Columns[i].Width = 16 * 256;
                    }
                    else if (i == 5)
                    {
                        ws.Columns[i].Width = 16 * 256;
                    }
                    else if (i == 7)
                    {
                        ws.Columns[i].Width = 23 * 256;
                    }
                    else if (i == 5)
                    {
                        ws.Columns[i].Width = 15 * 256;
                    }
                    else if (i == 11)
                    {
                        ws.Columns[i].Width = 26 * 256;
                    }
                    else if (i == 12)
                    {
                        ws.Columns[i].Width = 15 * 256;
                    }
                    else if (i == 13)
                    {
                        ws.Columns[i].Width = 10 * 256;
                    }
                    else if (i == 14)
                    {
                        ws.Columns[i].Width = 10 * 256;
                    }
                    else
                    {
                        ws.Columns[i].Width = 20 * 256;
                    }
                }
                else
                {
                    ws.Cells[iRow, i].Style = tableHeaderStyle;
                    if (i == 3)
                    {
                        ws.Columns[i].Width = 30 * 256;
                    }
                    else if (i == 4)
                    {
                        ws.Columns[i].Width = 16 * 256;
                    }
                    else if (i == 5)
                    {
                        ws.Columns[i].Width = 16 * 256;
                    }
                    else if (i == 7)
                    {
                        ws.Columns[i].Width = 23 * 256;
                    }
                    else if (i == 5)
                    {
                        ws.Columns[i].Width = 15 * 256;
                    }
                    else if (i == 11)
                    {
                        ws.Columns[i].Width = 26 * 256;
                    }
                    else if (i == 12)
                    {
                        ws.Columns[i].Width = 15 * 256;
                    }
                    else
                    {
                        ws.Columns[i].Width = 20 * 256;
                    }
                }
            }

            iRow += dt.Rows.Count + 2;

            DataTable dtTotal;

            if (param.CamperOrg == CamperOrgType.EnrollmentConfirmationFJC || param.CamperOrg == CamperOrgType.EnrollmentConfirmationPartner)
            {
                dtTotal = CreateTotalTablePerCamp(dt);
            }
            else if (param.CamperOrg == CamperOrgType.Synagogue)
            {
                dtTotal = CreateTotalTablePerSynag(dt);
            }
            else
            {
                dtTotal = null;
            }

            if (param.CamperOrg != CamperOrgType.CamperContactInfo && param.CamperOrg != CamperOrgType.CamperDetailReport)
            {
                ws.InsertDataTable(dtTotal, iRow, BEGIN_COLUMN_INDEX, true);

                for (int i = BEGIN_COLUMN_INDEX; i <= dtTotal.Columns.Count; i++)
                {
                    ws.Cells[iRow, i].Style = tableHeaderStyle;
                }

                iRow += dtTotal.Rows.Count + 3;
            }
        }

        // ************************** second tab ********************************
        // Second alternate sheet that list all rows as table format
        // Camper Detail Report (for Program admin) doesn't need to show the whole list
        if (param.CamperOrg != CamperOrgType.EnrollmentConfirmationFJC && param.CamperOrg != CamperOrgType.EnrollmentConfirmationPartner)
        {
            var ws2 = excel.Worksheets["Sheet1"];

            ws2.Name = fileName;
            DataTable dtAlternate;

            if (param.CamperOrg == CamperOrgType.CamperContactInfo)
            {
                dtAlternate = CamperApplicationDA.GetCamperContactInfoReportInBatch(UserRole, param.FedID, param.FedID_List,
                                                                                    param.CampYearID, param.CampID_List, param.StatusID_List, param.TimesReceivedGrant);
            }
            else if (param.CamperOrg == CamperOrgType.CamperDetailReport)
            {
                dtAlternate = CamperApplicationDA.GetCamperDetailReportInBatch(UserRole, param.FedID, param.FedID_List,
                                                                               param.CampYearID, param.CampID_List, param.StatusID_List, param.TimesReceivedGrant);
            }
            else
            {
                dtAlternate = CamperApplicationDA.GetFJCCamperReportInBatch(param.CamperOrg, param.ProgramTypeID,
                                                                            param.FedID, param.CampYearID, param.CampID_HaveData_List, param.StatusID_List);
            }

            dtAlternate.Columns.RemoveAt(0);     // We don't want the first column, which is CampID

            iRow                = 1;
            ReportHeader        = ws2.Cells.GetSubrangeAbsolute(iRow, BEGIN_COLUMN_INDEX, iRow, REPORT_HEADER_CELL_NUMBER);
            ReportHeader.Merged = true;
            ReportHeader.Style  = styleReportHeader;
            ReportHeader.Value  = GetReportName(param.CamperOrg);

            ws2.Rows[iRow].Height = 25 * 20;

            iRow += 1;

            ws2.Rows[iRow].Height = 25 * 20;
            // Create Report SubHeader
            SubHeader        = ws2.Cells.GetSubrangeAbsolute(iRow, BEGIN_COLUMN_INDEX, iRow, REPORT_SUB_HEADER_CELL_NUMBER);
            SubHeader.Merged = true;
            SubHeader.Value  = "Camp Year: " + param.CampYear;
            SubHeader.Style  = styleSubHeader;

            iRow += 2;

            ws2.InsertDataTable(dtAlternate, iRow, BEGIN_COLUMN_INDEX, true);

            // 2012-10-28 Need to make allow contact emails stand out so admins won't contact campers who wish not to be contacted
            if (param.CamperOrg == CamperOrgType.CamperContactInfo)
            {
                for (int i = 0; i <= dtAlternate.Rows.Count; i++)
                {
                    if (ws2.Cells[i + iRow, 14].Value.ToString() == "No")
                    {
                        ws2.Cells[i + iRow, 14].Style = redText;
                        ws2.Cells[i + iRow, 15].Style = redText;
                        ws2.Cells[i + iRow, 16].Style = redText;
                    }
                }
            }

            ws2.Rows[iRow].Style = tableHeaderStyle;
            if (param.CamperOrg == CamperOrgType.CamperContactInfo)
            {
                ws2.Columns[BEGIN_COLUMN_INDEX].Width      = 16 * 256;
                ws2.Columns[BEGIN_COLUMN_INDEX + 1].Width  = 28 * 256;
                ws2.Columns[BEGIN_COLUMN_INDEX + 2].Width  = 28 * 256;
                ws2.Columns[BEGIN_COLUMN_INDEX + 3].Width  = 14 * 256;
                ws2.Columns[BEGIN_COLUMN_INDEX + 4].Width  = 16 * 256;
                ws2.Columns[BEGIN_COLUMN_INDEX + 5].Width  = 23 * 256;
                ws2.Columns[BEGIN_COLUMN_INDEX + 10].Width = 26 * 256;
                ws2.Columns[BEGIN_COLUMN_INDEX + 11].Width = 15 * 256;
                ws2.Columns[BEGIN_COLUMN_INDEX + 14].Width = 25 * 256;
                ws2.Columns[BEGIN_COLUMN_INDEX + 15].Width = 25 * 256;
                ws2.Columns[BEGIN_COLUMN_INDEX + 16].Width = 25 * 256;
            }
            else
            {
                // Camper Detail Report
                ws2.Columns[BEGIN_COLUMN_INDEX].Width      = 15 * 256; // CampID
                ws2.Columns[BEGIN_COLUMN_INDEX + 1].Width  = 30 * 256;
                ws2.Columns[BEGIN_COLUMN_INDEX + 2].Width  = 25 * 256;
                ws2.Columns[BEGIN_COLUMN_INDEX + 3].Width  = 25 * 256;
                ws2.Columns[BEGIN_COLUMN_INDEX + 4].Width  = 30 * 256;
                ws2.Columns[BEGIN_COLUMN_INDEX + 5].Width  = 18 * 256;
                ws2.Columns[BEGIN_COLUMN_INDEX + 6].Width  = 30 * 256;  // Camp Name
                ws2.Columns[BEGIN_COLUMN_INDEX + 9].Width  = 22 * 256;  // Session Datea
                ws2.Columns[BEGIN_COLUMN_INDEX + 10].Width = 18 * 256;  // Timer
                ws2.Columns[BEGIN_COLUMN_INDEX + 12].Width = 25 * 256;
                ws2.Columns[BEGIN_COLUMN_INDEX + 13].Width = 25 * 256;
                ws2.Columns[BEGIN_COLUMN_INDEX + 14].Width = 25 * 256;
            }
        }
        else
        {
            // since there is no whole list report, we need to delete sheet1
            excel.Worksheets[0].Delete();
        }

        excel.Worksheets.ActiveWorksheet = excel.Worksheets[0];

        // Save to a file on the local file system
        string filename = String.Format("\\{0}{1}{2}{3} {4}.xls", DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Millisecond, fileName);
        string newFile  = workFileDir + filename;

        excel.SaveXls(newFile);


        string[] strFileParts = newFile.Split(new string[] { "\\" }, StringSplitOptions.None);

        //Display excel spreadsheet
        this.Response.Clear();
        this.Response.Buffer = true;
        this.Response.AddHeader("Content-Disposition", "attachment; filename=" + strFileParts[strFileParts.Length - 1]);
        this.Response.ContentType = "application/vnd.ms-excel";
        this.Response.Charset     = "";

        if (newFile.Length == 0)
        {
            this.Response.Write("Error encountered - no spreadsheet to display");
        }
        else
        {
            this.Response.WriteFile(newFile);
        }

        Response.End();
    }
    private void GenerateExcelReport()
    {
        string templateFile = Server.MapPath(@"~/Docs/Templates/CamperDetailReport.xls");
        string workFileDir  = Server.MapPath(@"~/Docs");

        // Make a excel report
        ExcelLite.SetLicense("EL6N-Z669-AZZG-3LS7");
        ExcelFile excel = new ExcelFile();

        excel.LoadXls(templateFile);

        ExcelWorksheet ws = excel.Worksheets["Sheet1"];

        //We start at first row, because for ExcelLite control, the header row is not included
        const int BEGIN_COLUMN_INDEX            = 1;
        const int REPORT_HEADER_CELL_NUMBER     = 6;
        const int REPORT_SUB_HEADER_CELL_NUMBER = 4;

        int iRow = 1;

        // Global artistic setting
        ws.Columns[0].Width = 20 * 20; // make the first column smaller

        // Create Report Header
        CellStyle styleReportHeader = new CellStyle();

        styleReportHeader.Font.Color  = System.Drawing.Color.Blue;
        styleReportHeader.Font.Size   = 22 * 20;
        styleReportHeader.Font.Weight = ExcelFont.BoldWeight;

        CellRange ReportHeader = ws.Cells.GetSubrangeAbsolute(iRow, BEGIN_COLUMN_INDEX, iRow, REPORT_HEADER_CELL_NUMBER);

        ReportHeader.Merged = true;
        ReportHeader.Style  = styleReportHeader;
        ReportHeader.Value  = "Parent Country of Origin (Online Data Only)";

        ws.Rows[iRow].Height = 25 * 20;

        iRow += 1;

        // Create Report SubHeader - usually it's camp year and report generation time
        CellStyle styleReportSubHeader = new CellStyle();

        styleReportSubHeader.Font.Size   = 16 * 20;
        styleReportSubHeader.Font.Weight = ExcelFont.BoldWeight;

        CellRange SubHeader = ws.Cells.GetSubrangeAbsolute(iRow, BEGIN_COLUMN_INDEX, iRow, REPORT_SUB_HEADER_CELL_NUMBER);

        SubHeader.Merged = true;
        SubHeader.Style  = styleReportSubHeader;
        SubHeader.Value  = string.Format("Camp Year: {0}.  Generated on {1} {2}", ddlCampYear.SelectedItem.Text, DateTime.Now.ToShortDateString(), DateTime.Now.ToLongTimeString());

        iRow += 2;

        CellStyle styleReportSubHeaderNote = new CellStyle();
        //styleReportSubHeader.Font.Size = 16 * 20;
        //styleReportSubHeader.Font.Weight = ExcelFont.BoldWeight;
        //styleReportSubHeaderNote.

        CellRange SubHeaderNote = ws.Cells.GetSubrangeAbsolute(iRow, BEGIN_COLUMN_INDEX, iRow, 11);

        SubHeaderNote.Merged = true;
        //SubHeaderNote.Style = styleReportSubHeaderNote;
        SubHeaderNote.Value = "This report offers two different pieces of data.  “Number Of Campers” who have at least one parent from the country(s) selected and the list of countries with the number of corresponding parents.  Note: the";
        //ws.Rows[iRow].Height = 25 * 20;

        iRow += 1;

        CellRange SubHeaderNote2 = ws.Cells.GetSubrangeAbsolute(iRow, BEGIN_COLUMN_INDEX, iRow, 11);

        SubHeaderNote2.Merged = true;
        //SubHeaderNote.Style = styleReportSubHeaderNote;
        SubHeaderNote2.Value = "number of campers will typically be less than the total number of parents in this report.";
        //ws.Rows[iRow].Height = 25 * 20;


        iRow += 2;

        CellStyle styleTableTitle = new CellStyle {
            HorizontalAlignment = HorizontalAlignmentStyle.Center
        };

        styleTableTitle.Font.Size = 16 * 20;
        styleTableTitle.FillPattern.SetSolid(Color.LightBlue);
        styleTableTitle.Font.Weight = ExcelFont.BoldWeight;

        CellStyle styleTableDataRow = new CellStyle {
            HorizontalAlignment = HorizontalAlignmentStyle.Center
        };
        CellStyle styleTableDataRowCampName = new CellStyle {
            HorizontalAlignment = HorizontalAlignmentStyle.Left
        };

        CellStyle styleTableHeaderColumns = new CellStyle();

        styleTableHeaderColumns.Font.Weight         = ExcelFont.BoldWeight;
        styleTableHeaderColumns.HorizontalAlignment = HorizontalAlignmentStyle.Center;
        styleTableHeaderColumns.FillPattern.SetSolid(Color.LightGray);

        // Data Content of report
        DataSet[] dsArray = GenerateDataSet();

        //DataSet dsModified = dsArray[0];
        //DataSet ds2 = dsArray[1];

        int    indexDataSet = 0; // serve to see which dataset we are running (either ByProgram or ByCamp
        bool   isRun = false;
        string EntityName = "", ReportName = "";

        foreach (DataSet dsModified in dsArray)
        {
            isRun = false;

            if (chkByProgram.Checked && indexDataSet == 0)
            {
                EntityName = "Program";
                ReportName = "By Program, By Parent Birth Country";
                isRun      = true;
            }

            if (chkByCamp.Checked && indexDataSet == 1)
            {
                EntityName = "CampName";
                ReportName = "By Camp, By Parent Birth Country";
                isRun      = true;
            }

            if (isRun)
            {
                // Get rid of first columns for other tables except first one
                for (int i = 1; i < dsModified.Tables.Count; i++)
                {
                    dsModified.Tables[i].Columns.Remove(EntityName);
                }

                int table_column_count = dsModified.Tables[0].Columns.Count;
                int times = 0, current_starting_column = 0;

                // Table Title
                CellStyle styleSubReportTitle = new CellStyle {
                    HorizontalAlignment = HorizontalAlignmentStyle.Center
                };
                styleSubReportTitle.Font.Size = 16 * 20;
                styleSubReportTitle.FillPattern.SetSolid(Color.Transparent);
                styleSubReportTitle.Font.Weight = ExcelFont.BoldWeight;

                CellRange SubReportTitle = ws.Cells.GetSubrangeAbsolute(iRow, BEGIN_COLUMN_INDEX, iRow, REPORT_SUB_HEADER_CELL_NUMBER);
                SubReportTitle.Merged = true;
                SubReportTitle.Value  = ReportName;
                SubReportTitle.Style  = styleSubReportTitle;

                iRow += 3;

                foreach (DataTable dt in dsModified.Tables)
                {
                    if (times == 1)
                    {
                        // Get the header location
                        current_starting_column = BEGIN_COLUMN_INDEX + 1 + times * table_column_count;
                    }
                    else
                    {
                        // Get the header location
                        current_starting_column = BEGIN_COLUMN_INDEX + times * table_column_count;
                    }

                    int temp_column = 0;
                    if (times == 0)
                    {
                        temp_column = current_starting_column + 1;
                    }
                    else
                    {
                        temp_column = current_starting_column;
                    }


                    // Table Title
                    CellRange TableTitle = ws.Cells.GetSubrangeAbsolute(iRow - 1, temp_column, iRow - 1, current_starting_column + dt.Columns.Count - 1);
                    TableTitle.Merged = true;
                    TableTitle.Value  = dt.TableName;
                    TableTitle.Style  = styleTableTitle;

                    // this creats the real table
                    ws.InsertDataTable(dt, iRow, current_starting_column, true);

                    // loop through each column and set style accordingly
                    for (int i = current_starting_column; i <= (dt.Columns.Count + current_starting_column - 1); i++)
                    {
                        ws.Cells[iRow, i].Style = styleTableHeaderColumns;
                        ws.Cells[iRow + dt.Rows.Count, i].Style = styleTableHeaderColumns;

                        ws.Columns[i].Width = 11 * 256;

                        // first column of first table, e.g. camp naem
                        if (times == 0)
                        {
                            if (i == current_starting_column)
                            {
                                ws.Columns[i].Width = 55 * 256; // camp/program name
                            }
                            else if (i == current_starting_column + 1)
                            {
                                ws.Columns[i].Width = 15 * 256;
                            }
                        }
                        else if (i == current_starting_column)
                        {
                            ws.Columns[i].Width = 15 * 256;
                        }
                    }

                    // Set the data row style
                    for (int j = iRow + 1; j < iRow + dt.Rows.Count; j++)
                    {
                        ws.Rows[j].Style = styleTableDataRow;
                    }

                    // left justify the camp names
                    if (times == 0)
                    {
                        for (int j = iRow + 1; j < iRow + dt.Rows.Count; j++)
                        {
                            ws.Cells[j, current_starting_column].Style = styleTableDataRowCampName;
                        }
                    }

                    times++;
                }

                iRow += dsModified.Tables[0].Rows.Count + 5;
            }
            indexDataSet += 1;
        }



        excel.Worksheets.ActiveWorksheet = excel.Worksheets[0];

        // Save to a file on the local file system
        string filename = String.Format("\\{0}{1}{2}{3}ParentCountryOfOrigin.xls", DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Millisecond);
        string newFile  = workFileDir + filename;

        excel.SaveXls(newFile);


        string[] strFileParts = newFile.Split(new string[] { "\\" }, StringSplitOptions.None);

        //Display excel spreadsheet
        this.Response.Clear();
        this.Response.Buffer = true;
        this.Response.AddHeader("Content-Disposition", "attachment; filename=" + strFileParts[strFileParts.Length - 1]);
        this.Response.ContentType = "application/vnd.ms-excel";
        this.Response.Charset     = "";

        if (newFile.Length == 0)
        {
            this.Response.Write("Error encountered - no spreadsheet to display");
        }
        else
        {
            this.Response.WriteFile(newFile);
        }

        Response.End();
    }
Beispiel #4
0
    public static string GenerateExcelReport(DataTable dt)
    {
        string templateFile = HttpContext.Current.Server.MapPath(@"~/Docs/Templates/CamperDetailReport.xls");
        string workFileDir  = HttpContext.Current.Server.MapPath(@"~/Docs");

        // Make a excel report
        ExcelLite.SetLicense("EL6N-Z669-AZZG-3LS7");
        ExcelFile excel = new ExcelFile();

        excel.LoadXls(templateFile);

        ExcelWorksheet ws = excel.Worksheets["Sheet1"];

        // The first row is decoration headers
        ws.Rows[1].Height = 2 * 256;

        CellStyle cs = new CellStyle();

        cs.FillPattern.SetSolid(Color.FromArgb(204, 153, 255));
        cs.Font.Weight         = ExcelFont.BoldWeight;
        cs.WrapText            = true;
        cs.HorizontalAlignment = HorizontalAlignmentStyle.Center;

        CellRange cr = ws.Cells.GetSubrangeAbsolute(0, 0, 0, 10);

        cr.Merged = true;
        cr.Value  = "Program Information";
        cr.Style  = cs;

        CellStyle cs2 = new CellStyle();

        cs2.FillPattern.SetSolid(Color.FromArgb(102, 255, 255));
        cs2.Font.Weight         = ExcelFont.BoldWeight;
        cs2.WrapText            = true;
        cs2.HorizontalAlignment = HorizontalAlignmentStyle.Center;

        CellRange cr2 = ws.Cells.GetSubrangeAbsolute(0, 11, 0, 15);

        cr2.Merged = true;
        cr2.Value  = "Camp Information";
        cr2.Style  = cs2;

        CellStyle cs3 = new CellStyle();

        cs3.FillPattern.SetSolid(Color.FromArgb(255, 153, 204));
        cs3.Font.Weight         = ExcelFont.BoldWeight;
        cs3.WrapText            = true;
        cs3.HorizontalAlignment = HorizontalAlignmentStyle.Center;

        CellRange cr3 = ws.Cells.GetSubrangeAbsolute(0, 16, 0, 23);

        cr3.Merged = true;
        cr3.Value  = "Basic Camper Information";
        cr3.Style  = cs3;

        CellStyle cs4 = new CellStyle();

        cs4.FillPattern.SetSolid(Color.FromArgb(204, 255, 204));
        cs4.Font.Weight         = ExcelFont.BoldWeight;
        cs4.WrapText            = true;
        cs4.HorizontalAlignment = HorizontalAlignmentStyle.Center;

        CellRange cr4 = ws.Cells.GetSubrangeAbsolute(0, 24, 0, 28);

        cr4.Merged = true;
        cr4.Value  = "Camper Contact Information";
        cr4.Style  = cs4;

        CellStyle cs5 = new CellStyle();

        cs5.FillPattern.SetSolid(Color.FromArgb(255, 255, 153));
        cs5.Font.Weight         = ExcelFont.BoldWeight;
        cs5.WrapText            = true;
        cs5.HorizontalAlignment = HorizontalAlignmentStyle.Center;

        CellRange cr5 = ws.Cells.GetSubrangeAbsolute(0, 29, 0, 42);

        cr5.Merged = true;
        cr5.Value  = "Parent Contact Information";
        cr5.Style  = cs5;

        CellStyle cs6 = new CellStyle();

        cs6.FillPattern.SetSolid(Color.FromArgb(150, 150, 150));
        cs6.Font.Weight         = ExcelFont.BoldWeight;
        cs6.WrapText            = true;
        cs6.HorizontalAlignment = HorizontalAlignmentStyle.Center;

        CellRange cr6 = ws.Cells.GetSubrangeAbsolute(0, 43, 0, 45);

        cr6.Merged = true;
        cr6.Value  = "Application Information";
        cr6.Style  = cs6;

        CellStyle cs7 = new CellStyle();

        cs7.FillPattern.SetSolid(Color.FromArgb(255, 204, 153));
        cs7.Font.Weight         = ExcelFont.BoldWeight;
        cs7.WrapText            = true;
        cs7.HorizontalAlignment = HorizontalAlignmentStyle.Center;

        CellRange cr7 = ws.Cells.GetSubrangeAbsolute(0, 46, 0, 52);

        cr7.Merged = true;
        cr7.Value  = "Marketing Source";
        cr7.Style  = cs7;

        CellStyle cs8 = new CellStyle();

        cs8.FillPattern.SetSolid(Color.FromArgb(153, 204, 255));
        cs8.Font.Weight         = ExcelFont.BoldWeight;
        cs8.WrapText            = true;
        cs8.HorizontalAlignment = HorizontalAlignmentStyle.Center;

        CellRange cr8 = ws.Cells.GetSubrangeAbsolute(0, 53, 0, 68);

        cr8.Merged = true;
        cr8.Value  = "Demographic Information";
        cr8.Style  = cs8;

        // this creats the real table
        ws.InsertDataTable(dt, 1, 0, true);

        CellStyle styleTableHeaderColumns = new CellStyle();

        styleTableHeaderColumns.Font.Weight         = ExcelFont.BoldWeight;
        styleTableHeaderColumns.HorizontalAlignment = HorizontalAlignmentStyle.Center;
        styleTableHeaderColumns.VerticalAlignment   = VerticalAlignmentStyle.Center;
        styleTableHeaderColumns.FillPattern.SetSolid(Color.LightGray);
        styleTableHeaderColumns.WrapText = true;

        ws.Columns[0].Width = 15 * 256;
        ws.Columns[1].Width = 35 * 256;
        ws.Columns[2].Width = 30 * 256;

        ws.Columns[11].Width = 35 * 256; // Camp Name
        ws.Columns[12].Width = 27 * 256;

        ws.Columns[16].Width = 30 * 256; // Last Name
        ws.Columns[17].Width = 30 * 256;

        ws.Rows[1].Style  = styleTableHeaderColumns;
        ws.Rows[1].Height = 3 * 256;

        CellStyle styleContent = new CellStyle {
            HorizontalAlignment = HorizontalAlignmentStyle.Left, VerticalAlignment = VerticalAlignmentStyle.Center
        };

        for (int i = 2; i < dt.Rows.Count; i++)
        {
            ws.Rows[i].Style = styleContent;
        }

        styleContent.WrapText = true;

        excel.Worksheets.ActiveWorksheet = excel.Worksheets[0];

        // Save to a file on the local file system
        string filename = String.Format("\\{0}{1}{2}{3}DataExtract.xls", DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Millisecond);
        string newFile  = workFileDir + filename;

        excel.SaveXls(newFile);


        string[] strFileParts = newFile.Split(new string[] { "\\" }, StringSplitOptions.None);

        return(strFileParts[strFileParts.Length - 1]);
    }
    private void GenerateExcelReport()
    {
        // Data Content of report
        DateTime   cutoffDate   = GetCutoffDate();
        List <int> yearList     = GetYearList();
        DataSet    dsNormalized = GenerateDataTables(cutoffDate);

        string templateFile = Server.MapPath(@"~/Docs/Templates/CamperDetailReport.xls");
        string workFileDir  = Server.MapPath(@"~/Docs");

        // Make a excel report
        ExcelLite.SetLicense("EL6N-Z669-AZZG-3LS7");
        ExcelFile excel = new ExcelFile();

        excel.LoadXls(templateFile);

        ExcelWorksheet ws = excel.Worksheets["Sheet1"];

        //We start at first row, because for ExcelLite control, the header row is not included
        int       BEGIN_COLUMN_INDEX            = 0;
        const int CAMP_NAME_MERGED_CELL_NUMBER  = 6;
        const int REPORT_HEADER_CELL_NUMBER     = 6;
        const int REPORT_SUB_HEADER_CELL_NUMBER = 4;

        int iRow = 1;

        // Global artistic setting

        // first column
        ws.Columns[0].Width = 40 * 250;

        // Create Report Header
        CellStyle styleReportHeader = new CellStyle();

        styleReportHeader.Font.Color  = Color.Blue;
        styleReportHeader.Font.Size   = 22 * 20;
        styleReportHeader.Font.Weight = ExcelFont.BoldWeight;

        CellRange ReportHeader = ws.Cells.GetSubrangeAbsolute(iRow, BEGIN_COLUMN_INDEX, iRow, REPORT_HEADER_CELL_NUMBER);

        ReportHeader.Merged = true;
        ReportHeader.Style  = styleReportHeader;
        ReportHeader.Value  = "Summary by Program";

        iRow += 1;

        // Create Report SubHeader - usually it's camp year
        CellStyle styleSubHeader = new CellStyle();

        styleSubHeader.Font.Size   = 16 * 20;
        styleSubHeader.Font.Weight = ExcelFont.BoldWeight;
        styleSubHeader.Font.Color  = Color.Red;

        CellRange SubHeader = ws.Cells.GetSubrangeAbsolute(iRow, BEGIN_COLUMN_INDEX, iRow, REPORT_SUB_HEADER_CELL_NUMBER);

        SubHeader.Merged = true;
        SubHeader.Value  = cutoffDate.ToString(" MMM d, yyyy");
        SubHeader.Style  = styleSubHeader;

        iRow += 2;

        CellStyle cs = new CellStyle();

        cs.Font.Size   = 18 * 20;
        cs.Font.Weight = ExcelFont.BoldWeight;

        CellRange cr = ws.Cells.GetSubrangeAbsolute(iRow, BEGIN_COLUMN_INDEX, iRow, CAMP_NAME_MERGED_CELL_NUMBER);

        cr.Merged = true;
        cr.Value  = "";
        cr.Style  = cs;

        ws.Rows[iRow].Height = 25 * 20;

        iRow += 3;

        int iColumn       = 0;
        int sameYearCount = 0;

        if (chkAllTimers.Checked)
        {
            sameYearCount += 1;
        }

        if (chk1stTimers.Checked)
        {
            sameYearCount += 1;
        }

        if (chk2ndTimers.Checked)
        {
            sameYearCount += 1;
        }

        if (chk3rdTimers.Checked)
        {
            sameYearCount += 1;
        }

        int  sameYearOffset = 1;
        bool tempFlag       = true;

        foreach (DataTable dt in dsNormalized.Tables)
        {
            CellStyle styleTableHeader = new CellStyle();
            styleTableHeader.Font.Size   = 16 * 16;
            styleTableHeader.Font.Weight = ExcelFont.BoldWeight;

            string originalName = dt.TableName;
            int    year         = ChangeTableNameForExcelReport(dt);

            // only the first table shows the program name, the rest on the same row will have no first column
            int currentColumn = iColumn;
            if (sameYearOffset != 1)
            {
                dt.Columns.Remove("Name");
            }
            else
            {
                currentColumn = iColumn + 1;

                // This is special code for if select only current year, then the tables layout are vertical, and just need to show year at once
                if (yearList.Count > 0 || tempFlag)
                {
                    tempFlag = false;
                    CellRange TableHeaderYear = ws.Cells.GetSubrangeAbsolute(iRow - 2, currentColumn, iRow - 2, currentColumn);
                    TableHeaderYear.Value       = year.ToString();
                    styleTableHeader.Font.Color = Color.Black;
                    TableHeaderYear.Style       = styleTableHeader;
                }
            }

            styleTableHeader.Font.Color = Color.Red;
            CellRange TableHeader = ws.Cells.GetSubrangeAbsolute(iRow - 1, currentColumn, iRow - 1, currentColumn);
            TableHeader.Style = styleTableHeader;

            TableHeader.Value = dt.TableName;
            dt.TableName      = originalName;



            // this creats the real table
            ws.InsertDataTable(dt, iRow, iColumn, true);

            CellStyle tableHeaderStyle = new CellStyle();
            tableHeaderStyle.Font.Weight = ExcelFont.BoldWeight;
            tableHeaderStyle.FillPattern.SetSolid(Color.DarkGray);

            CellStyle tableHeaderStyle2 = new CellStyle();
            tableHeaderStyle2.Font.Weight = ExcelFont.BoldWeight;
            tableHeaderStyle2.FillPattern.SetSolid(Color.Orange);

            //Bold Style
            CellStyle boldStyle = new CellStyle();
            boldStyle.Font.Weight = ExcelFont.BoldWeight;

            // adjust each column's width and header style
            for (int i = iColumn; i <= (dt.Columns.Count + iColumn - 1); i++)
            {
                // make sure total row is bold
                ws.Cells[iRow + dt.Rows.Count, i].Style = boldStyle;

                // make column wide enough to see the column header
                if (iColumn == 0)
                {
                    // first table has program name, so has different i offset
                    if (i == 0 + iColumn)
                    {
                        ws.Columns[i].Width = 35 * 256;
                    }
                    else if (i == 1 + iColumn)
                    {
                        ws.Columns[i].Width = 10 * 256;
                    }
                    else if (i == 2 + iColumn)
                    {
                        ws.Columns[i].Width = 30 * 256;
                    }
                    else if (i == 4 + iColumn)
                    {
                        ws.Columns[i].Width = 22 * 256;
                    }
                    else
                    {
                        ws.Columns[i].Width = 17 * 256;
                    }

                    if (i == iColumn + 1)
                    {
                        // but Seth wants total column to be color of pink
                        ws.Cells[iRow, i].Style = tableHeaderStyle2;
                    }
                    else
                    {
                        // make sure header row has bgcolor and is bold
                        ws.Cells[iRow, i].Style = tableHeaderStyle;
                    }
                }
                else
                {
                    if (i == iColumn)
                    {
                        ws.Columns[i].Width = 10 * 256;
                    }
                    else if (i == 1 + iColumn)
                    {
                        ws.Columns[i].Width = 30 * 256;
                    }
                    else if (i == 3 + iColumn)
                    {
                        ws.Columns[i].Width = 22 * 256;
                    }
                    else
                    {
                        ws.Columns[i].Width = 17 * 256;
                    }

                    if (iColumn == i)
                    {
                        // but Seth wants total column to be color of pink
                        ws.Cells[iRow, i].Style = tableHeaderStyle2;
                    }
                    else
                    {
                        // make sure header row has bgcolor and is bold
                        ws.Cells[iRow, i].Style = tableHeaderStyle;
                    }
                }
            }

            // Make the same year tables on the same row
            if (sameYearOffset < sameYearCount && yearList.Count > 0)
            {
                iColumn        += dt.Columns.Count + 1;
                sameYearOffset += 1;
            }
            else
            {
                iRow          += dt.Rows.Count + 4;
                iColumn        = 0;
                sameYearOffset = 1;
            }
        }

        excel.Worksheets.ActiveWorksheet = excel.Worksheets[0];

        // Save to a file on the local file system
        string filename = String.Format("\\{0}{1}{2}{3}CamperCountByProgramAndStatus.xls", DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Millisecond);
        string newFile  = workFileDir + filename;

        excel.SaveXls(newFile);


        string[] strFileParts = newFile.Split(new string[] { "\\" }, StringSplitOptions.None);

        //Display excel spreadsheet
        Response.Clear();
        Response.Buffer = true;
        Response.AddHeader("Content-Disposition", "attachment; filename=" + strFileParts[strFileParts.Length - 1]);
        Response.ContentType = "application/vnd.ms-excel";
        Response.Charset     = "";

        if (newFile.Length == 0)
        {
            Response.Write("Error encountered - no spreadsheet to display");
        }
        else
        {
            Response.WriteFile(newFile);
        }

        Response.End();
    }
Beispiel #6
0
 public GemBoxExcelLiteManager()
 {
     ExcelLite.SetLicense("EL6N-Z669-AZZG-3LS7");
 }
Beispiel #7
0
        private string MakeReport(DateTime aggStartDate, DateTime repDate, bool makeAggData, string xlsReportName)
        {
            //if the month is the aggStart use the blank template. Otherwise, use last months
            string xlsBaseFileName;

            if (aggStartDate == repDate)
            {
                xlsBaseFileName = "NNIN Data Blank.xls";
            }
            else
            {
                xlsBaseFileName = string.Format("AS{0:yyyyMM}_Report{1:yyyyMM}_{2}.xls", aggStartDate, repDate.AddMonths(-1), litCurrentThreshold.Text);
            }

            string xlsBaseFilePath = XlsFilePath + xlsBaseFileName;
            string xlsReportPath   = XlsFilePath + xlsReportName;

            DateTime period = repDate;
            DateTime sDate  = period;
            DateTime eDate  = sDate.AddMonths(1);

            DataSet ds = NNINDA.GetTablesWithMinimumMinutes(period, (int)ClientPrivilege.LabUser, makeAggData, Convert.ToDouble(litCurrentThreshold.Text) / 60);

            ds.Tables[0].TableName = "TechnicalInterest_Hours";
            ds.Tables[1].TableName = "OrgType_Hours";
            ds.Tables[2].TableName = "TechnicalInterest_Users";
            ds.Tables[3].TableName = "OrgType_Users";
            ds.Tables[4].TableName = "TechnicalInterest_Fees";
            ds.Tables[5].TableName = "OrgType_Fees";

            DataColumn[] pk;

            pk = new DataColumn[] { ds.Tables["TechnicalInterest_Fees"].Columns["TechnicalInterestID"] };
            ds.Tables["TechnicalInterest_Fees"].PrimaryKey = pk;

            pk = new DataColumn[] { ds.Tables["OrgType_Fees"].Columns["OrgTypeID"] };
            ds.Tables["OrgType_Fees"].PrimaryKey = pk;

            //get raw cumulative user data
            DataTable dtCumUser = NNINDA.GetCumulativeUserAggregateData(aggStartDate, repDate);

            DataTable dtReport = new DataTable();

            dtReport.Columns.Add("BaseRow", typeof(int));
            dtReport.Columns.Add("TotalRow", typeof(int));
            dtReport.Columns.Add("RepType", typeof(string)); //fees, hours, cum,
            dtReport.Columns.Add("ByType", typeof(string));  //orgtype, techid, none
            dtReport.Columns.Add("DateOnly", typeof(bool));  //orgtype, techid, none

            AddReportRow(dtReport, 10, 0, string.Empty, string.Empty, true);
            AddReportRow(dtReport, 24, 43, "Hours", "TechnicalInterest", false);
            AddReportRow(dtReport, 11, 43, "Hours", "OrgType", false);
            AddReportRow(dtReport, 40, 0, string.Empty, string.Empty, true);
            AddReportRow(dtReport, 69, 88, "Users", "TechnicalInterest", false);
            AddReportRow(dtReport, 55, 88, "Users", "OrgType", false);
            AddReportRow(dtReport, 85, 0, string.Empty, string.Empty, true);
            AddReportRow(dtReport, 161, 180, "Fees", "TechnicalInterest", false);
            AddReportRow(dtReport, 146, 180, "Fees", "OrgType", false);
            AddReportRow(dtReport, 177, 0, string.Empty, string.Empty, true);
            AddReportRow(dtReport, 116, 136, "CumUser", "TechnicalInterest", false);
            AddReportRow(dtReport, 101, 136, "CumUser", "OrgType", false);
            AddReportRow(dtReport, 133, 0, string.Empty, string.Empty, true);
            AddReportRow(dtReport, 226, 0, "CumUser", "DemGender", false);
            AddReportRow(dtReport, 232, 0, "CumUser", "DemEthnic", false);
            AddReportRow(dtReport, 238, 0, "CumUser", "DemRace", false);
            AddReportRow(dtReport, 247, 0, "CumUser", "DemDisability", false);

            ExcelLite.SetLicense("EL6N-Z669-AZZG-3LS7");
            ExcelFile SpreadSheet = new ExcelFile();

            SpreadSheet.LoadXls(xlsBaseFilePath);
            ExcelWorksheet ws = SpreadSheet.Worksheets["UM SSEL"];

            DataRow[] fdr;
            int       lastVal, useCol = 0, useRow;
            double    hardTotals; //for recording internal time without formula

            foreach (DataRow drReport in dtReport.Rows)
            {
                //write dates
                for (int j = 0; j < 12; j++)
                {
                    ws.Cells[Convert.ToInt32(drReport["BaseRow"]), j + 1].Value = aggStartDate.AddMonths(j);
                    if (aggStartDate.AddMonths(j) == repDate)
                    {
                        useCol = j + 1;
                    }
                }

                if (!Convert.ToBoolean(drReport["DateOnly"]))
                {
                    hardTotals = 0;
                    if (drReport["RepType"].ToString() == "CumUser")
                    {
                        fdr = dtCumUser.Select(string.Format("TableName = '{0}'", drReport["ByType"]));
                        for (int j = 0; j < fdr.Length; j++)
                        {
                            useRow = drReport.Field <int>("BaseRow") + fdr[j].Field <int>("Value");
                            if (aggStartDate == repDate)
                            {
                                ws.Cells[useRow, useCol].Value = fdr[j]["Count"];
                            }
                            else
                            {
                                lastVal = Convert.ToInt32(ws.Cells[useRow, 1].Value);
                                for (int i = 2; i < useCol; i++)
                                {
                                    if (!string.IsNullOrEmpty(ws.Cells[useRow, i].Formula))
                                    {
                                        string form = ws.Cells[useRow, i].Formula;
                                        lastVal += Convert.ToInt32(form.Substring(form.IndexOf("+") + 1));
                                    }
                                }
                                string formula = "=" + Convert.ToChar(64 + useCol) + (useRow + 1).ToString() + "+" + (Convert.ToInt32(fdr[j]["Count"]) - lastVal).ToString();
                                ws.Cells[useRow, useCol].Formula = formula;
                            }
                            hardTotals += Convert.ToDouble(fdr[j]["Count"]);
                        }
                        if (Convert.ToInt32(drReport["TotalRow"]) != 0)
                        {
                            ws.Cells[Convert.ToInt32(drReport["TotalRow"]), useCol].Value = hardTotals;
                        }
                    }
                    else
                    {
                        foreach (DataRow dr in ds.Tables[string.Format("{0}_{1}", drReport["ByType"], drReport["RepType"])].Rows)
                        {
                            useRow = drReport.Field <int>("BaseRow") + dr.Field <int>(drReport["ByType"].ToString() + "ID");
                            double val = Convert.ToDouble(dr[drReport["RepType"].ToString()]); //must use Convert.ToDouble here because dr[...] may be different types depending on the rep type (e.g. double or int)
                            ws.Cells[useRow, useCol].Value = val;
                            hardTotals += val;
                        }
                        ws.Cells[Convert.ToInt32(drReport["TotalRow"]), useCol].Value = hardTotals;
                    }
                }
            }

            SpreadSheet.SaveXls(xlsReportPath);
            SpreadSheet = null;
            GC.Collect();

            return(xlsReportPath);
        }
    private void GenerateExcelReport()
    {
        string templateFile = Server.MapPath(@"~/Docs/Templates/CamperDetailReport.xls");
        string workFileDir  = Server.MapPath(@"~/Docs");

        // Make a excel report
        ExcelLite.SetLicense("EL6N-Z669-AZZG-3LS7");
        ExcelFile excel = new ExcelFile();

        excel.LoadXls(templateFile);

        ExcelWorksheet ws = excel.Worksheets["Sheet1"];

        //We start at first row, because for ExcelLite control, the header row is not included
        const int BEGIN_COLUMN_INDEX            = 1;
        const int CAMP_NAME_MERGED_CELL_NUMBER  = 6;
        const int REPORT_HEADER_CELL_NUMBER     = 6;
        const int REPORT_SUB_HEADER_CELL_NUMBER = 4;

        int iRow = 1;

        // Global artistic setting
        ws.Columns[0].Width = 20 * 20;

        // Create Report Header
        CellStyle styleReportHeader = new CellStyle();

        styleReportHeader.Font.Color  = System.Drawing.Color.Blue;
        styleReportHeader.Font.Size   = 22 * 20;
        styleReportHeader.Font.Weight = ExcelFont.BoldWeight;

        CellRange ReportHeader = ws.Cells.GetSubrangeAbsolute(iRow, BEGIN_COLUMN_INDEX, iRow, REPORT_HEADER_CELL_NUMBER);

        ReportHeader.Merged = true;
        ReportHeader.Style  = styleReportHeader;
        ReportHeader.Value  = "Number of Campers By Camp and Status (Online Data Only)";

        //
        iRow += 1;

        // Create Report SubHeader - usually it's camp year
        CellStyle styleSubHeader = new CellStyle();

        styleSubHeader.Font.Size   = 16 * 20;
        styleSubHeader.Font.Weight = ExcelFont.BoldWeight;

        CellRange SubHeader = ws.Cells.GetSubrangeAbsolute(iRow, BEGIN_COLUMN_INDEX, iRow, REPORT_SUB_HEADER_CELL_NUMBER);

        SubHeader.Merged = true;
        SubHeader.Value  = "Camp Year: " + ddlCampYear.SelectedItem.Text;
        SubHeader.Style  = styleSubHeader;

        iRow += 2;

        // Data Content of report
        DataTable dt = GenerateDataTable();

        CellStyle cs = new CellStyle();

        cs.Font.Size   = 18 * 20;
        cs.Font.Weight = ExcelFont.BoldWeight;


        CellRange cr = ws.Cells.GetSubrangeAbsolute(iRow, BEGIN_COLUMN_INDEX, iRow, CAMP_NAME_MERGED_CELL_NUMBER);

        cr.Merged = true;
        cr.Value  = "";
        cr.Style  = cs;

        ws.Rows[iRow].Height = 25 * 20;

        iRow += 1;

        ws.InsertDataTable(dt, iRow, BEGIN_COLUMN_INDEX, true);

        CellStyle tableHeaderStyle = new CellStyle();

        tableHeaderStyle.Font.Weight = ExcelFont.BoldWeight;
        tableHeaderStyle.FillPattern.SetSolid(Color.DarkGray);

        for (int i = BEGIN_COLUMN_INDEX; i <= dt.Columns.Count; i++)
        {
            ws.Cells[iRow, i].Style = tableHeaderStyle;
            ws.Cells[iRow + dt.Rows.Count, i].Style = tableHeaderStyle;
            if (i == 1)
            {
                ws.Columns[i].Width = 30 * 256;
            }
            else
            {
                ws.Columns[i].Width = 20 * 256;
            }
        }

        excel.Worksheets.ActiveWorksheet = excel.Worksheets[0];

        // Save to a file on the local file system
        string filename = "\\" + DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString() + DateTime.Now.Millisecond.ToString() + "CamperCountByCampAndStatus.xls";
        string newFile  = workFileDir + filename;

        excel.SaveXls(newFile);


        string[] strFileParts = newFile.Split(new string[] { "\\" }, StringSplitOptions.None);

        //Display excel spreadsheet
        this.Response.Clear();
        this.Response.Buffer = true;
        this.Response.AddHeader("Content-Disposition", "attachment; filename=" + strFileParts[strFileParts.Length - 1]);
        this.Response.ContentType = "application/vnd.ms-excel";
        this.Response.Charset     = "";

        if (newFile.Length == 0)
        {
            this.Response.Write("Error encountered - no spreadsheet to display");
        }
        else
        {
            this.Response.WriteFile(newFile);
        }

        Response.End();
    }
    private void GenerateExcelReport()
    {
        string templateFile = Server.MapPath(@"~/Docs/Templates/CamperDetailReport.xls");
        string workFileDir  = Server.MapPath(@"~/Docs");

        // Make a excel report
        ExcelLite.SetLicense("EL6N-Z669-AZZG-3LS7");
        ExcelFile excel = new ExcelFile();

        excel.LoadXls(templateFile);

        ExcelWorksheet ws = excel.Worksheets["Sheet1"];

        //We start at first row, because for ExcelLite control, the header row is not included
        int       BEGIN_COLUMN_INDEX            = 1;
        const int REPORT_HEADER_CELL_NUMBER     = 6;
        const int REPORT_SUB_HEADER_CELL_NUMBER = 4;

        int iRow = 1;

        // Global artistic setting
        ws.Columns[0].Width = 20 * 20; // make the first column smaller

        // Create Report Header
        CellStyle styleReportHeader = new CellStyle();

        styleReportHeader.Font.Color  = System.Drawing.Color.Blue;
        styleReportHeader.Font.Size   = 22 * 20;
        styleReportHeader.Font.Weight = ExcelFont.BoldWeight;

        CellRange ReportHeader = ws.Cells.GetSubrangeAbsolute(iRow, BEGIN_COLUMN_INDEX, iRow, REPORT_HEADER_CELL_NUMBER);

        ReportHeader.Merged = true;
        ReportHeader.Style  = styleReportHeader;
        ReportHeader.Value  = "Camper By State By Camp";

        ws.Rows[iRow].Height = 25 * 20;

        iRow += 1;

        // Create Report SubHeader - usually it's camp year and report generation time
        CellStyle styleReportSubHeader = new CellStyle();

        styleReportSubHeader.Font.Size   = 16 * 20;
        styleReportSubHeader.Font.Weight = ExcelFont.BoldWeight;

        CellRange SubHeader = ws.Cells.GetSubrangeAbsolute(iRow, BEGIN_COLUMN_INDEX, iRow, REPORT_SUB_HEADER_CELL_NUMBER);

        SubHeader.Merged = true;
        SubHeader.Style  = styleReportSubHeader;
        SubHeader.Value  = string.Format("Camp Year: {0}.  Generated on {1} {2}", ddlCampYear.SelectedItem.Text, DateTime.Now.ToShortDateString(), DateTime.Now.ToLongTimeString());

        iRow += 4;

        CellStyle styleTableTitle = new CellStyle {
            HorizontalAlignment = HorizontalAlignmentStyle.Center
        };

        styleTableTitle.Font.Size = 16 * 20;
        styleTableTitle.FillPattern.SetSolid(Color.LightBlue);
        styleTableTitle.Font.Weight = ExcelFont.BoldWeight;

        CellStyle styleTableDataRow = new CellStyle {
            HorizontalAlignment = HorizontalAlignmentStyle.Center
        };
        CellStyle styleTableDataRowCampName = new CellStyle {
            HorizontalAlignment = HorizontalAlignmentStyle.Left
        };

        CellStyle styleTableHeaderColumns = new CellStyle();

        styleTableHeaderColumns.Font.Weight         = ExcelFont.BoldWeight;
        styleTableHeaderColumns.HorizontalAlignment = HorizontalAlignmentStyle.Center;
        styleTableHeaderColumns.FillPattern.SetSolid(Color.LightGray);

        // Data Content of report
        DataSet dsModified = GenerateDataSet();

        for (int i = 1; i < dsModified.Tables.Count; i++)
        {
            dsModified.Tables[i].Columns.Remove("CampName");
        }

        int current_starting_column = 0, times = 0;
        int last_table_column_count = 0, last_column_index = 0;

        foreach (DataTable dt in dsModified.Tables)
        {
            // Get the header location
            if (times == 0)
            {
                current_starting_column = BEGIN_COLUMN_INDEX;
            }
            else
            {
                current_starting_column = last_column_index + last_table_column_count;
            }

            // we need to know the last table column count to calculate the current starting column index
            last_table_column_count = dt.Columns.Count;
            last_column_index       = current_starting_column + 1;

            int temp_column = 0;
            if (times == 0)
            {
                temp_column = current_starting_column + 1;
            }
            else
            {
                temp_column = current_starting_column;
            }

            CellRange TableTitle = ws.Cells.GetSubrangeAbsolute(iRow - 1, temp_column, iRow - 1, current_starting_column + dt.Columns.Count - 1);
            TableTitle.Value  = dt.TableName;
            TableTitle.Merged = true;
            TableTitle.Style  = styleTableTitle;

            // this creats the real table
            ws.InsertDataTable(dt, iRow, current_starting_column, true);

            for (int i = current_starting_column; i <= (dt.Columns.Count + current_starting_column - 1); i++)
            {
                ws.Cells[iRow, i].Style = styleTableHeaderColumns;
                ws.Cells[iRow + dt.Rows.Count, i].Style = styleTableHeaderColumns;

                ws.Columns[i].Width = 8 * 256;

                // first column of first table, e.g. camp naem
                if (times == 0)
                {
                    if (i == current_starting_column)
                    {
                        ws.Columns[i].Width = 55 * 256; // camp/program name
                    }
                }
            }

            // Set the data row style
            for (int j = iRow + 1; j < iRow + dt.Rows.Count; j++)
            {
                ws.Rows[j].Style = styleTableDataRow;
            }

            // left justify the camp names
            if (times == 0)
            {
                for (int j = iRow + 1; j < iRow + dt.Rows.Count; j++)
                {
                    ws.Cells[j, current_starting_column].Style = styleTableDataRowCampName;
                }
            }

            times++;
        }

        excel.Worksheets.ActiveWorksheet = excel.Worksheets[0];

        // Save to a file on the local file system
        string filename = String.Format("\\{0}{1}{2}{3}CamperReportByState.xls", DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Millisecond);
        string newFile = workFileDir + filename;

        excel.SaveXls(newFile);


        string[] strFileParts = newFile.Split(new string[] { "\\" }, StringSplitOptions.None);

        //Display excel spreadsheet
        this.Response.Clear();
        this.Response.Buffer = true;
        this.Response.AddHeader("Content-Disposition", "attachment; filename=" + strFileParts[strFileParts.Length - 1]);
        this.Response.ContentType = "application/vnd.ms-excel";
        this.Response.Charset     = "";

        if (newFile.Length == 0)
        {
            this.Response.Write("Error encountered - no spreadsheet to display");
        }
        else
        {
            this.Response.WriteFile(newFile);
        }

        Response.End();
    }
Beispiel #10
0
    private void GenerateExcelReport()
    {
        string templateFile = Server.MapPath(@"~/Docs/Templates/CamperDetailReport.xls");
        string workFileDir  = Server.MapPath(@"~/Docs");

        // Make a excel report
        ExcelLite.SetLicense("EL6N-Z669-AZZG-3LS7");
        ExcelFile excel = new ExcelFile();

        excel.LoadXls(templateFile);

        ExcelWorksheet ws = excel.Worksheets["Sheet1"];

        //We start at first row, because for ExcelLite control, the header row is not included
        int       BEGIN_COLUMN_INDEX            = 1;
        const int CAMP_NAME_MERGED_CELL_NUMBER  = 6;
        const int REPORT_HEADER_CELL_NUMBER     = 6;
        const int REPORT_SUB_HEADER_CELL_NUMBER = 4;

        int iRow = 1;

        // Global artistic setting
        ws.Columns[0].Width = 20 * 20;

        // Create Report Header
        CellStyle styleReportHeader = new CellStyle();

        styleReportHeader.Font.Color  = System.Drawing.Color.Blue;
        styleReportHeader.Font.Size   = 22 * 20;
        styleReportHeader.Font.Weight = ExcelFont.BoldWeight;

        CellRange ReportHeader = ws.Cells.GetSubrangeAbsolute(iRow, BEGIN_COLUMN_INDEX, iRow, REPORT_HEADER_CELL_NUMBER);

        ReportHeader.Merged = true;
        ReportHeader.Style  = styleReportHeader;
        ReportHeader.Value  = "Number of Campers By Program, Status and Summer";

        iRow += 1;

        // Create Report SubHeader - usually it's camp year
        CellStyle styleSubHeader = new CellStyle();

        styleSubHeader.Font.Size   = 16 * 20;
        styleSubHeader.Font.Weight = ExcelFont.BoldWeight;

        CellRange SubHeader = ws.Cells.GetSubrangeAbsolute(iRow, BEGIN_COLUMN_INDEX, iRow, REPORT_SUB_HEADER_CELL_NUMBER);

        SubHeader.Merged = true;
        SubHeader.Value  = string.Format("Camp Year: {0}.  Generated on {1} {2}", ddlCampYear.SelectedItem.Text, DateTime.Now.ToShortDateString(), DateTime.Now.ToLongTimeString());
        SubHeader.Style  = styleSubHeader;

        iRow += 2;

        // 2010-11-26 no longer needed
        //AddSubTotalRowsTable(dsNormalized);

        CellStyle cs = new CellStyle();

        cs.Font.Size   = 18 * 20;
        cs.Font.Weight = ExcelFont.BoldWeight;

        CellRange cr = ws.Cells.GetSubrangeAbsolute(iRow, BEGIN_COLUMN_INDEX, iRow, CAMP_NAME_MERGED_CELL_NUMBER);

        cr.Merged = true;
        cr.Value  = "";
        cr.Style  = cs;

        ws.Rows[iRow].Height = 25 * 20;

        iRow += 2;

        // Data Content of report
        DataSet ds           = GenerateDataTable();
        DataSet dsNormalized = NormalizeTables(ds);

        for (int i = 1; i < ds.Tables.Count; i++)
        {
            dsNormalized.Tables[i].Columns.Remove("Name");
        }

        int times = 0;
        int table_column_count = ds.Tables[0].Columns.Count;
        int current_column     = 0;

        foreach (DataTable dt in dsNormalized.Tables)
        {
            if (times == 1)
            {
                BEGIN_COLUMN_INDEX += 1;
            }
            // Get the header location
            current_column = BEGIN_COLUMN_INDEX + times * table_column_count;

            CellRange TableHeader = ws.Cells.GetSubrangeAbsolute(iRow - 1, current_column, iRow - 1, current_column);
            TableHeader.Value = dt.TableName;
            TableHeader.Style = styleSubHeader;

            // this creats the real table
            ws.InsertDataTable(dt, iRow, current_column, true);

            CellStyle tableHeaderStyle = new CellStyle();
            tableHeaderStyle.Font.Weight = ExcelFont.BoldWeight;
            tableHeaderStyle.FillPattern.SetSolid(Color.DarkGray);

            for (int i = current_column; i <= (dt.Columns.Count + current_column - 1); i++)
            {
                ws.Cells[iRow, i].Style = tableHeaderStyle;
                ws.Cells[iRow + dt.Rows.Count, i].Style = tableHeaderStyle;
                if (i == current_column)
                {
                    // first column of every table
                    if (times >= 1)
                    {
                        ws.Columns[i].Width = 20 * 256;
                    }
                    else
                    {
                        ws.Columns[i].Width = 35 * 256;
                    }
                }
                else
                {
                    ws.Columns[i].Width = 20 * 256; // non-first column
                }
            }

            //if (times == 1)
            //    BEGIN_COLUMN_INDEX -= 1;

            times++;
        }

        excel.Worksheets.ActiveWorksheet = excel.Worksheets[0];

        // Save to a file on the local file system
        string filename = String.Format("\\{0}{1}{2}{3}CamperCountByProgramAndStatus.xls", DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Millisecond);
        string newFile  = workFileDir + filename;

        excel.SaveXls(newFile);


        string[] strFileParts = newFile.Split(new string[] { "\\" }, StringSplitOptions.None);

        //Display excel spreadsheet
        this.Response.Clear();
        this.Response.Buffer = true;
        this.Response.AddHeader("Content-Disposition", "attachment; filename=" + strFileParts[strFileParts.Length - 1]);
        this.Response.ContentType = "application/vnd.ms-excel";
        this.Response.Charset     = "";

        if (newFile.Length == 0)
        {
            this.Response.Write("Error encountered - no spreadsheet to display");
        }
        else
        {
            this.Response.WriteFile(newFile);
        }

        Response.End();
    }
    private void GenerateExcelReport(DataTable dtAllCamps, IList <int> campIdList)
    {
        var templateFile = Server.MapPath(@"~/Docs/Templates/CamperDetailReportPrintingFormatted.xls");
        var workFileDir  = Server.MapPath(@"~/Docs");

        // Make a excel report
        ExcelLite.SetLicense("EL6N-Z669-AZZG-3LS7");
        var excel = new ExcelFile();

        excel.LoadXls(templateFile);

        var summaryTable = new DataTable();

        summaryTable.Columns.Add("CampName", typeof(string));
        summaryTable.Columns.Add("1st/2nd/3rd Time", typeof(int));
        summaryTable.Columns.Add("Day School", typeof(int));
        summaryTable.Columns.Add("Total Dollars", typeof(double));


        foreach (var campId in campIdList)
        {
            IEnumerable <DataRow> enumByCamp = from camperApp in dtAllCamps.AsEnumerable()
                                               where camperApp.Field <int>("CampID") == campId
                                               select camperApp;

            if (enumByCamp.Any())
            {
                var sum     = enumByCamp.Sum(x => x.Field <double>("GrantAmount"));
                var countDS = (from camperApp in enumByCamp
                               where camperApp.Field <string>("Day School") == "Y"
                               select camperApp).Count();
                var countAll = enumByCamp.Count();

                DataTable dt = enumByCamp.CopyToDataTable();

                var campName = dt.Rows[0]["CampName"].ToString();

                var dr = summaryTable.NewRow();
                dr["CampName"]         = campName;
                dr["1st/2nd/3rd Time"] = countAll;
                dr["Day School"]       = countDS;
                dr["Total Dollars"]    = sum;
                summaryTable.Rows.Add(dr);

                if (campName.Contains(":"))
                {
                    campName = campName.Replace(":", "-");
                }

                //We start at first row, because for ExcelLite control, the header row is not included
                const int BEGIN_COLUMN_INDEX            = 0;
                const int REPORT_HEADER_CELL_NUMBER     = 5;
                const int REPORT_SUB_HEADER_CELL_NUMBER = 5;
                const int CAMP_NAME_MERGED_CELL_NUMBER  = 5;

                int iRow = 1;

                var ws = excel.Worksheets.AddCopy(campName, excel.Worksheets["Sheet1"]);

                // Global artistic setting
                ws.Columns[0].Width = 20 * 20; // make the first column smaller

                // Create Report Header
                var styleReportHeader = new CellStyle
                {
                    Font = { Color = Color.Blue, Size = 22 * 20, Weight = ExcelFont.BoldWeight }
                };

                CellRange reportHeader = ws.Cells.GetSubrangeAbsolute(iRow, BEGIN_COLUMN_INDEX, iRow, REPORT_HEADER_CELL_NUMBER);
                reportHeader.Merged = true;
                reportHeader.Style  = styleReportHeader;
                reportHeader.Value  = "One Happy Camper Payment Report";

                ws.Rows[iRow].Height = 25 * 20;

                iRow += 1;

                // Create Report SubHeader - usually it's camp year and report generation time
                var styleReportSubHeader = new CellStyle {
                    Font = { Size = 16 * 20, Weight = ExcelFont.BoldWeight }
                };

                CellRange subHeader = ws.Cells.GetSubrangeAbsolute(iRow, BEGIN_COLUMN_INDEX, iRow,
                                                                   REPORT_SUB_HEADER_CELL_NUMBER);
                subHeader.Merged = true;
                subHeader.Style  = styleReportSubHeader;
                subHeader.Value  = string.Format("Camp Year: {0}  Generated on {1} {2}", ddlCampYear.SelectedItem.Text,
                                                 DateTime.Now.ToShortDateString(), DateTime.Now.ToLongTimeString());

                // Create Federation Name row
                iRow += 2;

                var cs = new CellStyle {
                    Font = { Size = 18 * 20, Weight = ExcelFont.BoldWeight }
                };
                CellRange fedNameRange = ws.Cells.GetSubrangeAbsolute(iRow, BEGIN_COLUMN_INDEX, iRow,
                                                                      CAMP_NAME_MERGED_CELL_NUMBER);
                fedNameRange.Merged = true;
                fedNameRange.Style  = cs;
                fedNameRange.Value  = ddlFed.SelectedItem.Text;

                // admin name
                iRow += 1;
                //var cs = new CellStyle { Font = { Size = 18 * 20, Weight = ExcelFont.BoldWeight } };
                CellRange adminNameRange = ws.Cells.GetSubrangeAbsolute(iRow, BEGIN_COLUMN_INDEX, iRow,
                                                                        CAMP_NAME_MERGED_CELL_NUMBER);
                adminNameRange.Merged = true;
                //fedNameRange.Style = cs;
                adminNameRange.Value = String.Format("Report Generated by: {0} {1}", Session["FirstName"],
                                                     Session["LastName"]);

                // report type name
                iRow += 2;
                var reportTypeStyle = new CellStyle {
                    Font = { Size = 10 * 20, Weight = ExcelFont.BoldWeight }
                };
                var reportTypeText = "";
                if (isFinal)
                {
                    reportTypeStyle.FillPattern.SetSolid(Color.ForestGreen);
                    reportTypeStyle.Font.Color = Color.White;
                    reportTypeText             = "FINAL REPORT.  ALL RECORDS HAVE BEEN UPDATED TO PAYMENT REQUESTED.";
                }
                else
                {
                    reportTypeStyle.FillPattern.SetSolid(Color.Yellow);
                    reportTypeStyle.Font.Color = Color.Red;
                    reportTypeText             = "IMPORTANT:  This is a Preliminary Report.  Once data confirmed, run a FINAL report.";
                }

                CellRange reportTypeNameRange = ws.Cells.GetSubrangeAbsolute(iRow, BEGIN_COLUMN_INDEX, iRow, CAMP_NAME_MERGED_CELL_NUMBER);
                reportTypeNameRange.Merged = true;
                reportTypeNameRange.Style  = reportTypeStyle;
                reportTypeNameRange.Value  = reportTypeText;

                iRow += 1;

                CellRange campNameRange = ws.Cells.GetSubrangeAbsolute(iRow, BEGIN_COLUMN_INDEX, iRow, CAMP_NAME_MERGED_CELL_NUMBER);
                campNameRange.Merged = true;
                campNameRange.Style  = cs;
                campNameRange.Value  = campName;

                iRow += 1;

                // this creats the real table
                dt.Columns.Remove("CampID");
                dt.Columns.Remove("CampName");
                dt.Columns.Remove("StatusID");
                ws.InsertDataTable(dt, iRow, BEGIN_COLUMN_INDEX, true);

                // decorate the header of content table
                // loop through each column and 1.set the width of each colum, 2. set the header style of each column
                var tableHeaderStyle = new CellStyle {
                    Font = { Weight = ExcelFont.BoldWeight }
                };
                tableHeaderStyle.FillPattern.SetSolid(Color.DarkGray);

                for (int i = BEGIN_COLUMN_INDEX; i < dt.Columns.Count; i++)
                {
                    ws.Cells[iRow, i].Style = tableHeaderStyle;

                    if (i == 3)
                    {
                        ws.Columns[i].Width = 30 * 256;
                    }
                    else if (i == 4)
                    {
                        ws.Columns[i].Width = 8 * 256;
                    }
                    else if (i == 5)
                    {
                        ws.Columns[i].Width = 28 * 256;
                    }
                    else if (i == 7)
                    {
                        ws.Columns[i].Width = 16 * 256;
                    }
                    else
                    {
                        ws.Columns[i].Width = 18 * 256;
                    }
                }

                var totalGrantAmount = dt.AsEnumerable().Sum(x => x.Field <double>("GrantAmount"));

                var totalCamperCount = dt.Rows.Count;

                iRow += dt.Rows.Count + 2;
                var boldTextStyle = new CellStyle {
                    Font = { Weight = ExcelFont.BoldWeight }
                };
                ws.Cells[iRow, BEGIN_COLUMN_INDEX + 7].Value = "Total Dollars";
                ws.Cells[iRow, BEGIN_COLUMN_INDEX + 7].Style = boldTextStyle;
                ws.Cells[iRow, BEGIN_COLUMN_INDEX + 8].Value = totalGrantAmount;
                ws.Cells[iRow, BEGIN_COLUMN_INDEX + 8].Style = boldTextStyle;

                iRow += 1;
                ws.Cells[iRow, BEGIN_COLUMN_INDEX + 7].Value = "# of campers";
                ws.Cells[iRow, BEGIN_COLUMN_INDEX + 7].Style = boldTextStyle;
                ws.Cells[iRow, BEGIN_COLUMN_INDEX + 8].Value = totalCamperCount;
                ws.Cells[iRow, BEGIN_COLUMN_INDEX + 8].Style = boldTextStyle;
            }
        }

        if (dtAllCamps.Rows.Count > 0)
        {
            // ******** Summary worksheet ***************
            IEnumerable <DataRow> enumSummary = from rows in summaryTable.AsEnumerable()
                                                select rows;

            var sumTimer = enumSummary.Sum(x => x.Field <int>("1st/2nd/3rd Time"));
            var sumDS    = enumSummary.Sum(x => x.Field <int>("Day School"));
            var sumTotal = enumSummary.Sum(x => x.Field <double>("Total Dollars"));

            var dr = summaryTable.NewRow();
            dr["CampName"]         = "TOTAL";
            dr["1st/2nd/3rd Time"] = sumTimer;
            dr["Day School"]       = sumDS;
            dr["Total Dollars"]    = sumTotal;
            summaryTable.Rows.Add(dr);

            const int BEGIN_COLUMN_INDEX            = 0;
            const int REPORT_HEADER_CELL_NUMBER     = 5;
            const int REPORT_SUB_HEADER_CELL_NUMBER = 5;
            const int CAMP_NAME_MERGED_CELL_NUMBER  = 5;

            int iRow = 1;

            var ws = excel.Worksheets.AddCopy("Summary", excel.Worksheets["Sheet1"]);

            // Global artistic setting
            ws.Columns[0].Width = 20 * 20; // make the first column smaller

            // Create Report Header
            var styleReportHeader = new CellStyle
            {
                Font = { Color = Color.Blue, Size = 22 * 20, Weight = ExcelFont.BoldWeight }
            };

            CellRange reportHeader = ws.Cells.GetSubrangeAbsolute(iRow, BEGIN_COLUMN_INDEX, iRow,
                                                                  REPORT_HEADER_CELL_NUMBER);
            reportHeader.Merged = true;
            reportHeader.Style  = styleReportHeader;
            reportHeader.Value  = "One Happy Camper Payment Report";

            ws.Rows[iRow].Height = 25 * 20;

            iRow += 1;

            // Create Report SubHeader - usually it's camp year and report generation time
            var styleReportSubHeader = new CellStyle {
                Font = { Size = 16 * 20, Weight = ExcelFont.BoldWeight }
            };

            CellRange subHeader = ws.Cells.GetSubrangeAbsolute(iRow, BEGIN_COLUMN_INDEX, iRow,
                                                               REPORT_SUB_HEADER_CELL_NUMBER);
            subHeader.Merged = true;
            subHeader.Style  = styleReportSubHeader;
            subHeader.Value  = string.Format("Camp Year: {0}  Generated on {1} {2}", ddlCampYear.SelectedItem.Text,
                                             DateTime.Now.ToShortDateString(), DateTime.Now.ToLongTimeString());

            // Create Federation Name row
            iRow += 2;

            var cs = new CellStyle {
                Font = { Size = 18 * 20, Weight = ExcelFont.BoldWeight }
            };
            CellRange fedNameRange = ws.Cells.GetSubrangeAbsolute(iRow, BEGIN_COLUMN_INDEX, iRow,
                                                                  CAMP_NAME_MERGED_CELL_NUMBER);
            fedNameRange.Merged = true;
            fedNameRange.Style  = cs;
            fedNameRange.Value  = ddlFed.SelectedItem.Text;

            // admin name
            iRow += 1;
            //var cs = new CellStyle { Font = { Size = 18 * 20, Weight = ExcelFont.BoldWeight } };
            CellRange adminNameRange = ws.Cells.GetSubrangeAbsolute(iRow, BEGIN_COLUMN_INDEX, iRow,
                                                                    CAMP_NAME_MERGED_CELL_NUMBER);
            adminNameRange.Merged = true;
            //fedNameRange.Style = cs;
            adminNameRange.Value = String.Format("Report Generated by: {0} {1}", Session["FirstName"],
                                                 Session["LastName"]);

            // report type name
            iRow += 2;
            var reportTypeStyle = new CellStyle {
                Font = { Size = 10 * 20, Weight = ExcelFont.BoldWeight }
            };
            var reportTypeText = "";
            if (isFinal)
            {
                reportTypeStyle.FillPattern.SetSolid(Color.ForestGreen);
                reportTypeStyle.Font.Color = Color.White;
                reportTypeText             = "FINAL REPORT.  ALL RECORDS HAVE BEEN UPDATED TO PAYMENT REQUESTED.";
            }
            else
            {
                reportTypeStyle.FillPattern.SetSolid(Color.Yellow);
                reportTypeStyle.Font.Color = Color.Red;
                reportTypeText             = "IMPORTANT:  This is a Preliminary Report.  Once data confirmed, run a FINAL report.";
            }

            CellRange reportTypeNameRange = ws.Cells.GetSubrangeAbsolute(iRow, BEGIN_COLUMN_INDEX, iRow, CAMP_NAME_MERGED_CELL_NUMBER);
            reportTypeNameRange.Merged = true;
            reportTypeNameRange.Style  = reportTypeStyle;
            reportTypeNameRange.Value  = reportTypeText;

            iRow += 1;

            // this creats the real table
            ws.InsertDataTable(summaryTable, iRow, BEGIN_COLUMN_INDEX, true);

            // decorate the header of content table
            // loop through each column and 1.set the width of each colum, 2. set the header style of each column
            var tableHeaderStyle = new CellStyle {
                Font = { Weight = ExcelFont.BoldWeight }
            };
            tableHeaderStyle.FillPattern.SetSolid(Color.DarkGray);
            var boldTextStyle = new CellStyle {
                Font = { Weight = ExcelFont.BoldWeight }
            };

            for (int i = BEGIN_COLUMN_INDEX; i < summaryTable.Columns.Count; i++)
            {
                ws.Cells[iRow, i].Style = tableHeaderStyle;
                ws.Cells[iRow + summaryTable.Rows.Count, i].Style = boldTextStyle;

                if (i == BEGIN_COLUMN_INDEX)
                {
                    ws.Columns[i].Width = 30 * 256;
                }
                else if (i == BEGIN_COLUMN_INDEX + 3)
                {
                    ws.Columns[i].Width = 20 * 256;
                }
                else
                {
                    ws.Columns[i].Width = 18 * 256;
                }
            }

            // ******** End of Summary worksheet ********

            excel.Worksheets[0].Delete();
            excel.Worksheets[0].Delete();
            excel.Worksheets[0].Delete();
            excel.Worksheets.ActiveWorksheet = excel.Worksheets[0];
        }


        // Save to a file on the local file system
        string filename = String.Format("\\{0}{1}{2}{3}-Payment.xls", DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Millisecond);
        string newFile  = workFileDir + filename;

        excel.SaveXls(newFile);


        string[] strFileParts = newFile.Split(new string[] { "\\" }, StringSplitOptions.None);

        //Display excel spreadsheet
        Response.Clear();
        Response.Buffer = true;
        Response.AddHeader("Content-Disposition", "attachment; filename=" + strFileParts[strFileParts.Length - 1]);
        Response.ContentType = "application/vnd.ms-excel";
        Response.Charset     = "";

        if (newFile.Length == 0)
        {
            Response.Write("Error encountered - no spreadsheet to display");
        }
        else
        {
            Response.WriteFile(newFile);
        }

        Response.End();
    }
Beispiel #12
0
    private void GenerateExcelReport()
    {
        string templateFile = Server.MapPath(@"~/Docs/Templates/CamperDetailReport.xls");
        string workFileDir  = Server.MapPath(@"~/Docs");

        // Make a excel report
        ExcelLite.SetLicense("EL6N-Z669-AZZG-3LS7");
        ExcelFile excel = new ExcelFile();

        excel.LoadXls(templateFile);

        ExcelWorksheet ws = excel.Worksheets["Sheet1"];

        // Data Content of report
        DataTable dt = GenerateDataSet();

        // The first row is decoration headers
        ws.Rows[1].Height = 2 * 256;
        int columnPointer = 9;

        CellStyle cs = new CellStyle();

        cs.FillPattern.SetSolid(Color.FromArgb(204, 153, 255));
        cs.Font.Weight         = ExcelFont.BoldWeight;
        cs.WrapText            = true;
        cs.HorizontalAlignment = HorizontalAlignmentStyle.Center;

        CellRange cr = ws.Cells.GetSubrangeAbsolute(0, 0, 0, columnPointer);

        cr.Merged = true;
        cr.Value  = "Program Information";
        cr.Style  = cs;

        CellStyle cs2 = new CellStyle();

        cs2.FillPattern.SetSolid(Color.FromArgb(102, 255, 255));
        cs2.Font.Weight         = ExcelFont.BoldWeight;
        cs2.WrapText            = true;
        cs2.HorizontalAlignment = HorizontalAlignmentStyle.Center;

        CellRange cr2 = ws.Cells.GetSubrangeAbsolute(0, columnPointer + 1, 0, columnPointer += 5);

        cr2.Merged = true;
        cr2.Value  = "Camp Information";
        cr2.Style  = cs2;

        CellStyle cs3 = new CellStyle();

        cs3.FillPattern.SetSolid(Color.FromArgb(255, 153, 204));
        cs3.Font.Weight         = ExcelFont.BoldWeight;
        cs3.WrapText            = true;
        cs3.HorizontalAlignment = HorizontalAlignmentStyle.Center;

        CellRange cr3 = ws.Cells.GetSubrangeAbsolute(0, columnPointer + 1, 0, columnPointer += 8);

        cr3.Merged = true;
        cr3.Value  = "Basic Camper Information";
        cr3.Style  = cs3;

        CellStyle cs4 = new CellStyle();

        cs4.FillPattern.SetSolid(Color.FromArgb(204, 255, 204));
        cs4.Font.Weight         = ExcelFont.BoldWeight;
        cs4.WrapText            = true;
        cs4.HorizontalAlignment = HorizontalAlignmentStyle.Center;

        CellRange cr4 = ws.Cells.GetSubrangeAbsolute(0, columnPointer + 1, 0, columnPointer += 5);

        cr4.Merged = true;
        cr4.Value  = "Camper Contact Information";
        cr4.Style  = cs4;

        CellStyle cs5 = new CellStyle();

        cs5.FillPattern.SetSolid(Color.FromArgb(255, 255, 153));
        cs5.Font.Weight         = ExcelFont.BoldWeight;
        cs5.WrapText            = true;
        cs5.HorizontalAlignment = HorizontalAlignmentStyle.Center;

        CellRange cr5 = ws.Cells.GetSubrangeAbsolute(0, columnPointer + 1, 0, columnPointer += 14);

        cr5.Merged = true;
        cr5.Value  = "Parent Contact Information";
        cr5.Style  = cs5;

        CellStyle cs6 = new CellStyle();

        cs6.FillPattern.SetSolid(Color.FromArgb(150, 150, 150));
        cs6.Font.Weight         = ExcelFont.BoldWeight;
        cs6.WrapText            = true;
        cs6.HorizontalAlignment = HorizontalAlignmentStyle.Center;

        CellRange cr6 = ws.Cells.GetSubrangeAbsolute(0, columnPointer + 1, 0, columnPointer += 3);

        cr6.Merged = true;
        cr6.Value  = "Application Information";
        cr6.Style  = cs6;

        CellStyle cs7 = new CellStyle();

        cs7.FillPattern.SetSolid(Color.FromArgb(255, 204, 153));
        cs7.Font.Weight         = ExcelFont.BoldWeight;
        cs7.WrapText            = true;
        cs7.HorizontalAlignment = HorizontalAlignmentStyle.Center;

        CellRange cr7 = ws.Cells.GetSubrangeAbsolute(0, columnPointer + 1, 0, columnPointer += 8);

        cr7.Merged = true;
        cr7.Value  = "Marketing Source";
        cr7.Style  = cs7;

        CellStyle cs8 = new CellStyle();

        cs8.FillPattern.SetSolid(Color.FromArgb(153, 204, 255));
        cs8.Font.Weight         = ExcelFont.BoldWeight;
        cs8.WrapText            = true;
        cs8.HorizontalAlignment = HorizontalAlignmentStyle.Center;

        CellRange cr8 = ws.Cells.GetSubrangeAbsolute(0, columnPointer + 1, 0, columnPointer += 16);

        cr8.Merged = true;
        cr8.Value  = "Demographic Information";
        cr8.Style  = cs8;

        // Toronto questions
        CellStyle cs9 = new CellStyle();

        cs9.FillPattern.SetSolid(Color.FromArgb(233, 19, 210));
        cs9.Font.Weight         = ExcelFont.BoldWeight;
        cs9.WrapText            = true;
        cs9.HorizontalAlignment = HorizontalAlignmentStyle.Center;

        CellRange cr9 = ws.Cells.GetSubrangeAbsolute(0, columnPointer + 2, 0, columnPointer += 7);

        cr9.Merged = true;
        cr9.Value  = "FJC ONLY";
        cr9.Style  = cs9;

        // Grandfather questions
        var cs10 = new CellStyle();

        cs10.FillPattern.SetSolid(Color.FromArgb(133, 19, 110));
        cs10.Font.Weight         = ExcelFont.BoldWeight;
        cs10.WrapText            = true;
        cs10.HorizontalAlignment = HorizontalAlignmentStyle.Center;

        CellRange cr10 = ws.Cells.GetSubrangeAbsolute(0, columnPointer + 1, 0, columnPointer += 4);

        cr10.Merged = true;
        cr10.Value  = "Grandfather Policy";
        cr10.Style  = cs10;

        // Chicago Siblings
        var cs11 = new CellStyle();

        cs11.FillPattern.SetSolid(Color.FromArgb(133, 119, 110));
        cs11.Font.Weight         = ExcelFont.BoldWeight;
        cs11.WrapText            = true;
        cs11.HorizontalAlignment = HorizontalAlignmentStyle.Center;

        CellRange cr11 = ws.Cells.GetSubrangeAbsolute(0, columnPointer + 1, 0, columnPointer += 2);

        cr11.Merged = true;
        cr11.Value  = "Chicago Siblings";
        cr11.Style  = cs11;

        // this creats the real table
        ws.InsertDataTable(dt, 1, 0, true);

        CellStyle styleTableHeaderColumns = new CellStyle();

        styleTableHeaderColumns.Font.Weight         = ExcelFont.BoldWeight;
        styleTableHeaderColumns.HorizontalAlignment = HorizontalAlignmentStyle.Center;
        styleTableHeaderColumns.VerticalAlignment   = VerticalAlignmentStyle.Center;
        styleTableHeaderColumns.FillPattern.SetSolid(Color.LightGray);
        styleTableHeaderColumns.WrapText = true;

        ws.Columns[0].Width = 15 * 256;
        ws.Columns[1].Width = 35 * 256;
        ws.Columns[2].Width = 30 * 256;

        ws.Columns[11].Width = 35 * 256;         // Camp Name
        ws.Columns[12].Width = 27 * 256;

        ws.Columns[16].Width = 30 * 256;         // Last Name
        ws.Columns[17].Width = 30 * 256;

        ws.Rows[1].Style  = styleTableHeaderColumns;
        ws.Rows[1].Height = 3 * 256;

        CellStyle styleContent = new CellStyle();

        styleContent.HorizontalAlignment = HorizontalAlignmentStyle.Left;
        styleContent.VerticalAlignment   = VerticalAlignmentStyle.Center;

        for (int i = 2; i < dt.Rows.Count; i++)
        {
            ws.Rows[i].Style = styleContent;
        }

        styleContent.WrapText = true;

        excel.Worksheets.ActiveWorksheet = excel.Worksheets[0];

        // Save to a file on the local file system
        string filename = String.Format("\\{0}{1}{2}{3}DataExtract.xls", DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Millisecond);
        string newFile  = workFileDir + filename;

        excel.SaveXls(newFile);


        string[] strFileParts = newFile.Split(new string[] { "\\" }, StringSplitOptions.None);

        //Display excel spreadsheet
        this.Response.Clear();
        this.Response.Buffer = true;
        this.Response.AddHeader("Content-Disposition", "attachment; filename=" + strFileParts[strFileParts.Length - 1]);
        this.Response.ContentType = "application/vnd.ms-excel";
        this.Response.Charset     = "";

        if (newFile.Length == 0)
        {
            this.Response.Write("Error encountered - no spreadsheet to display");
        }
        else
        {
            this.Response.WriteFile(newFile);
        }

        Response.End();
    }
        private string MakeReport(DateTime aggStartDate, DateTime repDate, bool makeAggData, string xlsReportName)
        {
            //if the month is the aggStart use the blank template. Otherwise, use last months
            string xlsBaseFileName;

            if (aggStartDate == repDate)
            {
                xlsBaseFileName = "NNIN Data Blank.xls";
            }
            else
            {
                xlsBaseFileName = "AS" + aggStartDate.ToString("yyyyMM") + "_Report" + repDate.AddMonths(-1).ToString("yyyyMM") + ".xls";
            }

            string xlsBaseFilePath = xlsFilePath + xlsBaseFileName;
            string xlsReportPath   = xlsFilePath + xlsReportName;

            DateTime period  = repDate;
            DateTime sDate   = period;
            DateTime eDate   = sDate.AddMonths(1);
            Compile  compile = new Compile();

            //this gets the aggregated costs for rooms and tools
            DataSet   dsCostTables = NNINDA.GetCostTables(period);
            DataTable dtRoomCost   = dsCostTables.Tables[0];
            DataTable dtToolCost   = dsCostTables.Tables[1];

            //get Client info
            DataSet ds = DataCommand()
                         .Param("Action", "GetAllTables")
                         .Param("Period", period)
                         .Param("Privs", (int)ClientPrivilege.LabUser)
                         .Param("MakeCumUser", makeAggData)
                         .FillDataSet("dbo.NNIN_Select");

            ds.Tables[0].TableName = "ClientTechInt";
            ds.Tables[1].TableName = "AcctOrgType";
            ds.Tables[2].TableName = "TechnicalInterest_Hours";
            ds.Tables[3].TableName = "OrgType_Hours";
            ds.Tables[4].TableName = "TechnicalInterest_Users";
            ds.Tables[5].TableName = "OrgType_Users";
            ds.Tables[6].TableName = "TechnicalInterest_Fees";
            ds.Tables[7].TableName = "OrgType_Fees";

            DataColumn[] pk;

            pk = new DataColumn[] { ds.Tables["TechnicalInterest_Fees"].Columns["TechnicalInterestID"] };
            ds.Tables["TechnicalInterest_Fees"].PrimaryKey = pk;

            pk = new DataColumn[] { ds.Tables["OrgType_Fees"].Columns["OrgTypeID"] };
            ds.Tables["OrgType_Fees"].PrimaryKey = pk;

            //calc fees by tech interest and orgtype
            DataRow drTI, drOT;

            DataRow[] fdr;
            foreach (DataTable dt in dsCostTables.Tables)
            {
                foreach (DataRow dr in dt.Rows)
                {
                    fdr = ds.Tables["ClientTechInt"].Select(string.Format("ClientID = {0}", dr["ClientID"]));
                    if (fdr.Length > 0)
                    {
                        drTI = ds.Tables["TechnicalInterest_Fees"].Rows.Find(fdr[0]["TechnicalInterestID"]);

                        drTI["Fees"] = drTI.Field <double>("Fees") + dr.Field <double>("TotalCalcCost");
                        fdr          = ds.Tables["AcctOrgType"].Select(string.Format("AccountID = {0}", dr["AccountID"]));
                        if (fdr.Length > 0)
                        {
                            drOT         = ds.Tables["OrgType_Fees"].Rows.Find(fdr[0]["OrgTypeID"]);
                            drOT["Fees"] = drOT.Field <double>("Fees") + dr.Field <double>("TotalCalcCost");
                        }
                    }
                }
            }

            //get raw cumulative user data
            DataCommand()
            .Param("Action", "Aggregate")
            .Param("sDate", aggStartDate)
            .Param("eDate", repDate)
            .FillDataSet(ds, "dbo.CumUser_Select", "CumUser");

            DataTable dtReport = new DataTable();

            dtReport.Columns.Add("BaseRow", typeof(int));
            dtReport.Columns.Add("TotalRow", typeof(int));
            dtReport.Columns.Add("RepType", typeof(string)); //fees, hours, cum
            dtReport.Columns.Add("ByType", typeof(string));  //orgtype, techid, none
            dtReport.Columns.Add("DateOnly", typeof(bool));  //orgtype, techid, none

            AddReportRow(dtReport, new object[] { 10, 0, string.Empty, string.Empty, true });
            AddReportRow(dtReport, new object[] { 24, 43, "Hours", "TechnicalInterest", false });
            AddReportRow(dtReport, new object[] { 11, 43, "Hours", "OrgType", false });
            AddReportRow(dtReport, new object[] { 40, 0, string.Empty, string.Empty, true });
            AddReportRow(dtReport, new object[] { 69, 88, "Users", "TechnicalInterest", false });
            AddReportRow(dtReport, new object[] { 55, 88, "Users", "OrgType", false });
            AddReportRow(dtReport, new object[] { 85, 0, string.Empty, string.Empty, true });
            AddReportRow(dtReport, new object[] { 161, 180, "Fees", "TechnicalInterest", false });
            AddReportRow(dtReport, new object[] { 146, 180, "Fees", "OrgType", false });
            AddReportRow(dtReport, new object[] { 177, 0, string.Empty, string.Empty, true });
            AddReportRow(dtReport, new object[] { 116, 136, "CumUser", "TechnicalInterest", false });
            AddReportRow(dtReport, new object[] { 101, 136, "CumUser", "OrgType", false });
            AddReportRow(dtReport, new object[] { 133, 0, string.Empty, string.Empty, true });
            AddReportRow(dtReport, new object[] { 226, 0, "CumUser", "DemGender", false });
            AddReportRow(dtReport, new object[] { 232, 0, "CumUser", "DemEthnic", false });
            AddReportRow(dtReport, new object[] { 238, 0, "CumUser", "DemRace", false });
            AddReportRow(dtReport, new object[] { 247, 0, "CumUser", "DemDisability", false });

            ExcelLite.SetLicense("EL6N-Z669-AZZG-3LS7");
            ExcelFile SpreadSheet = new ExcelFile();

            SpreadSheet.LoadXls(xlsBaseFilePath);
            ExcelWorksheet ws = SpreadSheet.Worksheets["UM SSEL"];

            int    lastVal, useCol = 0, useRow;
            double hardTotals; //for recording internal time without formula

            foreach (DataRow drReport in dtReport.Rows)
            {
                //write dates
                for (int j = 0; j < 12; j++)
                {
                    ws.Cells[Convert.ToInt32(drReport["BaseRow"]), j + 1].Value = aggStartDate.AddMonths(j);
                    if (aggStartDate.AddMonths(j) == repDate)
                    {
                        useCol = j + 1;
                    }
                }

                if (!Convert.ToBoolean(drReport["DateOnly"]))
                {
                    hardTotals = 0;
                    if (drReport["RepType"].ToString() == "CumUser")
                    {
                        fdr = ds.Tables["CumUser"].Select(string.Format("TableName = '{0}'", drReport["ByType"]));
                        for (int j = 0; j < fdr.Length; j++)
                        {
                            useRow = drReport.Field <int>("BaseRow") + fdr[j].Field <int>("Value");
                            if (aggStartDate == repDate)
                            {
                                ws.Cells[useRow, useCol].Value = fdr[j]["Count"];
                            }
                            else
                            {
                                lastVal = Convert.ToInt32(ws.Cells[useRow, 1].Value);
                                for (int i = 2; i < useCol; i++)
                                {
                                    string form = ws.Cells[useRow, i].Formula;
                                    if (!string.IsNullOrEmpty(form))
                                    {
                                        lastVal += Convert.ToInt32(form.Substring(form.IndexOf("+") + 1));
                                    }
                                }
                                ws.Cells[useRow, useCol].Formula = "=" + Convert.ToChar(64 + useCol) + (useRow + 1).ToString() + "+" + (Convert.ToInt32(fdr[j]["Count"]) - lastVal).ToString();
                            }

                            hardTotals += fdr[j].Field <double>("Count");
                        }

                        if (Convert.ToInt32(drReport["TotalRow"]) != 0)
                        {
                            ws.Cells[Convert.ToInt32(drReport["TotalRow"]), useCol].Value = hardTotals;
                        }
                    }
                    else
                    {
                        foreach (DataRow dr in ds.Tables[string.Format("{0}_{1}", drReport["ByType"], drReport["RepType"])].Rows)
                        {
                            useRow = drReport.Field <int>("BaseRow") + dr.Field <int>(string.Format("{0}ID", drReport["ByType"]));
                            ws.Cells[useRow, useCol].Value = dr[drReport["RepType"].ToString()];
                            hardTotals += Convert.ToDouble(dr[drReport["RepType"].ToString()]);
                        }

                        ws.Cells[Convert.ToInt32(drReport["TotalRow"]), useCol].Value = hardTotals;
                    }
                }
            }

            SpreadSheet.SaveXls(xlsReportPath);
            SpreadSheet = null;
            System.GC.Collect();

            return(xlsReportPath);
        }