首页 > 其他分享 >NPOI给模板绑定下拉项

NPOI给模板绑定下拉项

时间:2024-06-18 10:24:12浏览次数:14  
标签:下拉项 sheet NPOI using workbook new ISheet 模板

1、.xlsx后缀模板

使用NPOI版本【v 2.7.0】

using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.SS.Util;
using NPOI.XSSF.UserModel;

/// <summary>
        /// 模板初始化
        /// </summary>
        public void TemplateInit()
        {
            string filePath = System.Web.HttpContext.Current.Request.MapPath("~/Template/设备编码.xlsx");
            string outputPath = System.Web.HttpContext.Current.Request.MapPath("~/Template/设备编码1.xlsx");

            FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);

            XSSFWorkbook workbook = new XSSFWorkbook(fileStream);
            ISheet sheet = workbook.GetSheetAt(0);

            String[] pmsTypeArr = DictDataHelper.GetDictArrayByType(1);
            String[] collectionTypeArr = DictDataHelper.GetDictArrayByType(2);

            // 创建新的Excel工作簿
            //IWorkbook workbook = new XSSFWorkbook();
            //ISheet sheet = workbook.CreateSheet("Sheet1");

            //String[] listOfValues = new String[] { "Item1", "Item2", "Item3" };


            //设置数据源的值
            IDataValidationConstraint dvConstraint1 = sheet.GetDataValidationHelper().CreateExplicitListConstraint(pmsTypeArr);
            //设置编辑的区域
            IDataValidation dataValidation1 = sheet.GetDataValidationHelper().CreateValidation(dvConstraint1, new CellRangeAddressList(2, 6000, 2, 2));

            //设置数据源的值
            IDataValidationConstraint dvConstraint2 = sheet.GetDataValidationHelper().CreateExplicitListConstraint(collectionTypeArr);
            //设置编辑的区域
            IDataValidation dataValidation2 = sheet.GetDataValidationHelper().CreateValidation(dvConstraint2, new CellRangeAddressList(2, 6000, 8, 8));


            sheet.AddValidationData(dataValidation1);
            sheet.AddValidationData(dataValidation2);

            // 写入文件
            using (FileStream stream = new FileStream(outputPath, FileMode.Create, FileAccess.Write))
            {
                workbook.Write(stream);
            }
        }
View Code

 

2、.xls后缀模板

 public static void SetCellDropdownList(HSSFWorkbook workbook, ISheet sheet, string name, int firstcol, int lastcol, string[] vals, int sheetindex = 1)
        {
            //先创建一个Sheet专门用于存储下拉项的值
            ISheet sheet2 = workbook.CreateSheet(name);
            //隐藏
            workbook.SetSheetHidden(sheetindex, true);
            int index = 0;
            foreach (var item in vals)
            {
                sheet2.CreateRow(index).CreateCell(0).SetCellValue(item);
                index++;
            }
            //创建的下拉项的区域:
            var rangeName = name + "Range";
            IName range = workbook.CreateName();
            range.RefersToFormula = name + "!$A$1:$A$" + index;
            range.NameName = rangeName;
            CellRangeAddressList regions = new CellRangeAddressList(0, 65535, firstcol, lastcol);

            DVConstraint constraint = DVConstraint.CreateFormulaListConstraint(rangeName);
            HSSFDataValidation dataValidate = new HSSFDataValidation(regions, constraint);
            dataValidate.CreateErrorBox("输入不合法", "请输入或选择下拉列表中的值。");
            dataValidate.ShowPromptBox = true;
            sheet.AddValidationData(dataValidate);
        }
View Code

调用

HSSFWorkbook workbook = new HSSFWorkbook();
ISheet sheet = workbook.CreateSheet("sheet1");
var roomTypeList = GetRoomTypeNameList();
ExcelHelper.SetCellDropdownList(workbook, sheet, "RoomTypeDictionary", 1, 1, roomTypeList.ToArray());

 

