Coder Social home page Coder Social logo

excelreport's Introduction

快速入门

ExcelReport是什么?

ExcelReport是一个Excel模板渲染引擎。 它基于关注点分离的理念,将数据与表格样式、字体格式分离。
其中模板承载的表格样式、字体格式在可视化的情况下编辑。开发人员只需要绑定数据与目标标签的对应关系。ExcelReport就可以以数据驱动的方式渲染出目标报表。

模块组成

image.png
ExcelReport家族现在有四个成员。
ExcelReport负责报表的渲染逻辑。ExcelReport.Driver为ExcelReport提供了操作Excel文档的抽象接口。
ExcelReport.Driver.NPOI是使用NPOI对ExcelReport.Driver的实现。支持xls、xlsx两种格式的Excel文档。ExcelReport.Driver.CSV是针对csv格式的Excel文档对ExcelReport.Driver的实现。

渲染模型

image.png
Template:模板承载的表格样式、字体格式、占位标签等。
Render:指定模板标签与数据的关系。
Data:注入模板的数据。整个渲染过程也是数据驱动渲染的。
Output:输出文件

入门示例

  • 步骤一:新建入门项目QuickStart,并引入nuget包:

image.png
image.png

  • 步骤二:创建并编辑模板

image.png
image.png

  • 步骤三:编写代码
internal class Program
{

       private static void Main(string[] args)
       {
           // 项目启动时,添加
           Configurator.Put(".xlsx", new WorkbookLoader());

           var num = 1;
           ExportHelper.ExportToLocal(@"templates\student.xlsx", "out.xlsx",
                   new SheetRenderer("Students",
                       new RepeaterRenderer<StudentInfo>("Roster", StudentLogic.GetList(),
                           new ParameterRenderer<StudentInfo>("No", t => num++),
                           new ParameterRenderer<StudentInfo>("Name", t => t.Name),
                           new ParameterRenderer<StudentInfo>("Gender", t => t.Gender ? "" : ""),
                           new ParameterRenderer<StudentInfo>("Class", t => t.Class),
                           new ParameterRenderer<StudentInfo>("RecordNo", t => t.RecordNo),
                           new ParameterRenderer<StudentInfo>("Phone", t => t.Phone),
                           new ParameterRenderer<StudentInfo>("Email", t => t.Email)
                           ),
                        new ParameterRenderer("Author", "hzx")
                       )
                   );
           Console.WriteLine("finished!");
           Console.ReadKey();
       }
}
public class StudentInfo
{
       public string Name { get; set; }
       public bool Gender { get; set; }
       public string Class { get; set; }
       public string RecordNo { get; set; }
       public string Phone { get; set; }
       public string Email { get; set; }
}
public static class StudentLogic
{
       public static List<StudentInfo> GetList()
       {
           List<StudentInfo> list = new List<StudentInfo>();
           list.Add(new StudentInfo() { Class = "一班", Name = "XXX01", Gender = true, RecordNo = "YYY0001", Phone = "158******01", Email = "[email protected]" });
           list.Add(new StudentInfo() { Class = "二班", Name = "XXX02", Gender = false, RecordNo = "YYY0002", Phone = "158******02", Email = "[email protected]" });
           list.Add(new StudentInfo() { Class = "一班", Name = "XXX03", Gender = true, RecordNo = "YYY0003", Phone = "158******03", Email = "[email protected]" });
           list.Add(new StudentInfo() { Class = "一班", Name = "XXX04", Gender = true, RecordNo = "YYY0004", Phone = "158******04", Email = "[email protected]" });
           return list;
       }
}
  • 输出结果 image.png

更多文章

ExcelReport文档

相关用户组

npoi users group

excelreport's People

Contributors

bryant1410 avatar hanzhaoxin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

excelreport's Issues

性能问题

1000多条数据还是比较正常,4000多条数据 耗时10分钟。

ParameterRenderer的cell修改style后,所有cell都运用了该样式

public override void Render(SheetContext sheetContext, T dataSource)后
Cell cell = sheetContext.GetCell(location) as Cell;
cell.NpoiCell.CellStyle.FillForegroundColor = HSSFColor.Red.Index;
cell.NpoiCell.CellStyle.FillPattern = FillPattern.SolidForeground;
对cell设置底色,但是没设置底色的cell也跟这个设置了底色的cell一样底色了.

库很棒!!

这个库非常棒,如果支持framework 4.5 就更完美了 ,我们现在用只能用在新的netcore 项目上,我们好多老项目无法使用这么好的库。希望能支持下net framework 4.5.谢谢。

新需求?

如果一个sheet里,有页头,OK用cell+part.

接下来是表体,list.OK用table.
那问题来了.如果这时候我还有页脚.
其中又有parameter.这时候就不能正确format了.
因为记录到页脚parameter的point都是旧的.(list 行数未知)

这个问题可能也很常见.可以考虑扩展一下.

效率存在一定问题,且内存方面也有问题

当Repeater列表数据量很大时(测试为将近1w条数据),内存使用极高(过度触发GC),线程阻塞数分钟仍无法完成操作,效率远不及Interop操作(数秒),如图:
1

模板:
keng
已测试此模板少量数据可以正常输出
希望可以解决或告知原因,谢谢

发生意料之外的格式转换

将0传入参数时,似乎会将其自动转为字符格式,覆盖掉我之前在模板中设置的货币格式,导致显示异常。
定位到操作在ParameterRenderer.Render(SheetContext sheetContext) 方法中,不知为何进行了我不需要的CastTo操作,导致异常。

报依赖项错误,帮忙看一下

无法安装程序包“ExcelReport 3.1.3”。你正在尝试将此程序包安装到目标为“.NETFramework,Version=v4.0”的项目中,但该程序包不包含任何与该框架兼容的程序集引用或内容文件。有关详细信息,请联系程序包作者。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.