分享三个简练1用的 Excel 导出的类库

 1 #region [ protected ]
 2 
 3         protected abstract TWorkBook CreateWorkBook(bool useOldVersion);
 4 
 5         protected abstract TWorkSheet CreateWorkSheet(TWorkBook workbook, string name, Settings settings);
 6 
 7         protected abstract TCellStyle CreateCellStyle(TWorkBook workbook, TCellStyle style, CellStyle cellStyle);
 8 
 9         protected abstract TCellStyle GetCellStyle(TWorkBook workbook, TWorkSheet sheet, int row, int col);
10 
11         protected abstract void SetCell(TWorkBook workbook, TWorkSheet sheet, int row, int col, Settings settings, ColNode node, object value, TCellStyle style, bool setValue = true, bool setStyle = true);
12 
13         protected abstract void MergeCells(TWorkBook workbook, TWorkSheet sheet, int startRow, int endRow, int startCol, int endCol, Settings settings);
14 
15         protected abstract void FreezePane(TWorkBook workbook, TWorkSheet sheet, int rowSplit, int colSplit);
16 
17         protected abstract void SetColumnsWidth(TWorkBook workbook, TWorkSheet sheet, Settings settings, uint[] widthArray, int startCol);
18 
19         protected abstract void AutoFillColumns(TWorkBook workbook, TWorkSheet sheet, Settings settings, int startCol);
20 
21         protected abstract void Save(TWorkBook workbook, bool useOldVersion, Stream stream);
22 
23         #endregion

这正是说导出的 Excel 格式如下 

 

多少个抽象方法,都很好驾驭,依据章程名很轻易掌握要兑现的效率。

 

肆、使用示例。

Aspose_Cells_ExcelExporter、 NPOI_ExcelExporter 那多个类。

 

DataTable dt = MAIN.Get_Users();

Settings set = new Settings()
            {
                PageSize = 100,
                Name = "",
                ColumnsAutoWidth = true,
                StartColIndex = 1,
                StartRowIndex = 1,
                DataSource = new Lazy<System.Collections.Generic.IEnumerable<SysUser>>(() =>
                {
                    string str = ConfigurationManager.ConnectionStrings["mysql_demo"].ConnectionString;
                    return MAIN.helper.ToEnumerable2<SysUser>("SELECT * FROM SysUser"); //MAIN.Get_Users();
                }),
                FreezeHeader = true,
                //RowStyleGetter = (i, row) => i % 2 == 0 ? CellStyle.Body : new CellStyle() { BgColor = Color.White, FgColor = RandColor() },
                RootNodes = new[]{
                    new ColNode(){
                        Title = "用户列表",
                        ChildColNodes = dt.Columns.Cast<
                            DataColumn>().Select(col => 
                                new ColNode {
                                    Title = col.ColumnName,
                                    Field = col.ColumnName,
                                    MergeField = col.ColumnName
                                }).ToArray()
                    }
                }
            };

IExcelExporter ep = new NPOI_ExcelExporter();

Task task = ep.BuildSheetsAsync(
                new FileStream("./test.xlsx", FileMode.Create, FileAccess.Write),
                new[] { set }, false);

            task.Wait();

用户列表

 

特色如下:

差不多说一下,整个规划吧,

 

已在开源中国开源,有供给的爱人,能够下载,应接拍砖。

一、首先有二个 IExcelExporter 的接口,第二之类:

 

UserName

  1. 可支撑复杂的泛滥成灾表头的导出,表头选用树结构的多少,最后取全部的叶子节点作为数据列。

  2. 支撑
    DataTable、DataSet、IEnumerable、IEnumerable<>、IEnumerable<IDictianry>、IEnumerable<IDictianry<,>>、Lazy<>、Func<>
    等项目作为数据源。

  3. 各种 WorkBook 可导出多少个 Sheet,可自动达成分页导出到区别的 Sheet。

  4. 可对列中接二连3的重复值做统1单元格操作。

  5. 可对单元格的值格式化、设置行列的颜色、宽度等。

1 public interface IExcelExporter
2     {
3         Task BuildSheetsAsync(
4             Stream stream, IEnumerable<Settings> settings_list, bool useOldVersion = false,
5             object hostContext = null);
6     }

此间导出时,作者将表头作为了3个父列,DataTable 的装有列作为子列。

贰、然后有二个抽象类, ExcelExporterBase<TWorkBook, TWorkSheet,
TCellStyle> 达成 IExcelExporter 接口。

ID

 

叁、在切切实实的落到实处中本人用 Aspose.Cells 和 NPOI 分别实现了1套。

Sex

 

 

比方说 SysUser 表结构如下 : ID、UserName、Sex

抽象类里面封装了创立表头、创造表格核心的、合并列中接二连三重复值
等的算法。然后定义了壹部分亟需在子类是促成的肤浅方法。如下:

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图