zoukankan      html  css  js  c++  java
  • C#操作EXCEL之NPOI

     
    命名空间
    using NPOI;
    using NPOI.HPSF;
    using NPOI.HSSF;
    using NPOI.HSSF.UserModel;
    using NPOI.HSSF.Util;
    using NPOI.POIFS;
    using NPOI.Util;
    using NPOI.SS.UserModel;
    using NPOI.SS.Util;
    using NPOI.SS.Formula;
    using NPOI.SS;

    ----------------------------------------------------------------------------------------------------------

     /// <summary>
            /// 将dataTable中所有数据导出至excel
            /// </summary>
            /// <param name="dt">datatable</param>
            /// <param name="savePath">保存路径</param>
            /// <param name="sheetName">表单名称</param>
            private void createExcel(DataTable dt, string savePath, string sheetName)
            {
                if (dt.Rows.Count > 0)
                {
                    HSSFWorkbook workbook = new HSSFWorkbook();
                    HSSFSheet sheet = (HSSFSheet)workbook.CreateSheet(sheetName);
                    //设置标题行样式
                    HSSFFont font = (HSSFFont)workbook.CreateFont();
                    font.Boldweight = 600;

                    HSSFCellStyle styleTitle = (HSSFCellStyle)workbook.CreateCellStyle();
                    styleTitle.SetFont(font);

                    //首先生成标题
                    sheet.CreateRow(0);
                    for (int col = 0; col < dt.Columns.Count; col++)
                    {
                        string colName = dt.Columns[col].ColumnName.Trim();//获取标题名
                        //sheet.CreateRow(0).CreateCell(col).SetCellValue(colName);
                        //IRow row0 = sheet.GetRow(0);
                        sheet.GetRow(0).CreateCell(col).SetCellValue(colName);
                        sheet.GetRow(0).GetCell(col).CellStyle = styleTitle;
                        sheet.SetColumnWidth(col, 28 * 256);//设置列宽

                    }
                    //遍历所有数据并填充
                    for (int row = 0; row < dt.Rows.Count; row++)
                    {
                        int currentRow = row + 1;//因为第0行是标题
                        sheet.CreateRow(currentRow);
                        for (int colC = 0; colC < dt.Columns.Count; colC++)
                        {
                            sheet.GetRow(currentRow).CreateCell(colC).SetCellValue(dt.Rows[row][colC].ToString());
                        }
                    }
                    //保存excel
                    FileStream fileSave = new FileStream(savePath, FileMode.Create);
                    workbook.Write(fileSave);
                    fileSave.Close();
                }
            }

    ---------------------------------------------------------------------------------------------------------------------------------------
    生成图片

    string picSavePath = AppDomain.CurrentDomain.BaseDirectory + "UploadFiles\\EnterpriseLogo\\" + EnterpriseLogo_str;//因为这里是图片的名称,所以直接加上去
                        byte[] bytes = System.IO.File.ReadAllBytes(picSavePath);
                        string extend=EnterpriseLogo_str.Substring(EnterpriseLogo_str.LastIndexOf("."));
                        int pictureIdx = workbook.AddPicture(bytes, PictureType.JPEG);//默认值为jpg
                        if (extend.ToLower() == ".png")
                        {
                            pictureIdx = workbook.AddPicture(bytes, PictureType.PNG);
                        }
                        if (extend.ToLower() == ".emf")
                        {
                            pictureIdx = workbook.AddPicture(bytes, PictureType.EMF);
                        }
                        try
                        {
                            HSSFPatriarch patriarch = (HSSFPatriarch)sheet1.CreateDrawingPatriarch();
                            HSSFClientAnchor anchor = new HSSFClientAnchor(50, 50, 800, 50, 4, 1, 5, 4);//注意这里的参数
                            HSSFPicture pict = (HSSFPicture)patriarch.CreatePicture(anchor, pictureIdx);
                        }
                        catch { }//这里不报错出来

    --------------------------------------------------------------------------------------------------------------

    数据少的下拉列表

     CellRangeAddressList regions_sex = new CellRangeAddressList(2, 2, 3, 3);
                DVConstraint constrain_sex = DVConstraint.CreateExplicitListConstraint(new string[] { "男性", "女性" });
                HSSFDataValidation dataValidate_sex = new HSSFDataValidation(regions_sex, constrain_sex);
                templeteSheet.AddValidationData(dataValidate_sex);

    -------------------------------------------------------------------------------------------------------------

    数据多的下拉列表

     HSSFName rang = (HSSFName)workbook.CreateName();
                string rowcount ="Sheet3!$A$1:$A$"+ DomainsListStr.Length.ToString();
                rang.RefersToFormula = rowcount;
                rang.NameName = "DomainsList";

    CellRangeAddressList regions_domains = new CellRangeAddressList(hang, hang, lie, lie);
                    DVConstraint constrain_domains = DVConstraint.CreateFormulaListConstraint("DomainsList");
                    HSSFDataValidation dataValidate_domains = new HSSFDataValidation(regions_domains, constrain_domains);
                    templeteSheet.AddValidationData(dataValidate_domains);//长于255报错
  • 相关阅读:
    actionscript项目中自加载preloader实现
    as3 弹性跑道模型
    快速排序
    快捷键
    frameset和iframe--框架对象及元素标签对象
    Javascript的陷阱
    JS火狐与IE的差别
    JS运动框架
    面向对象与闭包的使用
    闭包
  • 原文地址:https://www.cnblogs.com/msql/p/2776399.html
Copyright © 2011-2022 走看看