Ejemplo n.º 1
0
        /// <summary>
        /// Sets the index of the status color.
        /// </summary>
        /// <param name="exportExcelInfo">The export excel information.</param>
        private void SetStatusColorIndex(ref ExportExcelInfo exportExcelInfo)
        {
            var closedBackgroundColor = Color.FromArgb(221, 221, 221);
            NpoiExcelExtensions.SetColorAtIndex(exportExcelInfo, closedBackgroundColor, _closedBackgroundColorIndex);

            var checkedBackgroundColor = Color.FromArgb(242, 242, 242);
            NpoiExcelExtensions.SetColorAtIndex(exportExcelInfo, checkedBackgroundColor, _checkedBackgroundColorIndex);

            var pendingBackgroundColor = Color.FromArgb(240, 237, 196);
            NpoiExcelExtensions.SetColorAtIndex(
                exportExcelInfo, pendingBackgroundColor, _pendingBackgroundColorIndex);
        }
Ejemplo n.º 2
0
        private void ExportDynamicReportBody(
            ref ExportExcelInfo exportExcelInfo,
            GetDynamicReportCriteria criteria,
            DynamicReportInfo dynamicReport)
        {
            if (dynamicReport == null || dynamicReport.ChildReports.Count == 0)
            {
                exportExcelInfo.Worksheet = exportExcelInfo.ExcelFile.CreateSheet(Labels.DynamicReport_SheetName);
                ExportDynamicReportHeader(ref exportExcelInfo, criteria, dynamicReport);
                NpoiExcelExtensions.RenderNoInfoMessage(exportExcelInfo, exportExcelInfo.CurrentRow);
                return;
            }

            var periodGroupBackgroundColor = Color.FromArgb(215, 215, 215);
            var periodGroupBackgroundColorIndex = (short)HSSFColor.DarkYellow.Index;
            NpoiExcelExtensions.SetColorAtIndex(exportExcelInfo, periodGroupBackgroundColor, periodGroupBackgroundColorIndex);
            ICellStyle periodGroupTitleStyle = NpoiExcelExtensions.GetTextStyle(
                exportExcelInfo.ExcelFile,
                periodGroupBackgroundColorIndex,
                true,
                CRMHorizontalAlignment.Left);
            var font = exportExcelInfo.ExcelFile.CreateFont();
            font.FontHeightInPoints = NpoiExcelExtensions.FontSize;
            font.FontName = NpoiExcelExtensions.FontName;
            font.Color = (short)HSSFColor.Blue.Index;
            font.Boldweight = (short)FontBoldWeight.Bold;
            periodGroupTitleStyle.SetFont(font);
            NpoiExcelExtensions.SetBorderToCell(periodGroupTitleStyle);

            CellRangeAddress cellRangeAddress;
            var totalItems = dynamicReport.TotalChildReports;

            var normalRowWriter = new CommunicationLogRowExcelWriter(
                exportExcelInfo,
                NpoiExcelExtensions.BackgroundColorIndex);
            var closedRowWriter = new CommunicationLogRowExcelWriter(
                exportExcelInfo,
                _closedBackgroundColorIndex);
            var checkedRowWriter = new CommunicationLogRowExcelWriter(
                exportExcelInfo,
                _checkedBackgroundColorIndex);
            var pendingRowWriter = new CommunicationLogRowExcelWriter(
                exportExcelInfo,
                _pendingBackgroundColorIndex);

            var maxRowPerSheet = NpoiExcelExtensions.MaxRowPerSheet;
            var numberOfSheet = (totalItems / maxRowPerSheet) +
                (totalItems % maxRowPerSheet != 0 ? 1 : 0);

            var mainCategoryCount = dynamicReport.ChildReports.Count;
            
            var currentIndexOfMainCategory = 0;
            var currentIndexOfDetailItem = 0;
            var startContentIndex = 4;
            var actualMaxRowPerSheet = (maxRowPerSheet * 2) + startContentIndex;
            
            for (var sheetIndex = 0; sheetIndex < numberOfSheet; sheetIndex++)
            {                
                var sheetName = numberOfSheet > 1 ?
                    string.Format("{0} - {1}", Labels.DynamicReport_SheetName, sheetIndex + 1) :
                    Labels.DynamicReport_SheetName;

                exportExcelInfo.Worksheet = exportExcelInfo.ExcelFile.CreateSheet(sheetName);
                exportExcelInfo.CurrentRow = 0;
                ExportDynamicReportHeader(ref exportExcelInfo, criteria, dynamicReport);
                
                for (var i = currentIndexOfMainCategory; i < mainCategoryCount && exportExcelInfo.CurrentRow < actualMaxRowPerSheet; i++)
                {
                    var periodReport = dynamicReport.ChildReports[i];
                    var childsLength = periodReport.ChildReports.Count;

                    if (exportExcelInfo.CurrentRow > startContentIndex)
                    {
                        currentIndexOfDetailItem = 0;
                    }

                    exportExcelInfo.Worksheet.CreateRow(exportExcelInfo.CurrentRow);
                    exportExcelInfo.CurrentColumn = exportExcelInfo.StartColumn;
                    cellRangeAddress = new CellRangeAddress(
                        exportExcelInfo.CurrentRow,
                        exportExcelInfo.CurrentRow + 1,
                        exportExcelInfo.StartColumn,
                        exportExcelInfo.MaxColumnIndex);
                    NpoiExcelExtensions.RenderMergedCells(
                        exportExcelInfo,
                        cellRangeAddress,
                        string.Format("{0} [{1}]", periodReport.Name, childsLength),
                        periodGroupTitleStyle);
                    exportExcelInfo.CurrentRow += 2;

                    for (var j = currentIndexOfDetailItem; j < childsLength && exportExcelInfo.CurrentRow < actualMaxRowPerSheet; j++)
                    {
                        exportExcelInfo.Worksheet.CreateRow(exportExcelInfo.CurrentRow);
                        exportExcelInfo.CurrentColumn = exportExcelInfo.StartColumn;
                        var info = periodReport.ChildReports[j];

                        if (string.Equals(info.StatusName, Labels.Closed, StringComparison.OrdinalIgnoreCase))
                        {
                            closedRowWriter.WriteRow(exportExcelInfo, info, j);
                        }
                        else if (string.Equals(info.StatusName, Labels.Checked, StringComparison.OrdinalIgnoreCase) ||
                            string.Equals(info.StatusName, Labels.Solved, StringComparison.OrdinalIgnoreCase))
                        {
                            checkedRowWriter.WriteRow(exportExcelInfo, info, j);
                        }
                        else if (string.Equals(info.StatusName, Labels.Pending, StringComparison.OrdinalIgnoreCase))
                        {
                            pendingRowWriter.WriteRow(exportExcelInfo, info, j);
                        }
                        else
                        {
                            normalRowWriter.WriteRow(exportExcelInfo, info, j);
                        }

                        currentIndexOfDetailItem++;
                    }

                    if (currentIndexOfDetailItem == childsLength)
                    {
                        currentIndexOfMainCategory++;
                    }
                }
            }
        }
