[C#] EPPlus套件,产生Excel

一、安装
可于NuGet套件管理员安装EPPlus加入参考

二、建立类别

/// <summary>Excel栏位资料</summary>public class MExcelCell{    /// <summary>栏位内容</summary>    public object Content { get; set; } = = string.Empty;    /// <summary>背景颜色</summary>    public Color BackgroundColor { get; set; } = Color.White;    /// <summary>样式</summary>    public ExcelFillStyle PatternType { get; set; } = ExcelFillStyle.None;    /// <summary>数字格式</summary>    public string NumberFormat { get; set; } = = string.Empty;    /// <summary>公式</summary>    public string Formula { get; set; } = = string.Empty;    /// <summary>文字水平位置</summary>    public ExcelHorizontalAlignment HorAlign { get; set; } = ExcelHorizontalAlignment.General;}
/// <summary>Excel方法</summary>public class CExcelPackage{    /// <summary>起始列</summary>    public int BeginCell { get; set; }    /// <summary>终点列</summary>    public int EndCell { get; set; }    /// <summary>建立Excel</summary>    private ExcelPackage Epackage = new ExcelPackage();    /// <summary>建立第一个Sheet,后方为定义Sheet的名称</summary>    private ExcelWorksheet Sheet;        /// <summary>加入工作表</summary>    public void AddSheet(List<List<MExcelCell>> Table, string SheetName)    {        //建立一个Sheet,后方为定义Sheet的名称        Sheet = Epackage.Workbook.Worksheets.Add(SheetName);        //内文        for (int col = 0; col < Table.Count; col++)        {            for (int row = 0; row < Table[col].Count; row++)            {                int x = col + 1;                int y = row + 1;                if (!string.IsNullOrEmpty(Table[col][row].Formula))                {                    Sheet.Cells[x, y].Formula = Table[col][row].Formula;                }                else                    Sheet.Cells[x, y].Value = Table[col][row].Content;                if (!string.IsNullOrEmpty(Table[col][row].NumberFormat))                    Sheet.Cells[x, y].Style.Numberformat.Format = Table[col][row].NumberFormat;                if (Table[col][row].PatternType != ExcelFillStyle.None)                    Sheet.Cells[x, y].Style.Fill.PatternType = Table[col][row].PatternType;                if (Table[col][row].BackgroundColor != System.Drawing.Color.White)                    Sheet.Cells[x, y].Style.Fill.BackgroundColor.SetColor(Table[col][row].BackgroundColor);                Sheet.Cells[x, y].Style.Border.BorderAround(ExcelBorderStyle.Thin);            }        }        //自动调整栏宽        for (int i = 1; i <= Table[1].Count; i++)        {            Sheet.Column(i).AutoFit();            Sheet.Column(i).Width += 2;        }        //高度设定        for (int i = 3; i <= Table.Count; i++)        {            Sheet.Row(i).Height = 20;        }        //调整边距        decimal inch = 1M / 2.54M;        Sheet.PrinterSettings.TopMargin = inch;//因为EPPlus单位都是英吋        Sheet.PrinterSettings.LeftMargin = inch;        Sheet.PrinterSettings.RightMargin = inch;        Sheet.PrinterSettings.BottomMargin = inch;        //取得起始列        GetBeginCell();        //取得终点列        GetEndCell();    }    /// <summary>合併储存格</summary>    public void MergeColumn(int row1, int col1, int row2, int col2)    {        Sheet.Cells[row1, col1, row2, col2].Merge = true;    }    /// <summary>设定宽度</summary>    public void ColumnWidth(int col, int value)    {        Sheet.Column(col).Width = value;    }    /// <summary>取得起始列</summary>    public void GetBeginCell()    {        string address = Sheet.Dimension.Address;        string[] cells = address.Split(new char[] { ':' });        BeginCell = Int32.Parse(Regex.Replace(cells[0], "[^0-9]", ""));    }    /// <summary>取得终点列</summary>    public void GetEndCell()    {        string address = Sheet.Dimension.Address;        string[] cells = address.Split(new char[] { ':' });        EndCell = Int32.Parse(Regex.Replace(cells[1], "[^0-9]", ""));    }    /// <summary>指定列文字对齐(目前测试只有套用到2列以上才会生效)</summary>    public void Alignment(string range, ExcelHorizontalAlignment HorAlign = ExcelHorizontalAlignment.Center, ExcelVerticalAlignment VerAlign = ExcelVerticalAlignment.Center)    {        Sheet.Cells[range].Style.HorizontalAlignment = HorAlign;        Sheet.Cells[range].Style.VerticalAlignment = VerAlign;    }    /// <summary>汇出物件资料</summary>    public MemoryStream Export()    {        //因为ep.Stream是加密过的串流,故要透过SaveAs将资料写到MemoryStream,        //在将MemoryStream使用FileStreamResult回传到前端。        MemoryStream fileStream = new MemoryStream();        Epackage.SaveAs(fileStream);        Epackage.Dispose();        //如果这边不下Dispose,建议此ep要用using包起来,        //但是要记得先将资料写进MemoryStream在Dispose。        fileStream.Position = 0;        //不重新将位置设为0,excel开启后会出现错误        //经销商审核资料OR店务资料        return fileStream;    }}

三、使用方法
前端HTML

<form id="formName" action="Export" method="post">    <input type="text" name="Content" value="test"></form>

前端JS

$('#formName').attr('action', 'Export').submit();

后端

public ActionResult ExportSalesReport(String Content){    String fileName = "档案名称";    List<List<MExcelCell>> Table = new List<List<MExcelCell>>();     List<MExcelCell> Row = new List<MExcelCell>();    Row.Add(new MExcelCell {        Content = Content,        PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid,        BackgroundColor = System.Drawing.Color.FromArgb(255, 255, 255),    });    Table.Add(Row);    CExcelPackage cExcelPackage = new CExcelPackage();    cExcelPackage.AddSheet(Table, fileName);        return File(cExcelPackage.Export(),        "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",        $"{FileName}.xlsx");}

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章