如何在NPOI中实现宽度自适应和高度自适应

由于系统需要在网页上导 出Excel文件,最近花了一段时间去学习NPOI插件。通过NPOI插件在服务端来生成Excel文件流并下载到本地。NPOI实际上和Excel一毛 钱关系都没有,它只是完全破译了Excel文件的存储格式,并用C#来生成同样的格式从而被识别为Excel文件。 NPOI和Excel VBA相比优点很多,首先是Excel VBA中的对象太多,而且是基于Visual Basic语言来书写,而且是在Excel中进行编程开发,IDE十分原始,没有任何的智能感知和代码着色功能。(最近可以在VS进行VBA开发了) 抛开这些不说,微软官方是不建议在服务器端来操作Excel的。原话好像是不建议用asp,asp.net等无人的方式来使用Excel。而且最要命的是 VBA方式来操作Excel后,其进程很难释放干净。在桌面端生成一两个文件倒无所谓,后台多跑两个Excel也不是啥大事。但在服务器端多用户操作,很 有可能会出现死锁等问题。 NPOI是从JAVA的POI移植而来,使用方式非常自然。 但是我发现在NPOI中实现宽度和高度自适应很难,宽度和高度自适应,说简单点就是如何让宽度和高度刚刚好。不让内容被遮挡,使用者在下载表格后不需要手工调整。 NPOI有一个宽度自适应属性,可惜只对英文和数字有效,对汉字无效。后来在一个台湾博客上发现了一段解决代码,我稍加改造后如下:

  columnNum是列号,从0开始循环到表格最后一列,循环的范围可以自己指定,原理很简单,就是在先循环列,在列上循环行,比对行内容宽度与列宽度,若行内容宽度大于列宽则增大列宽,循环以后,每列宽度等于该列中最宽的那一行的宽度。 值得注意的是使用UTF8编码来计算的,在UTF8编码中数字和英文字母宽度为2,汉字宽度为3。而且字号越小,其效果就越好。在实际使用中内容为10磅的时候,其效果就相当不错。 仅仅有宽度自适应是不够的,宽度自适应只是针对较短的内容而言的,如果单元格内容很长采用这个方法会将表格拉的非常宽。下面来谈一谈高度自适应解决方法, 高度自适应是指内容换行后行高能够自动增加以完整的显示内容,高度自适应是我自己想出来的,和宽度自适应很类似:

首先要设置该列能够自动换行,然后将行高设置为20,获得列内容宽度后整除一个列宽常数,将其倍数乘以行高,从而增加行高。值得注意的是这个常数需要自己 测试,因为实际内容都是英文、数字和汉字混杂的,很难判断一行能容纳多少个字符,只能取一个中间值,如果取的太大可能会造成行高小于内容,取的过小会造成 行高过大而内容较少。而且在字磅数较小时精度较好。 转载于:https://www.cnblogs.com/nearpengju123/p/4112935.html from:https://blog.csdn.net/weixin_30846599/article/details/99535103?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-99535103-blog-51893264.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-99535103-blog-51893264.pc_relevant_default&utm_relevant_index=2

龙生   20 May 2022
View Details

使用NPOI导出Excel 并设置Excel样式(合并单元格、行高、宽度、字体、边框、位置)

1、添加对NPOI的引用 2、创建excel文件对象 HSSFWorkbook wb = new HSSFWorkbook(); 3、创建 工作表,也就是Excel中的sheet,给工作表赋一个名称 title HSSFSheet sheet = (HSSFSheet)wb.CreateSheet(title); 4、设置某一列宽度 sheet.SetColumnWidth(0, 10 * 256); 列号从0开始 5、合并单元格 例: 第1行到第2行 第3列到第4列围成的矩形区域 sheet.AddMergedRegion(new CellRangeAddress(0, 1, 2, 3)); 合并单元格后,只需对第一个位置赋值即可 6、在工作表中创建一行 /// <summary> /// 创建行 /// </summary> /// <param name="wb"></param> /// <param name="sheet"></param> /// <param name="rowNum">创建 一行 的行号 从0开始</param> /// <param name="rowHeigh">行高</param> public HSSFRow CreateRow(HSSFSheet sheet, int rowNum, float rowHeight) { HSSFRow row = (HSSFRow)sheet.CreateRow(rowNum); //创建行 row.HeightInPoints = rowHeight; //设置列头行高 return row; } 7、设置单元格样式 /// <summary> /// 设置样式 /// </summary> /// <param name="wb"></param> /// <param name="hAlignment">水平布局方式</param> /// <param name="vAlignment">垂直布局方式</param> […]

