DoddleReport

 

 public class ExcelReportWriter : IReportWriter

中自定义Sheet名字

report.RenderHints["SheetName"] = "Test Sheet";

 

var sheetName = report.RenderHints[SheetName] as string ?? "Data";

 

 

 

复制代码
 private void WriteReport(Report report, XLWorkbook workbook)
        {
            var sheetName = report.RenderHints[SheetName] as string ?? "Data";//需要传入,否则默认
            IXLWorksheet worksheet;
            int duplicateNameCount = 0;
            var originalSheetName = sheetName;
            while (workbook.Worksheets.TryGetWorksheet(sheetName, out worksheet))//判断是否有这个sheet
            {
                sheetName = originalSheetName + ++duplicateNameCount;
            }

            worksheet = workbook.Worksheets.Add(sheetName);
            worksheet.SetShowRowColHeaders(true);
            var orientation = report.RenderHints.Orientation == ReportOrientation.Portrait ? XLPageOrientation.Portrait : XLPageOrientation.Landscape;
            worksheet.PageSetup.PageOrientation = orientation;

            // Set the paper size to what the render hint is set to
            if (report.RenderHints[PaperSize] != null)
            {
                worksheet.PageSetup.PaperSize = (XLPaperSize)Enum.Parse(typeof(XLPaperSize), report.RenderHints[PaperSize].ToString());
            }

            if (report.RenderHints.FreezePanes)
                worksheet.SheetView.Freeze(report.RenderHints.FreezeRows, report.RenderHints.FreezeColumns);

            // Render the header
            var fieldsCount = report.DataFields.Count(f => !f.Hidden);
            int rowCount = RenderHeader(worksheet, fieldsCount, report.TextFields, report.RenderHints);

            // Render all the rows
            foreach (var row in report.GetRows())
            {
                rowCount++;
                var dataRow = worksheet.Row(rowCount);
                RenderRow(rowCount, row, dataRow);
            }

            // Render the footer
            RenderFooter(worksheet, fieldsCount, report.TextFields, report.RenderHints, rowCount);


            // TODO: AdjustToContents renders horribly when deployed to an Azure Website, need to determine why

            // Adjust the width of all the columns
            for (int i = 0; i < fieldsCount; i++)
            {
                var reportField = report.DataFields.Where(f => !f.Hidden).Skip(i).Take(1).Single();
                var width = new int[] { reportField.DataStyle.Width, reportField.FooterStyle.Width, reportField.HeaderStyle.Width }.Max();
                var adjustToContents = report.RenderHints[AdjustColumnWidthToContents] as bool? ?? true;

                if (adjustToContents || width > 0)
                {
                    var column = worksheet.Column(i + 1);
                    if (adjustToContents && width > 0)
                    {
                        column.AdjustToContents(width.PixelsToUnits(column.Style.Font), double.MaxValue);
                    }
                    else if (adjustToContents)
                    {
                        column.AdjustToContents(1, 50, 5.0, 100.0);
                    }
                    else
                    {
                        column.Width = width.PixelsToUnits(column.Style.Font);
                    }
                }
            }

            worksheet.Columns().AdjustToContents();

            // Check if the current writer needs to append another report to the report we just generated
            if (ReportsToAppend.ContainsKey(report))
            {
                foreach (var reportToAppend in ReportsToAppend[report])
                {
                    WriteReport(reportToAppend, workbook);
                }
            }
        }
复制代码

 

posted @   纵一苇之所如-  阅读(342)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示