第06章-样式与外观定制

第六章:样式与外观定制

6.1 字体样式

6.1.1 基本字体设置

using System.Drawing;
using unvell.ReoGrid.Data;

public class FontStyling
{
    private Worksheet sheet;
    
    public FontStyling(Worksheet worksheet)
    {
        sheet = worksheet;
    }
    
    /// <summary>
    /// 设置字体名称和大小
    /// </summary>
    public void SetFontBasics(string range)
    {
        sheet.SetRangeStyles(range, new WorksheetRangeStyle
        {
            Flag = PlainStyleFlag.FontName | PlainStyleFlag.FontSize,
            FontName = "微软雅黑",
            FontSize = 12
        });
    }
    
    /// <summary>
    /// 设置字体颜色
    /// </summary>
    public void SetFontColor(string range, Color color)
    {
        sheet.SetRangeStyles(range, new WorksheetRangeStyle
        {
            Flag = PlainStyleFlag.FontColor,
            FontColor = color
        });
    }
    
    /// <summary>
    /// 设置粗体
    /// </summary>
    public void SetBold(string range, bool bold = true)
    {
        sheet.SetRangeStyles(range, new WorksheetRangeStyle
        {
            Flag = PlainStyleFlag.FontBold,
            Bold = bold
        });
    }
    
    /// <summary>
    /// 设置斜体
    /// </summary>
    public void SetItalic(string range, bool italic = true)
    {
        sheet.SetRangeStyles(range, new WorksheetRangeStyle
        {
            Flag = PlainStyleFlag.FontItalic,
            Italic = italic
        });
    }
    
    /// <summary>
    /// 设置下划线
    /// </summary>
    public void SetUnderline(string range, bool underline = true)
    {
        sheet.SetRangeStyles(range, new WorksheetRangeStyle
        {
            Flag = PlainStyleFlag.FontUnderline,
            Underline = underline
        });
    }
    
    /// <summary>
    /// 设置删除线
    /// </summary>
    public void SetStrikethrough(string range, bool strikethrough = true)
    {
        sheet.SetRangeStyles(range, new WorksheetRangeStyle
        {
            Flag = PlainStyleFlag.FontStrikethrough,
            Strikethrough = strikethrough
        });
    }
}

6.1.2 组合字体样式

public class CombinedFontStyles
{
    /// <summary>
    /// 设置标题样式
    /// </summary>
    public void SetTitleStyle(Worksheet sheet, string range)
    {
        sheet.SetRangeStyles(range, new WorksheetRangeStyle
        {
            Flag = PlainStyleFlag.FontName | 
                   PlainStyleFlag.FontSize | 
                   PlainStyleFlag.FontColor | 
                   PlainStyleFlag.FontBold,
            FontName = "微软雅黑",
            FontSize = 16,
            FontColor = Color.DarkBlue,
            Bold = true
        });
    }
    
    /// <summary>
    /// 设置强调文本样式
    /// </summary>
    public void SetEmphasisStyle(Worksheet sheet, string range)
    {
        sheet.SetRangeStyles(range, new WorksheetRangeStyle
        {
            Flag = PlainStyleFlag.FontColor | 
                   PlainStyleFlag.FontItalic | 
                   PlainStyleFlag.FontBold,
            FontColor = Color.Red,
            Italic = true,
            Bold = true
        });
    }
}

6.2 单元格背景

6.2.1 背景颜色

public class BackgroundStyling
{
    private Worksheet sheet;
    
    /// <summary>
    /// 设置单色背景
    /// </summary>
    public void SetBackgroundColor(string range, Color color)
    {
        sheet.SetRangeStyles(range, new WorksheetRangeStyle
        {
            Flag = PlainStyleFlag.BackColor,
            BackColor = color
        });
    }
    
    /// <summary>
    /// 常用背景色设置
    /// </summary>
    public void SetCommonBackgrounds()
    {
        // 浅黄色背景(突出显示)
        sheet.SetRangeStyles("A1:A10", new WorksheetRangeStyle
        {
            Flag = PlainStyleFlag.BackColor,
            BackColor = Color.LightYellow
        });
        
        // 浅蓝色背景(表头)
        sheet.SetRangeStyles("A1:Z1", new WorksheetRangeStyle
        {
            Flag = PlainStyleFlag.BackColor,
            BackColor = Color.LightBlue
        });
        
        // 浅灰色背景(只读区域)
        sheet.SetRangeStyles("A1:A5", new WorksheetRangeStyle
        {
            Flag = PlainStyleFlag.BackColor,
            BackColor = Color.LightGray
        });
    }
    
