首页C# 正文

EPPlus OfficeOpenXml

时间: 2022年8月24日 浏览 87

view mode
[EpplusTable(AutofitColumns = true, PrintHeaders = true, AutoCalculate = true, ShowTotal = true, ShowFirstColumn = true, ShowLastColumn = true)]
[
    EpplusFormulaTableColumn(Order = 11, NumberFormat = "0.00", Header = "Net Total", Formula = "J2-K2", TotalsRowFunction = RowFunctions.Sum, TotalsRowNumberFormat = "0.00")
]
public class SetReportVM
{
    [EpplusTableColumn(Order = 0, Header = "Sr. No.", NumberFormat = "#")]
    public int SerialNo { get; set; }

    [EpplusTableColumn(Order = 1, Header = "Tran Date", NumberFormat = "dd/MM/yyyy")]
    public DateTime TranDate { get; set; }

    [EpplusTableColumn(Order = 2, Header = "Track Id", NumberFormat = "@")]
    public string TrackId { get; set; }

    [EpplusTableColumn(Order = 3, Header = "Tran Message Id", NumberFormat = "@")]
    public string TranMessageId { get; set; }

    [EpplusTableColumn(Order = 4, Header = "Action Code", NumberFormat = "@")]
    public string ActionCode { get; set; }

    [EpplusTableColumn(Order = 5, Header = "Auth Code", NumberFormat = "@")]
    public string AuthCode { get; set; }

    [EpplusTableColumn(Order = 6, Header = "CardHolder Name", NumberFormat = "@")]
    public string CardHolderName { get; set; }

    [EpplusTableColumn(Order = 7, Header = "Masked Card Number", NumberFormat = "@")]
    public string CardNumber { get; set; }

    [EpplusTableColumn(Order = 8, NumberFormat = "@")]
    public string Currency { get; set; }

    [EpplusTableColumn(Order = 9, NumberFormat = "0.00", TotalsRowFunction = RowFunctions.Sum, TotalsRowNumberFormat = "0.00")]
    public decimal Amount { get; set; }