龙生   20 May 2022
View Details

MySQL查询数据时自动生成序号

在某些特定条件下,从数据库中查寻List数据的时候,需要给每组数据带上一个key序号。具体实现代码如下:

  from:https://blog.csdn.net/weixin_41848005/article/details/123867009

龙生   20 May 2022
View Details

npm install出现error MSB3428:Could not load the Visual C++ component VCBuild.exe错误

    我们在windows平台上运行npm install安装依赖的时候,会出现需要vcbuild环境,如下截图所示,根据提示解决办法是指定系统安装的vcbuild到环境变量的path中。 解决办法就是通过npm全局安装windows-build-tools模块,还需要加上参数--production。 安装成功的打印信息: 安装过程会下载一个python2.7的环境,最后会在用户根目录生成一个.windows-build-tools目录。 .windows-build-tools目录中的内容如下 截图所示: 当我们再次进行npm install安装某些依赖的时候,就不会再报无法加载VCBuild.exe组件错误了。   from:https://blog.csdn.net/feinifi/article/details/104655415

龙生   05 May 2022
View Details

干货 | 我们接种的新冠疫苗到底属于哪种类型呢?

随着新冠肺炎在全球蔓延,人类对新冠肺炎病毒疫苗的开发也加快了进程。不少公司研发的新冠疫苗纷纷上市或被世卫组织批准授权紧急使用。那么,不同疫苗的优劣在哪里?我们打过的疫苗都属于哪类疫苗呢?接下来小编将会为你一一解答不同的疫苗的研发原理以及市面上常见疫苗所属的种类。
疫苗的种类根据不同的生产流程,可分为以下六大类:灭活疫苗、减毒活疫苗、类毒素疫苗、亚单位疫苗、mRNA疫苗和病毒载体疫苗。

龙生   30 Apr 2022
View Details

ASP.NET Core解决Value cannot be null. (Parameter ‘configure‘)错误

一、问题描述
运行配置了权限内容的ASP.NET Core3.1 WebApi项目提示错误信息: Value cannot be null. (Parameter 'configure')

二、问题分析
根据错误信息提示,我们可以知道当前错误时由于’configure’参数的值为空引起的,又由于我们配置了权限内容,且我们的项目是.NET Core3.1项目,所以我们需要检查我们使用的权限包是否为.NET Core3.1的权限包。

三、解决办法
检查项目中权限用到的的nuget包【Microsoft.AspNetCore.Authorization】是否与项目版本匹配,如果不是与项目.NET Core3.1的版本一致,则先移除当前项目的权限nuget包,然后重新安装【Microsoft.AspNetCore.Authorization】3.1.9版本的Nuget权限包即可。

龙生   29 Apr 2022
View Details

SpringBoot之整合Shiro(最详细)

SpringBoot整合Shiro思路

龙生   28 Apr 2022
View Details

Maven编译报错“Please refer to dump files (if any exist) [date].dump, [date]-jvmRun[N].dump and [date].dumpstream.”

使用maven进行打包 install package时报错   解决一:临时手动操作 maven的编译打包检查:关闭点一下就可以了,忽略检查测试文件   解决二:pom.xml配置

  from:https://www.cnblogs.com/SparkMore/p/15919302.html

龙生   28 Apr 2022
View Details

.NET Core 下使用 Apollo 配置中心

Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。

龙生   28 Apr 2022
View Details
1 2 390