用aspose.excel 组件完成导出、打印等复杂工作

本文详细介绍Aspose.Excel组件的使用方法,包括创建Excel帮助类、实现数据导出及打印功能,并提供具体代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:aspose.excel组件是一款做复杂excel的强大工具,比其他的excel组件有更多优势,最近做导出、打印被折磨的死去活来,在网上查很多资料,但是都不是太详细。下面给大家介绍怎样用这个神奇的组件。

第一步:下载一个aspose.excel组件 网上这个资料还算多

第二步:添加引用    在解决方案中-->添加引用->浏览  找到该组件

第三步:写一个excel帮助类(这样在以后的调用中会方便很多)

        如下添加一个名为ExcelController的类:

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

namespace LogicBPL.Bpl
{
    public class ExcelController : IDisposable
    {
       
        private Aspose.Excel.Excel _excel = null;
        private Aspose.Excel.Worksheet _activeSheet = null;

        public bool OpenDoc(string fileName)
        {
            Aspose.Excel.License lic = new Aspose.Excel.License();
            lic.SetLicense((System.IO.Stream)null);

            _excel = new Aspose.Excel.Excel();
            _excel.Open(fileName);

            if (_excel.Worksheets.Count > 0)
                _activeSheet = _excel.Worksheets[0];

            return true;
        }

        public bool OpenDoc(Stream stream)
        {
            Aspose.Excel.License lic = new Aspose.Excel.License();
            lic.SetLicense((System.IO.Stream)null);

            _excel = new Aspose.Excel.Excel();
            _excel.Open(stream);

            if (_excel.Worksheets.Count > 0)
                _activeSheet = _excel.Worksheets[0];

            return true;
        }

        public void NewDoc()
        {
            Aspose.Excel.License lic = new Aspose.Excel.License();
            lic.SetLicense((System.IO.Stream)null);


            _excel = new Aspose.Excel.Excel();
            _excel.Worksheets.Add(Aspose.Excel.SheetType.Worksheet);

            _activeSheet = _excel.Worksheets[0];
        }
        /// <summary>
        /// 得到Doc
        /// </summary>
        public Aspose.Excel.Excel Doc
        {
            get { return _excel; }
        }

        /// <summary>
        /// 得到当前 Sheet
        /// </summary>
        public Aspose.Excel.Worksheet ActiveSheet
        {
            get { return _activeSheet; }
        }

        /// <summary>
        /// 另存为
        /// </summary>
        /// <param name="filename">文件名</param>
        /// <returns>保存是否成功</returns>
        public bool SaveAs(string filename)
        {
            _excel.Save(filename);
            return true;
        }

        /// <summary>
        /// 释放资源
        /// </summary>
        public void Dispose()
        {
        }

        public void SetActiveSheet(int index)
        {
            if (index >= _excel.Worksheets.Count) throw new Exception("Excel Sheet 号超过最大值。");
            _activeSheet = _excel.Worksheets[index];
        }
    }
}

 

下面就开始干正事了(前面也很重要)

 

//-------------------------------导出:--------------------------------------------

 

在click事件中写调用方法:

       protected void btnExport_Click(object sender, EventArgs e)
        {
            Aspose.Excel.Excel excel = Export();  //  调用导出方法 ,真实的项目环境中最好不要把导出方法写在页面上

           // 以下的参数依次为:导出的文件名、导出的excel版本(还可以为其他版本)、保存类型、响应类型(respose会提示客户端是打开还是保存)
            excel.Save("userInfo.xls", Aspose.Excel.FileFormatType.Excel2003, Aspose.Excel.SaveType.OpenInExcel, Response);  // 还有其他的及格方法重载
        }

 

