在使用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中获取设置好的字体和单元格样式:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NPOI.SS.UserModel;
using NPOI.HSSF.UserModel; namespace GenerateResult
{
class CellStyleHandle2
{
IWorkbook workBook ;
IFont defaultFont;
ICellStyle defaultCellStyle;
ICellStyle defaultCellStyleCenter;
ICellStyle defaultCellStyleRight; IFont defaultFontColor;//蓝色
ICellStyle defaultCellStyleRightColor;//蓝色 public CellStyleHandle2(IWorkbook workBook)
{
this.workBook = workBook;
} public IFont getDefaultFont()
{
if (null == defaultFont)
{
defaultFont = workBook.CreateFont();//内容输出用
//设置字体加粗样式
defaultFont.FontName = "宋体";
defaultFont.IsBold = false;
defaultFont.FontHeightInPoints = ;
defaultFont.Color = ;
}
return defaultFont;
} public ICellStyle getDefaultCellStyle()
{
if (null == defaultCellStyle)
{
defaultCellStyle = workBook.CreateCellStyle();
defaultCellStyle.Alignment = HorizontalAlignment.Left;
defaultCellStyle.VerticalAlignment = VerticalAlignment.Center;
defaultCellStyle.WrapText = true; ////使用SetFont方法将字体样式添加到单元格样式中
defaultCellStyle.SetFont(getDefaultFont());
}
return defaultCellStyle;
} public ICellStyle getDefaultCellStyleCenter()
{
if (null == defaultCellStyleCenter)
{
defaultCellStyleCenter = workBook.CreateCellStyle();
defaultCellStyleCenter.Alignment = HorizontalAlignment.Center;
defaultCellStyleCenter.VerticalAlignment = VerticalAlignment.Center;
defaultCellStyleCenter.WrapText = true; ////使用SetFont方法将字体样式添加到单元格样式中
defaultCellStyleCenter.SetFont(getDefaultFont());
}
return defaultCellStyleCenter;
} public ICellStyle getDefaultCellStyleRight()
{
if (null == defaultCellStyleRight)
{
defaultCellStyleRight = workBook.CreateCellStyle();
defaultCellStyleRight.Alignment = HorizontalAlignment.Right;
defaultCellStyleRight.VerticalAlignment = VerticalAlignment.Center;
defaultCellStyleRight.WrapText = true; ////使用SetFont方法将字体样式添加到单元格样式中
defaultCellStyleRight.SetFont(getDefaultFont());
}
return defaultCellStyleRight;
} public IFont getDefaultFontColor()
{
if (null == defaultFontColor)
{
defaultFontColor = workBook.CreateFont();//内容输出用
//设置字体加粗样式
defaultFontColor.FontName = "宋体";
defaultFontColor.IsBold = false;
defaultFontColor.FontHeightInPoints = ;
defaultFontColor.Color = ;
}
return defaultFontColor;
} public ICellStyle getDefaultCellStyleRightColor()
{
if (null == defaultCellStyleRightColor)
{
defaultCellStyleRightColor = workBook.CreateCellStyle();
defaultCellStyleRightColor.Alignment = HorizontalAlignment.Right;
defaultCellStyleRightColor.VerticalAlignment = VerticalAlignment.Center;
defaultCellStyleRightColor.WrapText = true; ////使用SetFont方法将字体样式添加到单元格样式中
defaultCellStyleRightColor.SetFont(getDefaultFontColor());
}
return defaultCellStyleRightColor;
}
}
}

只针对当前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. Java面试题:Hibernate的二级缓存与Hibernate多表查询

    我们来看两个有关Java框架之Hibernate的面试题,这是关于Hibernate的常考知识点. 1.请介绍一下Hibernate的二级缓存 解题按照以下思路来回答: (1)首先说清楚什么是缓存: ...

  2. [Swift]LeetCode131. 分割回文串 | Palindrome Partitioning

    Given a string s, partition s such that every substring of the partition is a palindrome. Return all ...

  3. [Swift]LeetCode898. 子数组按位或操作 | Bitwise ORs of Subarrays

    We have an array A of non-negative integers. For every (contiguous) subarray B = [A[i], A[i+1], ..., ...

  4. IP地址个数的计算原理

    IP注释: IP地址(Internet Protocol Address),缩写为IP Adress,是一种在Internet上的给主机统一编址的地址格式,也称为网络协议(IP协议)地址. 它为互联网 ...

  5. 论JVM爆炸的几种姿势及自救方法,你不得不知!

    前言 如今不管是在面试还是在我们的工作中,OOM总是不断的出现在我们的视野中,所以我们有必要去了解一下导致OOM的原因以及一些基本的调整方法,大家可以通过下面的事例来了解一下什么样的代码会导致OOM, ...

  6. [SDOI2018] 旧试题

    推狮子的部分 \[ \sum_{i=1}^A\sum_{j=1}^B\sum_{k=1}^C\sigma(ijk) =\sum_{i=1}^A\sum_{j=1}^B\sum_{k=1}^C\sum_ ...

  7. javascript 常见数组操作( 1、数组整体元素修改 2、 数组筛选 3、jquery 元素转数组 4、获取两个数组中相同部分或者不同部分 5、数组去重并倒序排序 6、数组排序 7、数组截取slice 8、数组插入、删除splice(需明确位置) 9、数组遍历 10、jQuery根据元素值删除数组元素的方)

    主要内容: 1.数组整体元素修改 2. 数组筛选 3.jquery 元素转数组 4.获取两个数组中相同部分或者不同部分 5.数组去重并倒序排序 6.数组排序 7.数组截取slice 8.数组插入.删除 ...

  8. Ocelot监控

    网关的作用之一,就是有统一的数据出入口,基于这个功能,我们可以在网关上配置监控,从而把所有web服务的请求应答基本数据捕获并展显出来.关于web的监控,一般的做法是采集数据并保存,然后通过图表的方式展 ...

  9. ADO.NET五大对象详解

    Connection 连接对象 用于对数据库的连接操作.传入的参数为连接字符串. Commamd 命令对象 用于执行对数据库的操作 ,传入的参数可以为连接字符串或存储过程,也必须传入连接对象的实例. ...

  10. SQL数据库连接语句

    一般的远程访问的写成这样: Data Source=IP ;Initial Catalog=数据库名 ;UserID= 用户名 ;Password=密码 本地访问的写成这样: Data Source= ...