    /// <summary>
    /// 交替行颜色
    /// </summary>
    public void SetAlternateRowColors(int startRow, int endRow, int startCol, int endCol)
    {
        for (int row = startRow; row <= endRow; row++)
        {
            Color bgColor = row % 2 == 0 
                ? Color.White 
                : Color.FromArgb(242, 242, 242);
            
            sheet.SetRangeStyles(
                new RangePosition(row, startCol, 1, endCol - startCol + 1),
                new WorksheetRangeStyle
                {
                    Flag = PlainStyleFlag.BackColor,
                    BackColor = bgColor
                });
        }
    }
}

6.3 边框样式

6.3.1 基本边框设置

using unvell.ReoGrid.Graphics;

public class BorderStyling
{
    private Worksheet sheet;
    
    /// <summary>
    /// 设置全边框
    /// </summary>
    public void SetAllBorders(string range, Color color, BorderLineStyle style)
    {
        sheet.SetRangeStyles(range, new WorksheetRangeStyle
        {
            Flag = PlainStyleFlag.Border,
            Border = new RangeBorderStyle
            {
                Left = new BorderStyle { Color = color, Style = style },
                Top = new BorderStyle { Color = color, Style = style },
                Right = new BorderStyle { Color = color, Style = style },
                Bottom = new BorderStyle { Color = color, Style = style }
            }
        });
    }
    
    /// <summary>
    /// 设置外边框
    /// </summary>
    public void SetOutsideBorder(string range, Color color, BorderLineStyle style)
    {
        sheet.SetRangeBorders(
            new RangePosition(range), 
            BorderPositions.Outside,
            new BorderStyle { Color = color, Style = style });
    }
    
    /// <summary>
    /// 设置内边框
    /// </summary>
    public void SetInsideBorder(string range, Color color, BorderLineStyle style)
    {
        sheet.SetRangeBorders(
            new RangePosition(range), 
            BorderPositions.Inside,
            new BorderStyle { Color = color, Style = style });
    }
    
    /// <summary>
    /// 设置特定边
    /// </summary>
    public void SetSpecificBorders(string range)
    {
        sheet.SetRangeStyles(range, new WorksheetRangeStyle
        {
            Flag = PlainStyleFlag.Border,
            Border = new RangeBorderStyle
            {
                Top = new BorderStyle 
                { 
                    Color = Color.Black, 
                    Style = BorderLineStyle.Solid 
                },
                Bottom = new BorderStyle 
                { 
                    Color = Color.Black, 
                    Style = BorderLineStyle.Solid 
                }
            }
        });
    }
}

6.3.2 边框样式类型

public class BorderStyleTypes
{
    public void DemonstrateBorderStyles(Worksheet sheet)
    {
        // 实线边框
        sheet.SetRangeBorders("A1:A1", BorderPositions.All,
            new BorderStyle { Color = Color.Black, Style = BorderLineStyle.Solid });
        
        // 虚线边框
        sheet.SetRangeBorders("B1:B1", BorderPositions.All,
            new BorderStyle { Color = Color.Black, Style = BorderLineStyle.Dashed });
        
        // 点线边框
        sheet.SetRangeBorders("C1:C1", BorderPositions.All,
            new BorderStyle { Color = Color.Black, Style = BorderLineStyle.Dotted });
        
        // 粗线边框
        sheet.SetRangeBorders("D1:D1", BorderPositions.All,
            new BorderStyle { Color = Color.Black, Style = BorderLineStyle.BoldSolid });
        
        // 双线边框
        sheet.SetRangeBorders("E1:E1", BorderPositions.All,
            new BorderStyle { Color = Color.Black, Style = BorderLineStyle.DoubleLine });
    }
}

6.4 对齐方式

6.4.1 水平对齐

public class HorizontalAlignment
{
    private Worksheet sheet;
    
    /// <summary>
    /// 设置左对齐
    /// </summary>
    public void SetLeftAlign(string range)
    {
        sheet.SetRangeStyles(range, new WorksheetRangeStyle
        {
            Flag = PlainStyleFlag.HorizontalAlign,
            HAlign = ReoGridHorAlign.Left
        });
    }
    
    /// <summary>
    /// 设置居中对齐
    /// </summary>
    public void SetCenterAlign(string range)
    {
        sheet.SetRangeStyles(range, new WorksheetRangeStyle
        {
            Flag = PlainStyleFlag.HorizontalAlign,
            HAlign = ReoGridHorAlign.Center
        });
    }
    
    /// <summary>
    /// 设置右对齐
    /// </summary>
    public void SetRightAlign(string range)
    {
        sheet.SetRangeStyles(range, new WorksheetRangeStyle
        {
            Flag = PlainStyleFlag.HorizontalAlign,
            HAlign = ReoGridHorAlign.Right
        });
    }
    
    /// <summary>
    /// 设置分散对齐
    /// </summary>
    public void SetDistributedAlign(string range)
    {
        sheet.SetRangeStyles(range, new WorksheetRangeStyle
        {
            Flag = PlainStyleFlag.HorizontalAlign,
            HAlign = ReoGridHorAlign.DistributedIndent
        });
    }
}