导出方法:

     // 这个方法就体现了写ExcelController类的好处,方便调用

      public static Aspose.Excel.Excel Export() 
        {
            using (ExcelController excel = new ExcelController())  // ExcelController类
            {
              
                IList<UserSysData> userSysCollection = getAll(); // 获得一个要导出的集合 此处为获得一个存储实体类集合的方法(不多讲,不太清楚查资料,不然废话太多)
               
                try
                {
                    excel.NewDoc(); // 打来一个excel, 相当于打开了一个空excel
                    int m = 0;

                    // 往excel里写内容 显示第0行数据
                    excel.ActiveSheet.Cells[0, m++].PutValue("账号");
                    excel.ActiveSheet.Cells[0, m++].PutValue("真实姓名");
                    excel.ActiveSheet.Cells[0, m++].PutValue("工号");
                    excel.ActiveSheet.Cells[0, m++].PutValue("固定电话
                    int index = 1;

                    // 循环实体类集合 从第1行循环往下写
                    foreach (UserSysData userSys in userSysCollection)
                    {
                        m=0;
                        excel.ActiveSheet.Cells[index, m++].PutValue(userSys.Account != null ? userSys.Account : "");
                        excel.ActiveSheet.Cells[index, m++].PutValue(userSys.RelName != null ? userSys.RelName : "");
                        excel.ActiveSheet.Cells[index, m++].PutValue(userSys.JobNumber > 0 ? userSys.JobNumber.ToString() : "");
                        excel.ActiveSheet.Cells[index, m++].PutValue(userSys.Tel != null ? userSys.Tel : "");

                        index++;
                    }
                    return excel.Doc; // 返回一个excel
                }
                finally
                {
                 
                }
                                
            }
        }

 

//-------------------------做完导出下面略讲一下打印(很相似)-------------------------------------------------------

打印的概念:是往excel里写数据,不是连打印机打印

打印通常做法是要有一个模板,然后往模板里写数据。如果要设置打印的页眉和页尾可以在模板上提前设置好,其实页眉也可以通过程序控制(页眉内容不限制),但是没有必要。至于页尾内容不是很多的可以通过直接设置模板即可,如果内容比较多建议也为在模板里面做死,因为程序很难控制(主要是格式)。

如果打印要分页分两种情况:

1:页眉(内容不限制)、页尾内容少 、并且打印内容有规律。 这种情况下直接往里写内容,内容多了自动分页

2:页眉(内容不限制)、页尾内容多 。这种情况适合一个workSheet作为一页

啰嗦一大堆下面是如何打印 代码如下

调用(与导出类似):

       protected void btnExportPrinet_Click(object sender, EventArgs e)
        {
            Aspose.Excel.Excel excel = ExportPrint();  //  调用导出方法 ,真实的项目环境中最好不要把导出方法写在页面上

           // 以下的参数依次为:导出的文件名、导出的excel版本(还可以为其他版本)、保存类型、响应类型(respose会提示客户端是打开还是保存)
            excel.Save("userInfo.xls", Aspose.Excel.FileFormatType.Excel2003, Aspose.Excel.SaveType.OpenInExcel, Response);  // 还有其他的及格方法重载
        }

 

打印方法( 在模板里提前写好页眉、页尾等,这种情况下直接往里写内容,内容多了自动分页):

 public static Aspose.Excel.Excel ExportPrint(SODetailCond cond)
        {
                using (ExcelController excel = new ExcelController())
                {
                    if (!excel.OpenDoc(@“D:/a.xls”)  // 打开模版文件路径 相当于导出的 excel.NewDoc();
                    {
                        throw new SLMSException("print.xls 模板 打开错误!");
                    }
                    try
                    {

                     IList<UserSysData> userSysCollection = getAll();

                        int index = 12;  // 从第12行写数据,具体情况根据自己的模板而定,此处有删减,但是打印的思想就是这样
                        int m = 0;
                     
        
                        excel.SetActiveSheet(0);
    
                        foreach (UserSysData userSys in userSysCollection)
                        {

                            //body
                            m = 0;

                           excel.ActiveSheet.Cells[index, m++].PutValue(index - 11);//序号
                           excel.ActiveSheet.Cells[index, m++].PutValue(userSys.Account != null ? userSys.Account : "");
                           excel.ActiveSheet.Cells[index, m++].PutValue(userSys.RelName != null ? userSys.RelName : "");
                           excel.ActiveSheet.Cells[index, m++].PutValue(userSys.JobNumber > 0 ? userSys.JobNumber.ToString() : "");
                           excel.ActiveSheet.Cells[index, m++].PutValue(userSys.Tel != null ? userSys.Tel : "");

                            index++;
                        }
                    }
                    finally
                    {
                    }
                    return excel.Doc;
                }
            
        }

// 由于时间问题,可能有些地方处理不当,在实际的开发中这样写肯定不合适,像程序控制格式、页眉、或者是复制模板。另一个问题是当数据量大(一个workSheet好像只能存储65536行的数据)的时候必须分WorkSheet或者另启动一个excel 再或者通过压缩的方式解决了

此处就当做一个小实例,供大家参考(终于知道这方面的资料那么少了 ,一个字“累”)

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值