Ejemplo n.º 3
0
        public void ExportDynamicReport(GetDynamicReportCriteria criteria)
        {
            string reportName = string.Format(
                 Labels.DynamicReport_ExcelTitle,
                 SettingService.GetPeriodTypeName(criteria.ReportType),
                 criteria.FromDate.ToShortFormatedDateWithSlash().Replace("/", "_"),
                 criteria.ToDate.ToShortFormatedDateWithSlash().Replace("/", "_"));

            criteria.IsGetFullReport = true;
            var dynamicReport = GetDynamicReport(criteria);

            var exportExcelInfo = new ExportExcelInfo
            {
                ExcelFile = new HSSFWorkbook(),
                StartRow = 0,
                StartColumn = 0,
                CurrentRow = 0,
                MaxColumnIndex = 9
            };

            SetStatusColorIndex(ref exportExcelInfo);
            ExportDynamicReportBody(ref exportExcelInfo, criteria, dynamicReport);

            NpoiExcelExtensions.ResponseStreamExcel(exportExcelInfo.ExcelFile, reportName);
        }
Ejemplo n.º 4
0
        private void ExportDynamicReportHeader(
            ref ExportExcelInfo exportExcelInfo,
            GetDynamicReportCriteria criteria,
            DynamicReportInfo dynamicReport)
        {
            NpoiExcelExtensions.SetHeaderColorIndex(exportExcelInfo);
            ICellStyle headerStyle = NpoiExcelExtensions.GetHeaderStyle(
                exportExcelInfo.ExcelFile,
                new ExcelStyleParam());
            var currentColumn = exportExcelInfo.StartColumn;
            exportExcelInfo.Worksheet.SetColumnWidth(currentColumn++, 80 * NpoiExcelExtensions.FontWidth);
            exportExcelInfo.Worksheet.SetColumnWidth(currentColumn++, 100 * NpoiExcelExtensions.FontWidth);
            exportExcelInfo.Worksheet.SetColumnWidth(currentColumn++, 120 * NpoiExcelExtensions.FontWidth);
            exportExcelInfo.Worksheet.SetColumnWidth(currentColumn++, 300 * NpoiExcelExtensions.FontWidth);
            exportExcelInfo.Worksheet.SetColumnWidth(currentColumn++, 160 * NpoiExcelExtensions.FontWidth);
            exportExcelInfo.Worksheet.SetColumnWidth(currentColumn++, 100 * NpoiExcelExtensions.FontWidth);
            exportExcelInfo.Worksheet.SetColumnWidth(currentColumn++, 80 * NpoiExcelExtensions.FontWidth);
            exportExcelInfo.Worksheet.SetColumnWidth(currentColumn++, 140 * NpoiExcelExtensions.FontWidth);
            exportExcelInfo.Worksheet.SetColumnWidth(currentColumn++, 140 * NpoiExcelExtensions.FontWidth);
            exportExcelInfo.Worksheet.SetColumnWidth(currentColumn++, 140 * NpoiExcelExtensions.FontWidth);

            string reportTitle = string.Format(
                Labels.DynamicReport_TitleWithNumberOfLog,
                SettingService.GetPeriodTypeName(criteria.ReportType),
                DateTimeUtilize.ChangeTimeZoneToClientDateTime(criteria.FromDate).ToShortFormatedDate(),
                DateTimeUtilize.ChangeTimeZoneToClientDateTime(criteria.ToDate).ToShortFormatedDate(),
                dynamicReport != null ? "[" + dynamicReport.TotalChildReports + "]" : string.Empty);

            CellRangeAddress cellRangeAddress;
            cellRangeAddress = new CellRangeAddress(
                exportExcelInfo.CurrentRow,
                exportExcelInfo.CurrentRow + 1,
                exportExcelInfo.StartColumn,
                exportExcelInfo.MaxColumnIndex);
            NpoiExcelExtensions.RenderMergedCells(exportExcelInfo, cellRangeAddress, reportTitle, headerStyle);
            exportExcelInfo.CurrentRow += 2;

            NpoiExcelExtensions.RenderEmptyRow(exportExcelInfo, exportExcelInfo.CurrentRow);
            exportExcelInfo.CurrentRow++;

            IRow row = exportExcelInfo.Worksheet.CreateRow(exportExcelInfo.CurrentRow);
            currentColumn = exportExcelInfo.StartColumn;
            NpoiExcelExtensions.RenderCell(row, currentColumn, Labels.Symbol_No, headerStyle);
            currentColumn++;
            NpoiExcelExtensions.RenderCell(row, currentColumn, Labels.Running_No, headerStyle);
            currentColumn++;
            NpoiExcelExtensions.RenderCell(row, currentColumn, Labels.Feedback_Date, headerStyle);
            currentColumn++;
            NpoiExcelExtensions.RenderCell(
                row,
                currentColumn,
                string.Format("{0}/{1}", Labels.Main_Category, Labels.Sub_Category),
                headerStyle);
            currentColumn++;
            NpoiExcelExtensions.RenderCell(row, currentColumn, Labels.Subject, headerStyle);
            currentColumn++;
            NpoiExcelExtensions.RenderCell(row, currentColumn, Labels.Status, headerStyle);
            currentColumn++;
            NpoiExcelExtensions.RenderCell(row, currentColumn, Labels.Duration, headerStyle);
            currentColumn++;
            NpoiExcelExtensions.RenderCell(row, currentColumn, Labels.Username, headerStyle);
            currentColumn++;
            NpoiExcelExtensions.RenderCell(row, currentColumn, Labels.Handler, headerStyle);
            currentColumn++;
            NpoiExcelExtensions.RenderCell(row, currentColumn, Labels.Reviewer, headerStyle);
            currentColumn++;
            exportExcelInfo.CurrentRow++;
        }