    [EpplusTableColumn(Order = 10, Header = "Interchange Fees", NumberFormat = "0.00", TotalsRowFunction = RowFunctions.Sum, TotalsRowNumberFormat = "0.00")]
    public decimal InterchangeFees { get; set; }
controller Method;
var SettlementRecords = (from v in _context.VistaReports
                            join m in _context.Merchants
                            on v.MerchantRefId equals m.Id
                            where v.MerchantRefId == exportRecordsVM.MerchantRefId &&
                                    (v.TranDate >= exportRecordsVM.DateFrom && v.TranDate <= exportRecordsVM.DateTo)
                                    && v.Result == "SUCCESS" && v.TerminalRefId==Terminal.Id && v.ActionCode == "1 - Purchase"
                            select new SetReportVM()
                            {
                                TranMessageId = v.TranMessageId,
                                TrackId = v.TrackId,
                                AuthCode = v.AuthCode,
                                ActionCode = v.ActionCode,
                                Amount = v.Amount,
                                Currency = v.Currency,
                                TranDate = v.TranDate,
                                CardHolderName = v.CardHolderName,
                                CardNumber = v.CardNumber,
                                InterchangeFees = (m.ICommissionType == 0 ? m.ICommission : (m.ICommission / v.Amount) * 100)
                            }).ToList();

using (var pck = new ExcelPackage())
{
    var sheet = pck.Workbook.Worksheets.Add("sheet");
    sheet.Cells["A1"].LoadFromCollection(SettlementRecords);

    string fileName = Path.Combine("./Reports", "PGW_Settlement_" + Terminal.TerminalId + "_" + exportRecordsVM.DateFrom.ToString("yyyyMMdd") + exportRecordsVM.DateTo.ToString("yyyyMMdd") + ".csv");
    var file = new FileStream(@fileName, FileMode.Create);

    sheet.Cells[1, 1, sheet.Dimension.End.Row, sheet.Dimension.End.Column].SaveToText(file, new ExcelOutputTextFormat());
    file.Close();
}
[EpplusTable(PrintHeaders = true, AutofitColumns = true, AutoCalculate = true, ShowTotal = true)]
public class SysBase
{
[SugarColumn(IsOnlyIgnoreUpdate = true)]//设置后修改不会有此字段
[JsonProperty(propertyName: "CreateBy")]
[EpplusIgnore]
public string Create_by { get; set; }

[SugarColumn(IsOnlyIgnoreUpdate = true)]//设置后修改不会有此字段
[JsonProperty(propertyName: "CreateTime")]
[EpplusTableColumn(NumberFormat = "yyyy-MM-dd HH:mm:ss")]
public DateTime Create_time { get; set; } = DateTime.Now;

[JsonIgnore]
[JsonProperty(propertyName: "UpdateBy")]
[SugarColumn(IsOnlyIgnoreInsert = true)]
[EpplusIgnore]
public string Update_by { get; set; }

//[JsonIgnore]
[SugarColumn(IsOnlyIgnoreInsert = true)]//设置后插入数据不会有此字段
[JsonProperty(propertyName: "UpdateTime")]
[EpplusIgnore]
public DateTime? Update_time { get; set; }

public string Remark { get; set; }

/// <summary>
/// 搜索时间起始时间
/// </summary>
/// <summary>
/// Write:需穿一个bool值,false时insert,update等操作会忽略此列(和Computed的作用差不多,看了源码也没发现与Computed有什么不一样的地方,有了解的朋友可以赐教下哈)
/// ExplicitKey:指定此列为主键(不自动增长类型例如guid,ExplicitKey与Key地区别下面会详细讲)
/// Key:指定此列为主键(自动增长主键),可忽略,忽略后默认查找
/// [Computed]计算属性,打上此标签,对象地insert,update等操作会忽略此列
/// </summary>
[SugarColumn(IsIgnore = true)]
[JsonIgnore]
[EpplusIgnore]
public DateTime? BeginTime { get; set; }

/// <summary>
/// 用于搜索使用
/// </summary>
[SugarColumn(IsIgnore = true)]
[JsonIgnore]
[EpplusIgnore]
public DateTime? EndTime { get; set; }
}
/// <summary>
/// 导出Excel
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="list"></param>
/// <param name="sheetName"></param>
/// <param name="fileName"></param>
protected string ExportExcel<T>(List<T> list, string sheetName, string fileName)
{
IWebHostEnvironment webHostEnvironment = (IWebHostEnvironment)App.ServiceProvider.GetService(typeof(IWebHostEnvironment));
string sFileName = $"{fileName}{DateTime.Now:MMddHHmmss}.xlsx";
string newFileName = Path.Combine(webHostEnvironment.WebRootPath, "export", sFileName);
//调试模式需要加上
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
Directory.CreateDirectory(Path.GetDirectoryName(newFileName));
using (ExcelPackage package = new(new FileInfo(newFileName)))
{
// 添加worksheet
ExcelWorksheet worksheet = package.Workbook.Worksheets.Add(sheetName);
//单元格自动适应大小
worksheet.Cells.Style.ShrinkToFit = true;
//全部字段导出
worksheet.Cells.LoadFromCollection(list, true, OfficeOpenXml.Table.TableStyles.Light13);
package.Save();
}

return sFileName;
}

/// <summary>
/// 下载导入模板
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="list"></param>
/// <param name="stream"></param>
/// <param name="fileName">下载文件名</param>
/// <returns></returns>
protected string DownloadImportTemplate<T>(List<T> list, Stream stream, string fileName)
{
IWebHostEnvironment webHostEnvironment = (IWebHostEnvironment)App.ServiceProvider.GetService(typeof(IWebHostEnvironment));
string sFileName = $"{fileName}模板.xlsx";
string newFileName = Path.Combine(webHostEnvironment.WebRootPath, "importTemplate", sFileName);
//调试模式需要加上
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
if (!Directory.Exists(newFileName))
{
Directory.CreateDirectory(Path.GetDirectoryName(newFileName));
}
using (ExcelPackage package = new(new FileInfo(newFileName)))
{
// 添加worksheet
ExcelWorksheet worksheet = package.Workbook.Worksheets.Add(fileName);
//单元格自动适应大小
worksheet.Cells.Style.ShrinkToFit = true;
//全部字段导出
worksheet.Cells.LoadFromCollection(list, true, OfficeOpenXml.Table.TableStyles.Light13);
package.SaveAs(stream);
}

return sFileName;
}