代码改变世界

一个 Aspose.Cells 简单的示例

2013-04-22 17:20  音乐让我说  阅读(948)  评论(1编辑  收藏  举报

Aspose.Cells是一个广受赞誉的电子表格组件,支持所有Excel格式类型的操作,用户无需依靠Microsoft Excel也可为其应用程序嵌入读写和处理Excel数据表格的功能。Aspose.Cells可以导入和导出每一个具体的数据,表格和格式,在各个层面导入图像,应用复杂的计算公式,并将Excel的数据保存为各种格式等等---完成所有的这一切功能都无需使用Microsoft Excel 和Microsoft Office Automation。

首先利用 VS 的 NuGet 获取 Aspose.Cells ,目前最新版是:Aspose.Cells.7.4.2

直接贴代码了:

    public class UserInfo
    {
        public string UserName { get; set; }

        public Guid UserId { get; set; }

        public DateTime DateOfBirth { get; set; }

        public int Age { get; set; } 
    }

    public static class UserInfoRepository
    {
        public static IList<UserInfo> GetAll()
        {
            return new UserInfo[]
            {
                new UserInfo(){ UserId = Guid.NewGuid(), UserName = "张三", Age = 18, DateOfBirth = new DateTime(1985,1,21,12,13,14) },
                new UserInfo(){ UserId = Guid.NewGuid(), UserName = "李四", Age = 19, DateOfBirth = new DateTime(1986,2,22) },
                new UserInfo(){ UserId = Guid.NewGuid(), UserName = "王五", Age = 20, DateOfBirth = new DateTime(1987,3,23,12,13,14) },
                new UserInfo(){ UserId = Guid.NewGuid(), UserName = "赵六", Age = 21, DateOfBirth = new DateTime(1988,4,25,12,13,14) },
                new UserInfo(){ UserId = Guid.NewGuid(), UserName = "杨七", Age = 22, DateOfBirth = new DateTime(1989,5,2) }
            };
        }
    }

    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            ViewBag.Message = "欢迎使用 ASP.NET MVC!";

            return View();
        }

        public ActionResult About()
        {
            Workbook BuildReport_WorkBook = new Workbook();
            Worksheet BuildReport_WorkSheet = BuildReport_WorkBook.Worksheets[0];
            BuildReport_WorkSheet.FreezePanes(1, 1, 1, 0); //冻结第一行
            Cells BuildReportCells = BuildReport_WorkSheet.Cells;

            BuildReportCells[0, 0].PutValue("姓名");
            BuildReportCells[0, 1].PutValue("Id");
            BuildReportCells[0, 2].PutValue("出生年月");
            BuildReportCells[0, 3].PutValue("年龄");


            IList<UserInfo> userInfo = UserInfoRepository.GetAll();
            if(userInfo != null && userInfo.Count > 0)
            {
                int i = 0;
                foreach (UserInfo item in userInfo)
                {
                    int row = i + 1;
                    BuildReportCells[row, 0].PutValue(item.UserName);
                    BuildReportCells[row, 1].PutValue(item.UserId);
                    BuildReportCells[row, 2].PutValue(item.DateOfBirth);
                    BuildReportCells[row, 3].PutValue(item.Age);
                    i++;
                }
            }

            BuildReport_WorkSheet.Name = "users";
            BuildReport_WorkSheet.AutoFitColumns();     //让各列自适应宽度

            MemoryStream ms = new MemoryStream();

            BuildReport_WorkBook.Save(ms, SaveFormat.Excel97To2003);

            return File(ms.ToArray(), "application/octet-stream", "User.xls");
        }
    }

 备注:

您可以封装一个公共的方法,利用泛型,反射要导出的模型类。比如:

void SaveToExcel<T>(IEnumerable<T> items)

SaveToExcel 方法应该有多个重载,比如指定一个或多个要导出的字段,先后顺序(比如:UserId 放在 UserName 的后面),字体颜色等等。最后使用 Lambda 表达式,以便利用强类型指定要导出的字段。

调用的时候:

IList<UserInfo> users = null; //从数据库中读取
SaveToExcel(users);

 最后: NPOI 也是一个不错的选择,您可以研究一下!

谢谢浏览!