Ejemplo n.º 5
0
        public void Export(int pageIndex = 1, string keyword = "", int ptId = 0, bool isPaging = true)
        {
            try
            {
                var logs = from l in db.ES_ExamLog
                           where l.IsDel == false
                           join u in db.ES_User on l.UserId equals u.UserId
                           join pt in db.ES_ExamPart on l.EmPtId equals pt.EmPtId
                           join pr in db.ES_ExamPaper on l.EmPaperId equals pr.EmPaperId
                           where pt.IsDel == false && pr.IsDel == false && u.IsDel == false
                           select new
                {
                    u.UserId,
                    u.UserName,
                    l.LogId,
                    l.IsSubmit,
                    l.ExercisesId,
                    l.Answers,
                    l.ExamScore,
                    l.EmPtId,
                    l.EmPaperId,
                    pt.EmPtStart,
                    pt.EmPtEnd,
                    pr.EmPaperName
                };

                if (ptId != null && ptId != 0)
                {
                    logs = logs.Where(l => l.EmPtId == ptId);
                }

                if (keyword != "")
                {
                    logs = logs.Where(l => l.UserName.Contains(keyword));
                }

                int totalCount = logs.Count();
                if (isPaging)
                {
                    logs = logs.OrderBy(l => l.LogId).Skip((pageIndex - 1) * 10).Take(10);
                }

                List <ExportExcelInfo> exportExcelList = new List <ExportExcelInfo>();

                foreach (var log in logs)
                {
                    int    userId      = log.UserId;
                    string userName    = log.UserName;
                    int    logId       = log.LogId;
                    string isSubmit    = log.IsSubmit == false ? "否" : "是";
                    string exercisesId = log.ExercisesId;
                    string answers     = log.Answers;
                    double score       = log.ExamScore;
                    int    partId      = Convert.ToInt32(log.EmPtId);
                    int    paperId     = Convert.ToInt32(log.EmPaperId);

                    string tempDate = log.EmPtStart.GetDateTimeFormats('o')[0];
                    string date     = tempDate.Substring(0, tempDate.IndexOf('T')); // 将日期转为2020-05-06
                    string start    = log.EmPtStart.ToString("T");                  // 开始时间
                    string end      = log.EmPtEnd.ToString("T");                    // 结束时间
                    string title    = start.Substring(0, start.Length - 3) + "到" + end.Substring(0, end.Length - 3) + "场";

                    string examTitle = log.EmPaperName;

                    ExportExcelInfo exportExcel = new ExportExcelInfo()
                    {
                        UserName = userName,
                        LogId    = logId,
                        IsSubmit = log.IsSubmit,
                        Part     = title,
                        Title    = examTitle,
                        Score    = score,
                        Date     = date
                    };

                    exportExcelList.Add(exportExcel);
                }

                MemoryStream ms = ExcelHelper.ExportExcel(exportExcelList);


                //asp.net输出的Excel文件名
                //如果文件名是中文的话,需要进行编码转换,否则浏览器看到的下载文件是乱码。
                string fileName = HttpUtility.UrlEncode($"{TimeHelper.GetTimeStamp()}.xls");

                Response.ContentType = "application/vnd.ms-excel";
                //Response.ContentType = "application/download"; //也可以设置成download
                Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", fileName));

                Response.Buffer = true;
                Response.Clear();
                Response.BinaryWrite(ms.GetBuffer());
                Response.End();
            }
            catch (Exception ex)
            {
                Response.Write("ERROR" + ex.Message);
            }
        }