在使用NPOI写入Excel文件的时候出现“它已经超出最多允许的字体数”,查询资料发现是字体创建太多的原因,需要将常用字体创建好,传入CellStyle中。参考(http://www.cnblogs.com/sxdcgaq8080/p/7686895.html)

同时在修改的过程中,设置CellStyle出现了同一行设置不同的单元格格式,但是最后一整行的单元格样式都和最后一个设置的一样的问题。原因是获取cell.CellStyle直接进行设置,这时获取的全局默认的CellStyle也就影响到了其他单元格获取CellStyle进行设置,这就导致最后一个单元格设置的格式成为整行单元格的格式。参考(http://www.cnblogs.com/kingsleylam/p/5361365.html)

一下给我一个在我工程中为了解决这个问题实现的简单的类,用于在当前Workbook中获取设置好的字体和单元格样式:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using NPOI.SS.UserModel;
  6. using NPOI.HSSF.UserModel;
  7.  
  8. namespace GenerateResult
  9. {
  10. class CellStyleHandle2
  11. {
  12. IWorkbook workBook ;
  13. IFont defaultFont;
  14. ICellStyle defaultCellStyle;
  15. ICellStyle defaultCellStyleCenter;
  16. ICellStyle defaultCellStyleRight;
  17.  
  18. IFont defaultFontColor;//蓝色
  19. ICellStyle defaultCellStyleRightColor;//蓝色
  20.  
  21. public CellStyleHandle2(IWorkbook workBook)
  22. {
  23. this.workBook = workBook;
  24. }
  25.  
  26. public IFont getDefaultFont()
  27. {
  28. if (null == defaultFont)
  29. {
  30. defaultFont = workBook.CreateFont();//内容输出用
  31. //设置字体加粗样式
  32. defaultFont.FontName = "宋体";
  33. defaultFont.IsBold = false;
  34. defaultFont.FontHeightInPoints = ;
  35. defaultFont.Color = ;
  36. }
  37. return defaultFont;
  38. }
  39.  
  40. public ICellStyle getDefaultCellStyle()
  41. {
  42. if (null == defaultCellStyle)
  43. {
  44. defaultCellStyle = workBook.CreateCellStyle();
  45. defaultCellStyle.Alignment = HorizontalAlignment.Left;
  46. defaultCellStyle.VerticalAlignment = VerticalAlignment.Center;
  47. defaultCellStyle.WrapText = true;
  48.  
  49. ////使用SetFont方法将字体样式添加到单元格样式中
  50. defaultCellStyle.SetFont(getDefaultFont());
  51. }
  52. return defaultCellStyle;
  53. }
  54.  
  55. public ICellStyle getDefaultCellStyleCenter()
  56. {
  57. if (null == defaultCellStyleCenter)
  58. {
  59. defaultCellStyleCenter = workBook.CreateCellStyle();
  60. defaultCellStyleCenter.Alignment = HorizontalAlignment.Center;
  61. defaultCellStyleCenter.VerticalAlignment = VerticalAlignment.Center;
  62. defaultCellStyleCenter.WrapText = true;
  63.  
  64. ////使用SetFont方法将字体样式添加到单元格样式中
  65. defaultCellStyleCenter.SetFont(getDefaultFont());
  66. }
  67. return defaultCellStyleCenter;
  68. }
  69.  
  70. public ICellStyle getDefaultCellStyleRight()
  71. {
  72. if (null == defaultCellStyleRight)
  73. {
  74. defaultCellStyleRight = workBook.CreateCellStyle();
  75. defaultCellStyleRight.Alignment = HorizontalAlignment.Right;
  76. defaultCellStyleRight.VerticalAlignment = VerticalAlignment.Center;
  77. defaultCellStyleRight.WrapText = true;
  78.  
  79. ////使用SetFont方法将字体样式添加到单元格样式中
  80. defaultCellStyleRight.SetFont(getDefaultFont());
  81. }
  82. return defaultCellStyleRight;
  83. }
  84.  
  85. public IFont getDefaultFontColor()
  86. {
  87. if (null == defaultFontColor)
  88. {
  89. defaultFontColor = workBook.CreateFont();//内容输出用
  90. //设置字体加粗样式
  91. defaultFontColor.FontName = "宋体";
  92. defaultFontColor.IsBold = false;
  93. defaultFontColor.FontHeightInPoints = ;
  94. defaultFontColor.Color = ;
  95. }
  96. return defaultFontColor;
  97. }
  98.  
  99. public ICellStyle getDefaultCellStyleRightColor()
  100. {
  101. if (null == defaultCellStyleRightColor)
  102. {
  103. defaultCellStyleRightColor = workBook.CreateCellStyle();
  104. defaultCellStyleRightColor.Alignment = HorizontalAlignment.Right;
  105. defaultCellStyleRightColor.VerticalAlignment = VerticalAlignment.Center;
  106. defaultCellStyleRightColor.WrapText = true;
  107.  
  108. ////使用SetFont方法将字体样式添加到单元格样式中
  109. defaultCellStyleRightColor.SetFont(getDefaultFontColor());
  110. }
  111. return defaultCellStyleRightColor;
  112. }
  113. }
  114. }

只针对当前Workbook有效。

C# 使用NPOI出现超过最大字体数和单元格格式变成一样的解决的更多相关文章

  1. POI中设置Excel单元格格式样式(居中,字体,边框等)

    创建sheet什么的就不多说了,直接进入正题 HSSFCellStyle cellStyle = wb.createCellStyle();   一.设置背景色: cellStyle.setFillF ...

  2. 【POI】使用POI 创建生成XLS,打开xls文件提示【此文件中某些文本格式可能已经更改,因为它已经超出最多允许的字体数。】

    使用POI 创建生成XLS,打开xls文件提示[此文件中某些文本格式可能已经更改,因为它已经超出最多允许的字体数.] 原因: 是因为在POI处理xls的过程中,太多次调用了: HSSFFont fon ...

  3. Excel,此文件中的某些文本格式可能已经更改,因为它已经超出最多允许的字体数。

    既然是超出最多允许的字体数,那么就不要循环创建IFont.先创建一个IFont font=wk.CreateFont();后面都使用它即可.

  4. oracle超过最大游标数异常分析(转贴)

    问题描述 Oracle 使用 OPEN_CURSORS 参数指定一个会话一次最多可以打开的游标的数量.超过此数量时,Oracle 将报告 ORA-01000 错误.当此错误传播到 WebLogic S ...

  5. springBoot使用PageHelper当超过最大页数后仍然返回数据

    在SpringBoot中使用PageHelper分页插件时,如果设置pagehelper.reasonable=true时,pageNum<=0 时会查询第一页, pageNum>page ...

  6. Vue:列表展开和收起(超过一定行数时显示‘查看更多’按钮)

    前言:前端小白记录的一些小功能~ 公司开发中的小程序中有做任务签到的功能,这就涉及到了任务列表以及对任务列表的展开和收起功能,好了可以开始了,说多了就烦了 1.首先是css样式,因为设计稿上是超过两行 ...

  7. html5文本超过指定行数隐藏显示省略号

    这个很简单,直接贴代码就好了 HTML <span class="name">博客园是一个面向开发者的知识分享社区.自创建以来,博客园一直致力并专注于为开发者打造一个纯 ...

  8. fullpage 单屏高度超过屏幕高度,实现单屏内可以滚动并解决手机端单屏高度不正确的问题

    最近接触了好几次jquery.fullpage.js这个插件,实现整屏的滑动,效果很炫,用fullpage来实现也很简单,但是也碰到了一些问题和大家分享一下 1.单屏高度超过屏幕高度,实现单屏的滑动 ...

  9. 【转载】jxl操作excel 字体 背景色 合并单元格 列宽等 .

    package com.email.jav; import java.io.File;import java.io.IOException;import java.net.URL; import jx ...

随机推荐

  1. [Swift]LeetCode252.会议室 $ Meeting Rooms

    Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s2,e2],...] (si ...

  2. MySQL面试必考知识点:揭秘亿级高并发数据库调优与最佳实践法则

    做业务,要懂基本的SQL语句: 做性能优化,要懂索引,懂引擎: 做分库分表,要懂主从,懂读写分离... 数据库的使用,是开发人员的基本功,对它掌握越清晰越深入,你能做的事情就越多. 今天我们用10分钟 ...

  3. Java高级开发工程师面试笔记

    最近在复习面试相关的知识点,然后做笔记,后期(大概在2018.02.01)会分享给大家,尽自己最大的努力做到最好,还希望到时候大家能给予建议和补充 ----------------2018.03.05 ...

  4. .NET Core实战项目之CMS 第五章 入门篇-Dapper的快速入门看这篇就够了

    写在前面 上篇文章我们讲了如在在实际项目开发中使用Git来进行代码的版本控制,当然介绍的都是比较常用的功能.今天我再带着大家一起熟悉下一个ORM框架Dapper,实例代码的演示编写完成后我会通过Git ...

  5. shell的exec命令

    工作中遇到运维人员挂supervisor的时候建议启动使用命令control.sh start, 并且在control.sh 里面启动命令: exec -c ./bin/xxx -f config/x ...

  6. 从.Net到Java学习第二篇——IDEA and start spring boot

    从.Net到Java学习第一篇——开篇 所谓工欲善其事,必先利其器,做java开发也一样,在比较了目前最流行的几个java IDE(eclipse,myeclipse.IDEA)之后,我果断选择IDE ...

  7. redis 系列10 字符串对象

    一. 字符串对象编码 Redis中字符串可以存储3种类型,分别是字节串(byte string).整数.浮点数.在上章节中讲到字符串对象的编码可以是int, raw,embstr. 如果一个字符串对象 ...

  8. 使用 Jaeger 完成服务间的链路追踪

    世上本没有路,走的人多了,便变成了路 -- 鲁迅     本次讨论的话题就是需要在各个服务之间踏出条"路",让问题有"路"可循. 至于为什么用 jaeger.. ...

  9. 免费报名 | 腾讯云自研数据库CynosDB交流会

    本文由云+社区发表 作者:技术沙龙 All in 云+时代,数据库的高可用性.按需付费.按需扩展等属性解放了大批开发者.腾讯发布的自研数据库CynosDB作为国内首款同时兼容MySQL和PG的云原生数 ...

  10. Docker系列03—Docker 基础入门

    本文收录在容器技术学习系列文章总目录 1.概念介绍 1.1 容器 1.1.1 介绍 容纳其它物品的工具,可以部分或完全封闭,被用于容纳.储存.运输物品.物体可以被放置在容器中,而容器则可以保护内容物. ...