6.4.2 垂直对齐

public class VerticalAlignment
{
    private Worksheet sheet;
    
    /// <summary>
    /// 设置顶部对齐
    /// </summary>
    public void SetTopAlign(string range)
    {
        sheet.SetRangeStyles(range, new WorksheetRangeStyle
        {
            Flag = PlainStyleFlag.VerticalAlign,
            VAlign = ReoGridVerAlign.Top
        });
    }
    
    /// <summary>
    /// 设置中部对齐
    /// </summary>
    public void SetMiddleAlign(string range)
    {
        sheet.SetRangeStyles(range, new WorksheetRangeStyle
        {
            Flag = PlainStyleFlag.VerticalAlign,
            VAlign = ReoGridVerAlign.Middle
        });
    }
    
    /// <summary>
    /// 设置底部对齐
    /// </summary>
    public void SetBottomAlign(string range)
    {
        sheet.SetRangeStyles(range, new WorksheetRangeStyle
        {
            Flag = PlainStyleFlag.VerticalAlign,
            VAlign = ReoGridVerAlign.Bottom
        });
    }
}

6.4.3 文本换行

public class TextWrapping
{
    private Worksheet sheet;
    
    /// <summary>
    /// 启用文本换行
    /// </summary>
    public void EnableTextWrap(string range)
    {
        sheet.SetRangeStyles(range, new WorksheetRangeStyle
        {
            Flag = PlainStyleFlag.TextWrap,
            TextWrap = TextWrapMode.WordBreak
        });
    }
    
    /// <summary>
    /// 禁用文本换行
    /// </summary>
    public void DisableTextWrap(string range)
    {
        sheet.SetRangeStyles(range, new WorksheetRangeStyle
        {
            Flag = PlainStyleFlag.TextWrap,
            TextWrap = TextWrapMode.NoWrap
        });
    }
}

6.5 样式模板

6.5.1 预定义样式模板

public static class StyleTemplates
{
    /// <summary>
    /// 表头样式
    /// </summary>
    public static WorksheetRangeStyle HeaderStyle => new WorksheetRangeStyle
    {
        Flag = PlainStyleFlag.BackColor | 
               PlainStyleFlag.FontBold | 
               PlainStyleFlag.FontColor | 
               PlainStyleFlag.HorizontalAlign | 
               PlainStyleFlag.VerticalAlign,
        BackColor = Color.FromArgb(68, 114, 196),
        FontColor = Color.White,
        Bold = true,
        HAlign = ReoGridHorAlign.Center,
        VAlign = ReoGridVerAlign.Middle
    };
    
    /// <summary>
    /// 数据行样式
    /// </summary>
    public static WorksheetRangeStyle DataRowStyle => new WorksheetRangeStyle
    {
        Flag = PlainStyleFlag.FontName | PlainStyleFlag.FontSize,
        FontName = "微软雅黑",
        FontSize = 10
    };
    
    /// <summary>
    /// 强调样式
    /// </summary>
    public static WorksheetRangeStyle EmphasisStyle => new WorksheetRangeStyle
    {
        Flag = PlainStyleFlag.BackColor | PlainStyleFlag.FontBold,
        BackColor = Color.Yellow,
        Bold = true
    };
    
    /// <summary>
    /// 错误样式
    /// </summary>
    public static WorksheetRangeStyle ErrorStyle => new WorksheetRangeStyle
    {
        Flag = PlainStyleFlag.BackColor | PlainStyleFlag.FontColor,
        BackColor = Color.FromArgb(255, 199, 206),
        FontColor = Color.FromArgb(156, 0, 6)
    };
    
    /// <summary>
    /// 警告样式
    /// </summary>
    public static WorksheetRangeStyle WarningStyle => new WorksheetRangeStyle
    {
        Flag = PlainStyleFlag.BackColor | PlainStyleFlag.FontColor,
        BackColor = Color.FromArgb(255, 235, 156),
        FontColor = Color.FromArgb(156, 101, 0)
    };
    
    /// <summary>
    /// 成功样式
    /// </summary>
    public static WorksheetRangeStyle SuccessStyle => new WorksheetRangeStyle
    {
        Flag = PlainStyleFlag.BackColor | PlainStyleFlag.FontColor,
        BackColor = Color.FromArgb(198, 239, 206),
        FontColor = Color.FromArgb(0, 97, 0)
    };
}

6.5.2 使用样式模板

