`

用NPOI把数据库内容导入到Excel中实例(NPOI版本2.0)

 
阅读更多
注意 [url=http://dl.iteye.com/topics/download/add2e1a2-f4a9-339c-889f-acc1f6162031]NPOI版本2.0 [/url]
namespace HLS.PCS.WebSite.Pages
{
    public class NPOIHelper
    {
        #region 变量初始化
        private HSSFWorkbook hssfworkbook;
        private CellStyle titlestyle;
        private CellStyle normalstylename;
        private CellStyle headerstyle;
        private CellStyle normalstylecenter;
        private CellStyle normalstyleleft;
        /// <summary>
        /// /// 初始化
        /// /// </summary>        
        protected void InitializeWorkbook()
        {
            hssfworkbook = new HSSFWorkbook();
            //create a entry of DocumentSummaryInformation
            DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();
            dsi.Company = "NPOI Team";
            hssfworkbook.DocumentSummaryInformation = dsi;

            //create a entry of SummaryInformation
            SummaryInformation si = PropertySetFactory.CreateSummaryInformation();
            si.Subject = "NPOI SDK Example";
            hssfworkbook.SummaryInformation = si;
        }

        /// <summary>
        /// 设置字体
        /// </summary>
        protected void SetFont()
        {
            #region 字体格式
            //标题
            Font titlefont = hssfworkbook.CreateFont();
            titlefont.FontHeight = 20 * 20;
            titlefont.Boldweight = (short)NPOI.SS.UserModel.FontBoldWeight.BOLD;

            titlestyle = hssfworkbook.CreateCellStyle();
            titlestyle.Alignment = HorizontalAlignment.CENTER;
            titlestyle.VerticalAlignment = VerticalAlignment.CENTER;
            titlestyle.SetFont(titlefont);

            //表头
            Font headerfont = hssfworkbook.CreateFont();
            headerfont.FontHeight = 14 * 14;
            headerfont.Boldweight = (short)NPOI.SS.UserModel.FontBoldWeight.BOLD;

            headerstyle = hssfworkbook.CreateCellStyle();
            headerstyle.Alignment = HorizontalAlignment.CENTER;
            headerstyle.VerticalAlignment = VerticalAlignment.CENTER;
            headerstyle.BorderBottom = CellBorderType.THIN;
            headerstyle.BorderLeft = CellBorderType.THIN;
            headerstyle.BorderRight = CellBorderType.THIN;
            headerstyle.BorderTop = CellBorderType.THIN;
            headerstyle.SetFont(headerfont);

            //一般
            Font normalfont = hssfworkbook.CreateFont();
            normalfont.FontHeight = 14 * 14;

            normalstylename = hssfworkbook.CreateCellStyle();
            normalstylename.Alignment = HorizontalAlignment.LEFT;
            normalstylename.VerticalAlignment = VerticalAlignment.CENTER;
            normalstylename.SetFont(normalfont);

            normalstylecenter = hssfworkbook.CreateCellStyle();
            normalstylecenter.Alignment = HorizontalAlignment.CENTER;
            normalstylecenter.VerticalAlignment = VerticalAlignment.CENTER;
            normalstylecenter.BorderBottom = CellBorderType.THIN;
            normalstylecenter.BorderLeft = CellBorderType.THIN;
            normalstylecenter.BorderRight = CellBorderType.THIN;
            normalstylecenter.BorderTop = CellBorderType.THIN;
            normalstylecenter.SetFont(normalfont);

            normalstyleleft = hssfworkbook.CreateCellStyle();
            normalstyleleft.Alignment = HorizontalAlignment.LEFT;
            normalstyleleft.VerticalAlignment = VerticalAlignment.CENTER;
            normalstyleleft.BorderBottom = CellBorderType.THIN;
            normalstyleleft.BorderLeft = CellBorderType.THIN;
            normalstyleleft.BorderRight = CellBorderType.THIN;
            normalstyleleft.BorderTop = CellBorderType.THIN;
            normalstyleleft.SetFont(normalfont);

            #endregion
        }

        /// <summary>
        /// 写入到excel文件
        /// </summary>
        /// <param name="hssfworkbook"></param>
        /// <returns></returns>
        protected MemoryStream WriteToStream(HSSFWorkbook hssfworkbook)
        {
            //Write the stream data of workbook to the root directory
            MemoryStream file = new MemoryStream();
            hssfworkbook.Write(file);
            return file;
        }

        /// <summary>
        /// 文件下载
        /// </summary>
        /// <param name="filename"></param>
        protected void Download(string filename)
        {
            filename = HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8);
            System.Web.HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
            System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", filename));
            System.Web.HttpContext.Current.Response.Clear();
            Open(filename);
            System.Web.HttpContext.Current.Response.BinaryWrite(WriteToStream(hssfworkbook).GetBuffer());
            System.Web.HttpContext.Current.Response.End();
        }
        /// <summary>
        /// 文件打开
        /// </summary>
        /// <param name="FullFileName"></param>
        protected void Open(string FullFileName)
        {
            try
            {
                //FileName--要下载的文件名 
                FileInfo DownloadFile = new FileInfo(FullFileName);
                if (DownloadFile.Exists)
                {
                    System.Web.HttpContext.Current.Response.Clear();
                    System.Web.HttpContext.Current.Response.ClearHeaders();
                    System.Web.HttpContext.Current.Response.Buffer = false;
                    System.Web.HttpContext.Current.Response.ContentType = "application/octet-stream";
                    System.Web.HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(DownloadFile.FullName, System.Text.Encoding.ASCII));
                    System.Web.HttpContext.Current.Response.AppendHeader("Content-Length", DownloadFile.Length.ToString());
                    System.Web.HttpContext.Current.Response.WriteFile(DownloadFile.FullName);
                    System.Web.HttpContext.Current.Response.Flush();
                    System.Web.HttpContext.Current.Response.End();
                }
                else
                {
                    //文件不存在
                }
            }
            catch
            {
                //打开时异常了
            }
        }

        #endregion

        /// <summary>
        /// 创建标题与列对应关系
        /// </summary>
        /// <returns></returns>
        public Dictionary<string, string> createDic()
        {
            Dictionary<string, string> dic = new Dictionary<string, string>();
            if (!dic.ContainsKey("RowNumber"))
            {
                dic.Add("RowNumber", "序号");
            }
            if (!dic.ContainsKey("PCMonth"))
            {
                dic.Add("PCMonth", "回款月份");
            }
            if (!dic.ContainsKey("PCCompany"))
            {
                dic.Add("PCCompany", "公司");
            }
            if (!dic.ContainsKey("ContractNumber"))
            {
                dic.Add("ContractNumber", "合同号");
            }
            if (!dic.ContainsKey("ContractName"))
            {
                dic.Add("ContractName", "合同名称");
            }
            if (!dic.ContainsKey("FirstParty"))
            {
                dic.Add("FirstParty", "甲方");
            }
            if (!dic.ContainsKey("SignDate"))
            {
                dic.Add("SignDate", "签订日期");
            }
            if (!dic.ContainsKey("SignPerson"))
            {
                dic.Add("SignPerson", "签订人");
            }
            if (!dic.ContainsKey("PCDepartment"))
            {
                dic.Add("PCDepartment", "部门");
            }
            if (!dic.ContainsKey("ResponsiblePersonId"))
            {
                dic.Add("ResponsiblePersonId", "回款责任人工号");
            }
            if (!dic.ContainsKey("ResponsiblePersonName"))
            {
                dic.Add("ResponsiblePersonName", "回款责任人");
            }
            if (!dic.ContainsKey("ContractMoney"))
            {
                dic.Add("ContractMoney", "合同额");
            }
            if (!dic.ContainsKey("Currency"))
            {
                dic.Add("Currency", "币别");
            }

            if (!dic.ContainsKey("ReceivedMoney"))
            {
                dic.Add("ReceivedMoney", "已收款");
            }

            if (!dic.ContainsKey("TransitAccount"))
            {
                dic.Add("TransitAccount", "未收款");
            }
            if (!dic.ContainsKey("PCPossibility"))
            {
                dic.Add("PCPossibility", "回款可能性");
            }
            if (!dic.ContainsKey("MonthPromisePC"))
            {
                dic.Add("MonthPromisePC", "本月承诺回款");
            }
            if (!dic.ContainsKey("NoPromiseReason"))
            {
                dic.Add("NoPromiseReason", "未承诺原因");
            }
            if (!dic.ContainsKey("Remark"))
            {
                dic.Add("Remark", "备注");
            }    
            return dic;
        }

        /// <summary>
        /// 导出到excel
        /// </summary>
        public void Export(DataSet ds)
        {
            InitializeWorkbook();
            SetFont();
            Sheet sheet = hssfworkbook.CreateSheet("单据信息");
            sheet.DisplayGridlines = false;
            #region 设置列宽
            sheet.SetColumnWidth(0, 6 * 256);
            sheet.SetColumnWidth(1, 24 * 256);
            sheet.SetColumnWidth(2, 16 * 256);
            sheet.SetColumnWidth(3, 16 * 256);
            sheet.SetColumnWidth(4, 16 * 256);
            sheet.SetColumnWidth(5, 16 * 256);
            sheet.SetColumnWidth(6, 30 * 256);
            sheet.SetColumnWidth(7, 30 * 256);
            sheet.SetColumnWidth(8, 10 * 256);
            sheet.SetColumnWidth(9, 16 * 256);
            sheet.SetColumnWidth(10, 50 * 256);
            #endregion
            Row r;
            Cell cell;
            CellRangeAddress region;
            Dictionary<string, string> dic = createDic();        
            r = sheet.CreateRow(0);
            r.HeightInPoints = 18;          
            int itt = 0;
            foreach (var item in dic.Values)
            {
                cell = r.CreateCell(itt);
                cell.SetCellValue(item);
                cell.CellStyle = headerstyle;
                itt++;
            }

            if (ds != null && ds.Tables.Count != 0)
            {
                DataTable dt = ds.Tables[0];
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    r = sheet.CreateRow(i + 1);
                    r.HeightInPoints = 18;

                    int j = 0;
                    string typename = "";
                    foreach (KeyValuePair<string, string> keyValue in dic)
                    {
                        cell = r.CreateCell(j); //序号
                        string colname = keyValue.Key;
                        if (colname == "Type")
                        {
                            typename = dt.Rows[i][colname].ToString();
                        }
                        if (typename == "补考勤单" || typename == "撤销单" || typename == "销假单")
                        {
                            if (colname == "HStart" || colname == "HEnd")
                            {
                                cell.SetCellValue(dt.Rows[i][colname].ToString().Split(' ')[0]);
                            }
                            else if (colname == "daydiff")
                            {
                                cell.SetCellValue("");
                            }
                            else
                            {
                                cell.SetCellValue(dt.Rows[i][colname].ToString());
                            }
                        }
                        else
                        {
                            cell.SetCellValue(dt.Rows[i][colname].ToString());
                        }
                        cell.CellStyle = normalstylecenter;
                        j++;
                    }
                }
            }
            string filename = "单据查询结果.xls";
            Download(filename);

        }
    }
}
分享到:
评论

相关推荐

    C#通过NPOI库操作Excel,并将Excel数据导入Mysql数据库(自动建表)

    内容概要:本资源介绍了如何从利用Npoi库操作Excel,如相关读取单元格、行,介绍了如何对单元格数据格式进行操作,并分享了如何将Datatable数据导入Mysql数据库,方便项目管理。 阅读建议:此资源以如何读取Excel...

    npoi 2.0 适用于.netframework2.0版本

    这使得那些无法或不愿意升级到更高版本.NET Framework的开发者也能利用NPOI的功能。 NPOI 2.0主要提供了以下功能: 1. Excel处理: - 创建和读取XLS和XLSX格式的工作簿:NPOI允许开发者创建新的Excel工作簿,以及...

    NPOI2.0官方版本

    这个“NPOI2.0官方版本”是该库的一个重要更新,允许开发者在不依赖Microsoft Office软件环境的情况下,进行文档的读取和写入操作。NPOI构建于.NET框架之上,因此它适用于基于.NET的应用程序,无论是Windows、Linux...

    NPOI_数据库导入导出Excel运用Excel

    利用NPOI组件,将数据库中表,或查询结果导出Excel以及将Excel中数据导入到数据库中

    NPOI 1.2.5 专为.net 2.0 ,excel2003开发,.net4.0,excel2007 请用npoi 2以上的

    在标题和描述中提到的"NPOI 1.2.5"是该库的一个特定版本,它主要针对.NET 2.0框架以及Excel 2003进行优化。这个版本可能不支持.NET 4.0及以上版本或者Excel 2007及更高版本的高级特性,因为这些新版本的Office文件...

    NPOI和EPPlus实现.NET的Excel导入导出操作(类库+操作类+实例)

    NPOI和EPPlus实现.NET的Excel导入导出操作(类库+操作类+实例) NPOI实现.NET的Excel导入导出功能,EPPlus实现Excel的导出单个和多个Worksheet操作;可兼容各种版本的 Office 和 WPF 文件的打开,简单实用,里面有...

    ASP.NET/C# 使用NPOI 将数据导入到模板Excel[支持xlsx][源代码]

    本文将深入探讨如何使用NPOI将数据导入到模板Excel中,特别关注对.xlsx格式的支持。 首先,NPOI是一个开源的.NET库,它实现了Apache POI API的功能,使得.NET开发者能够与Microsoft Office文档进行交互。NPOI提供了...

    NPOI2.0 Excel操作插件

    开发者可以方便地将数据库中的数据导出到Excel,或者将Excel中的数据导入到数据库,这对于数据迁移、备份和分析非常实用。 4. **Word文档操作**:除了Excel,NPOI还支持对Word文档的基本操作,如读取、写入和修改...

    npoiDLLEXCEL导入到数据库数据表导入到EXCEL

    标题 "npoiDLLEXCEL导入到数据库数据表导入到EXCEL" 涉及到的主要技术是使用NPOI库处理Excel文件,并进行数据的导入与导出操作。NPOI是一个开源的.NET库,它允许开发人员在不依赖Microsoft Office的情况下读写Excel...

    npoi下载 .net 2.0和4.0版本下载

    标题提到的“npoi下载 .net 2.0和4.0版本下载”意味着我们有适用于.NET Framework 2.0和4.0的NPOI DLL文件,这些预编译的库可以直接集成到你的项目中,避免了自行编译的繁琐步骤。 NPOI的核心功能包括: 1. **...

    Npoi操作Excel,2.0版本和4.0版本

    本教程将深入探讨Npoi在处理Excel时的2.0版本和4.0版本的区别及其应用。 **1. Npoi 2.0版本** Npoi 2.0是项目的一个早期版本,主要支持Excel 2003及以下的Biff8格式(.xls),同时也初步支持了Excel 2007及以后的...

    NPOI 2.0 dotnet binary

    5. **兼容性**:NPOI支持.NET Framework 2.0到4.x版本,这意味着它可以在较旧的.NET环境中运行,这对于维护旧项目或有特定环境需求的项目非常有用。 6. **其他功能**:除了基本操作,NPOI还支持高级特性,如样式和...

    npoi 2.0 可操作office2007的word和excel 不用装office软件

    在标题和描述中提到的“npoi 2.0”,是指这个库的2.0版本,它允许开发者在不安装Microsoft Office的情况下,对Office 2007及更高版本的文件进行读写操作。这对于那些希望在服务器端或者没有安装Office环境的系统中...

    C# 使用npoi导入excel 并使用xml做数据验证

    VS2012创建项目,这个是使用C#语言npoi2.1.3.0导入excel到数据库中,同时使用了xml对excel的每个单元格数据进行了非空验证。经测试,导入成功。数据库写入部分请自己完成。有问题请留言。已经在项目中运中复杂多表头...

    NPOI Excel导入导出 支持.net2.0-.net4.5

    它在.NET平台上提供了对Excel文件的读写功能,支持从.NET 2.0到.NET 4.5的多个版本,使得开发者能够在各种.NET环境中进行Excel数据的导入和导出操作。 在.NET框架的早期版本中,微软提供的内置类库对Excel的支持并...

    NPOIexcel导入导出

    在NPOI中,Workbook代表一个Excel文件,可以包含多个Sheet。Sheet则对应Excel中的工作表,每个Sheet可以包含多行(Row)和多列(Cell)。 5. **行(Row)和单元格(Cell)** Row对象代表Excel中的一行,而Cell...

    c# NPOI 数据库表格导出EXCEL(包含2个实例及2.0和4.0dll)

    这个压缩包提供了两个实例,分别展示了如何使用NPOI进行Excel数据的导入和导出,同时包含了适用于.NET Framework 2.0和4.0的不同版本的dll文件。 1. **NPOI的基本概念**: - **NPOI API**:NPOI提供了一系列接口和...

    NPOI适用于.net2.0到.net4.5

    NPOI是一个强大的开源库,专门用于.NET框架2.0至4.5版本,使得开发者能够轻松地在Visual Studio环境中处理Microsoft Office文档,尤其是Word和Excel。这个库提供了丰富的API,使得无需安装Office软件,就能在.NET...

    可用的NPOI 2.0 插件

    NPOI很早就出名了,但是一直以为第三方的不可能有微软的效率高,所以一直都用COM来处理EXCEL。直到某天处理一个大量数据的EXCEL,发现NPOI生成的数据几乎是1秒内就完成了,比传统方法快了几百倍。惊喜万分,开始学习...

Global site tag (gtag.js) - Google Analytics