.Net Excel操做之NPOI(二)經常使用操做封裝

1、Excel數據導出經常使用操做html

1.指定表頭和描述數據庫

2.指定數據庫中讀出的數據集合post

2、ExcelExport封裝ui

/// <summary>
/// Excel經常使用的表格導出邏輯封裝
/// 單表寫入
/// </summary>
public class ExcelExport
{
    /// <summary>
    /// 導出的Excel文件名稱+路徑
    /// </summary>
    public string FullName { get; set; }
    /// <summary>
    /// 導出的字段名稱和描述
    /// </summary>
    public Dictionary<string, string> Fields { get; set; }

    private HSSFWorkbook _workbook = null;
    private ISheet _sheet = null;
    /// <summary>
    /// 建立實例,驗證導出文件名
    /// </summary>
    /// <param name="FullName"></param>
    /// <param name="Fields"></param>
    public ExcelExport(string FullName, Dictionary<string, string> Fields)
    {
        this.FullName = FullName;
        this.Fields = Fields;
        Check();
        _workbook = new HSSFWorkbook();
        _sheet = _workbook.CreateSheet("Sheet1");
    }
    /// <summary>
    /// 驗證Excel文件名
    /// </summary>
    private void Check()
    {
        try
        {
            FileInfo info = new FileInfo(this.FullName);
            string[] extentions = new string[] {
                ".xls",
                ".xlsx"
            };
            if (extentions.Any(q => q == info.Extension) == false)
                throw new Exception("excel文件的擴展名不正確,應該爲xls或xlsx");
            if (info.Exists == false)
                info.Create().Close();
        }
        catch (Exception ex)
        {
            throw new Exception("建立Excel文件失敗", ex);
        }
    }

    /// <summary>
    /// 執行導出操做
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="list"></param>
    public void Export<T>(List<T> list)
    {
        //寫入表格頭
        WriteHead();
        //寫入數據
        ICellStyle cellStyle = _workbook.CreateCellStyle();
        cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("@");//爲避免日期格式被Excel自動替換,因此設定 format 爲 『@』 表示一率當成text來看
        cellStyle.BorderBottom = BorderStyle.Thin;
        cellStyle.BorderLeft = BorderStyle.Thin;
        cellStyle.BorderRight = BorderStyle.Thin;
        cellStyle.BorderTop = BorderStyle.Thin;
        cellStyle.VerticalAlignment = VerticalAlignment.Center;
        cellStyle.Alignment = HorizontalAlignment.Center;

        IFont cellFont = _workbook.CreateFont();
        cellFont.Boldweight = (short)FontBoldWeight.Normal;
        cellStyle.SetFont(cellFont);

        //創建行內容,從1開始
        int rowInex = 1;

        foreach (var rowItem in list)
        {
            //建立行
            IRow row = _sheet.CreateRow(rowInex);
            row.HeightInPoints = 25;

            int cellIndex = 0;
            foreach (var cellItem in this.Fields)
            {
                //建立單元格
                ICell cell = row.CreateCell(cellIndex);
                //反射獲取屬性的值
                PropertyInfo info = rowItem.GetType().GetProperty(cellItem.Key);
                if (info == null)
                {
                    cell.SetCellValue($"'{cellItem.Key}'屬性不存在");
                }
                else
                {
                    object value = info.GetValue(rowItem);
                    if (value != null)
                        cell.SetCellValue(value.ToString());
                }
                cell.CellStyle = cellStyle;
                cellIndex++;
            }
            //進入下一次循環
            rowInex++;
        }

        //自適應列寬度
        for (int i = 0; i < this.Fields.Count; i++)
        {
            _sheet.AutoSizeColumn(i);
        }

        //導出到文件
        WriteFile();
    }
    /// <summary>
    /// 寫入表頭
    /// </summary>
    private void WriteHead()
    {
        //設置表頭樣式
        ICellStyle headStyle = _workbook.CreateCellStyle();
        headStyle.BorderBottom = BorderStyle.Thin;
        headStyle.BorderLeft = BorderStyle.Thin;
        headStyle.BorderRight = BorderStyle.Thin;
        headStyle.BorderRight = BorderStyle.Thin;
        headStyle.Alignment = HorizontalAlignment.Center;
        headStyle.FillForegroundColor = HSSFColor.Blue.Index;
        headStyle.VerticalAlignment = VerticalAlignment.Center;

        IFont headFont = _workbook.CreateFont();
        headFont.Boldweight = (short)FontBoldWeight.Bold;
        headStyle.SetFont(headFont);

        IRow row = _sheet.CreateRow(0);
        row.HeightInPoints = 30;

        int index = 0;
        foreach (var item in this.Fields)
        {
            ICell cell = row.CreateCell(index);
            cell.SetCellValue(item.Value);
            cell.CellStyle = headStyle;
            index++;
        }
    }
    /// <summary>
    /// 建立文件到磁盤
    /// </summary>
    private void WriteFile()
    {
        using (FileStream fs = new FileStream(this.FullName, FileMode.OpenOrCreate))
        {
            _workbook.Write(fs);
            fs.Flush();
            fs.Close();
        }
    }
}

3、使用示例this

1.匿名對象集合導出url

Dictionary<string, string> fields = new Dictionary<string, string>();
fields.Add("ID", "主鍵");
fields.Add("Name", "姓名");
fields.Add("Age", "年齡");
fields.Add("Birthday", "生日");
ExcelExport _export = new ExcelExport(LocalPathHelper.GetCurrentData() + "/export1.xls", fields);


List<object> list = new List<object>() {
    new {ID=1,Name="張三丰",Age=20,Birthday=DateTime.Now },
    new {ID=2,Name="王芳",Age=30,Birthday=DateTime.Now }
};
_export.Export(list);

2.List集合導出spa

TestOne _Context = new DBA.TestOne();
List<Member_Info> list = _Context.Member_Info.ToList();
Dictionary<string, string> fields = new Dictionary<string, string>();
fields.Add("MemberID", "主鍵");
fields.Add("code", "帳號");
fields.Add("RealName", "姓名");
fields.Add("IsActive", "是否激活");
fields.Add("commission", "獎金餘額");

//使用
ExcelExport _export = new ExcelExport(LocalPathHelper.GetCurrentData() + "\\export2.xls", fields);
//_export.Export(list);
_export.Export<Member_Info>(list);

 

更多:excel

.Net Excel操做之NPOI(一)簡介code

C#中操做剛導出的Excel,設置其爲自動調整列寬orm

C#操做word封裝

相關文章
相關標籤/搜索