public class UseStyleTemplates
{
    public void ApplyTemplates(Worksheet sheet)
    {
        // 应用表头样式
        sheet.SetRangeStyles("A1:E1", StyleTemplates.HeaderStyle);
        
        // 应用数据行样式
        sheet.SetRangeStyles("A2:E100", StyleTemplates.DataRowStyle);
        
        // 应用强调样式
        sheet.SetRangeStyles("C10", StyleTemplates.EmphasisStyle);
        
        // 应用错误样式
        sheet.SetRangeStyles("D20", StyleTemplates.ErrorStyle);
    }
}

6.6 主题与配色方案

6.6.1 专业配色方案

public class ColorSchemes
{
    /// <summary>
    /// 商务配色方案
    /// </summary>
    public static class Business
    {
        public static Color Primary = Color.FromArgb(0, 112, 192);
        public static Color Secondary = Color.FromArgb(68, 114, 196);
        public static Color Accent = Color.FromArgb(255, 192, 0);
        public static Color Light = Color.FromArgb(217, 225, 242);
        public static Color Dark = Color.FromArgb(31, 78, 120);
    }
    
    /// <summary>
    /// 清新配色方案
    /// </summary>
    public static class Fresh
    {
        public static Color Primary = Color.FromArgb(112, 173, 71);
        public static Color Secondary = Color.FromArgb(169, 208, 142);
        public static Color Accent = Color.FromArgb(255, 230, 153);
        public static Color Light = Color.FromArgb(226, 239, 218);
        public static Color Dark = Color.FromArgb(84, 130, 53);
    }
    
    /// <summary>
    /// 暖色配色方案
    /// </summary>
    public static class Warm
    {
        public static Color Primary = Color.FromArgb(237, 125, 49);
        public static Color Secondary = Color.FromArgb(244, 176, 132);
        public static Color Accent = Color.FromArgb(255, 217, 102);
        public static Color Light = Color.FromArgb(252, 228, 214);
        public static Color Dark = Color.FromArgb(192, 80, 77);
    }
}

6.6.2 应用主题

public class ThemeApplication
{
    public void ApplyBusinessTheme(Worksheet sheet)
    {
        // 表头
        sheet.SetRangeStyles("A1:Z1", new WorksheetRangeStyle
        {
            Flag = PlainStyleFlag.BackColor | PlainStyleFlag.FontColor | PlainStyleFlag.FontBold,
            BackColor = ColorSchemes.Business.Primary,
            FontColor = Color.White,
            Bold = true
        });
        
        // 次级表头
        sheet.SetRangeStyles("A2:Z2", new WorksheetRangeStyle
        {
            Flag = PlainStyleFlag.BackColor | PlainStyleFlag.FontColor,
            BackColor = ColorSchemes.Business.Secondary,
            FontColor = Color.White
        });
        
        // 强调单元格
        sheet.SetRangeStyles("E5", new WorksheetRangeStyle
        {
            Flag = PlainStyleFlag.BackColor,
            BackColor = ColorSchemes.Business.Accent
        });
    }
}

6.7 样式工具类

6.7.1 样式辅助方法

public static class StyleHelpers
{
    /// <summary>
    /// 复制样式
    /// </summary>
    public static void CopyStyle(this Worksheet sheet, string sourceRange, string targetRange)
    {
        var sourceStyle = sheet.GetRangeStyles(new RangePosition(sourceRange));
        sheet.SetRangeStyles(targetRange, sourceStyle);
    }
    
    /// <summary>
    /// 清除样式
    /// </summary>
    public static void ClearStyle(this Worksheet sheet, string range)
    {
        sheet.SetRangeStyles(range, WorksheetRangeStyle.Empty);
    }
    
    /// <summary>
    /// 快速设置表头样式
    /// </summary>
    public static void SetAsHeader(this Worksheet sheet, string range)
    {
        sheet.SetRangeStyles(range, new WorksheetRangeStyle
        {
            Flag = PlainStyleFlag.BackColor | 
                   PlainStyleFlag.FontBold | 
                   PlainStyleFlag.HorizontalAlign,
            BackColor = Color.FromArgb(79, 129, 189),
            Bold = true,
            HAlign = ReoGridHorAlign.Center
        });
    }
    
    /// <summary>
    /// 设置只读样式
    /// </summary>
    public static void SetAsReadOnly(this Worksheet sheet, string range)
    {
        sheet.SetRangeStyles(range, new WorksheetRangeStyle
        {
            Flag = PlainStyleFlag.BackColor | PlainStyleFlag.FontColor,
            BackColor = Color.LightGray,
            FontColor = Color.DarkGray
        });
    }
}

6.8 本章小结

本章全面介绍了ReoGrid的样式与外观定制功能,包括字体、背景、边框、对齐等各种视觉效果的设置方法。

📚 下一章预告

第七章将学习公式与计算引擎,了解如何使用内置函数和创建自定义函数。


继续学习第七章:公式与计算引擎!

posted @ 2025-12-31 14:07  我才是银古  阅读(9)  评论(0)    收藏  举报