标签:下拉项,sheet,NPOI,using,workbook,new,ISheet,模板
From: https://www.cnblogs.com/chenze-Index/p/18253797

相关文章

  • 创建国民芯片N32G430工程模板教程
    一、文章内容说明对于大部分初学者来说,都习惯性跟着UP主去按部就班创建工程模板然后在进行相关程序模块的编写。但是实际工作中这是一种很费时间也不明智的做法,尽管如此本文还是想要满足一下大部分初学者的心态,确保他们在按部就班的过程中有所依赖,本文就以傻瓜式的方法来说明......
  • 数据结构代码常用模板
    目录线性表顺序表单链表循环单链表栈和队列顺序栈链栈队列树与二叉树二叉树的遍历并查集哈夫曼树串KMP图深度优先搜索与广度优先搜索拓扑排序克洛斯卡尔最小生成树弗洛伊德最短路排序快速排序直接插入排序希尔排序简单选择排序冒泡排序线性表顺序表#include<iostream>#includ......
  • 【C++】模板进阶(特化)
      ......
  • 什么是模板字符串?
    模板字符串(TemplateLiterals)是ES6(ECMAScript2015)中引入的一种新的字符串表示方法,允许我们嵌入表达式,并在运行时将它们转换为字符串。模板字符串使用反引号(```)来定义,而不是传统的单引号(')或双引号(")。模板字符串的主要特点包括:1.嵌入表达式:使用${expression}语法,可以在模板字......
  • 掌握现代C++的模板元编程类型检测技术
    最近写代码恰好用到了C++模板元编程的类型检测能力,以前对其原理有个大概的印象,但随着C++11/C++17等新特性的加入,很多做法和以前不同了,借此机会重新梳理一下这方面的知识点。void_t的引入在C++17之前,模板编程中通常需要编写复杂的部分特化和重载来检测类型特征。C++17......
  • nii转dicom,需要一个同序列dicom图像模板作为参考
    ``importnibabelimportnumpyasnpimportpydicomimportosfromtqdmimporttqdmdefconvertNsave(arr,file_dir,index=0,slice_thickness=1.0,pixel_spacing=(1.0,1.0)):"""`arr`:parameterwilltakeanumpyarraythatreprese......
  • [转]32th@探索C++的模板元编程:揭秘零运行时开销的高性能编程技术@20240616
    C++的模板元编程是一种强大的编程技术,它能够在编译时进行计算,生成高效的代码,而且不需要任何运行时开销。这种技术被广泛应用于高性能计算、游戏开发、金融等领域,是C++程序员必须掌握的技能之一。本文将深入探讨C++模板元编程的原理和实现方式,并通过代码案例来展示其强大的功能。相......
  • 设计模式-模板方法模式
    模板方法模式模板方法模式(TemplateMethodPattern),又叫模板模式,是指定义一个操作中的算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重新定义该算法的默写特定步骤,属于行为型设计模式。模板方法的本质是抽象封装流程,该流程由几个步骤组成,具体步骤可......
  • 首途第三十三套清新简约卡片风格蓝紫渐变色短视频模板 | 苹果CMSV10主题
    下载地址:首途第三十三套清新简约卡片风格蓝紫渐变色短视频模板|苹果CMSV10主题首途第三十三套清新简约卡片风格蓝紫渐变色短视频模板|苹果CMSV10主题我们的简约风格,以纯洁的白色和深邃的紫色为主色调,为您提供了一种清新、时尚的浏览体验。在这个简洁而美丽的界面中,您可以......
  • 自用Beamer模板(英文版)
    \documentclass[aspectratio=43]{beamer}\usetheme{CambridgeUS}\usepackage[fontsize=10pt]{fontsize}%更好看的数学字母\usefonttheme{professionalfonts}%把enumerate前的圆球(bullet)去掉,也就是设置成默认符号就行\setbeamertemplate{enumerateitems}[defaul......