添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
飘逸的作业本  ·  mysql datetime ...·  1 年前    · 
腹黑的番茄  ·  WKNavigationDelegate.D ...·  3 年前    · 
本文详细介绍了使用HSSFWorkbook和XSSFWorkbook进行Excel文件导出的技巧,包括如何处理不同版本的Excel文件,解决文件损坏及样式丢失的问题,以及自定义颜色的方法。 摘要生成于 ,由 DeepSeek-R1 满血版支持,

1.HSSFWorkbook针对的是2003版本的excel(xls,支持256列),而XSSFWorkbook针对的是2007版本以上(xlsx,支持更多的列)。
2.升级之后下载文件可能会出现文件已经损坏,是否尝试恢复。出现此问题检查一下Response是否flush并且关闭了。

	Response.Clear()
    Response.ContentType = "application/ms-excel"
    Response.AddHeader("Content-Disposition", String.Format("attachment; filename=test.xlsx"))
    **Response.Flush()
    Response.End()**

3.还有可能出现在将workbook写入到流的时候提示流已经关闭,无法读取。这是因为MemoryStream在workbook写入之后会自动关闭导致无法访问。我们可以添加一个内部类,重写MemoryStream的close方法,在写入之前强制不关闭流,在写入完成之后关闭流。

  				NPOIMemoryStream memoryStream = new NPOIMemoryStream();
  				//写入之前重写close方法,不关闭流
                memoryStream.AllowClose = false;
                workBook.Write(memoryStream);
                memoryStream.WriteTo(outStream);
                //写入之后重写close方法,关闭流
                memoryStream.AllowClose = true;
                memoryStream.Position = 0;
                memoryStream.Flush();
                memoryStream.Close();
                outStream.Close();
 public class NPOIMemoryStream : MemoryStream
            public NPOIMemoryStream()
                AllowClose = true;
            public bool AllowClose { get; set; }
            public override void Close()
                if (AllowClose)
                    base.Close();
  1. 还有可能出现导出的文件样式丢失,比如字体默认大小为1,这时我们需要使用FontHeightInPoints明确的声明一下字体的大小。
  2. HSSFWorkbook自定义颜色可采取如下方式:
    HSSFPalette palette = workbook.GetCustomPalette();
    //第一个参数为索引,后面三个参数为RGB值
    palette.SetColorAtIndex((short)61,0,148,96);
    //根据自定义索引获取自定义颜色
    HSSFColor color = palette.FindColor(61);
    style.FillPattern = FillPattern.SolidForeground;
    style.FillForegroundColor = color.Indexed;

XSSFWorkbook自定义颜色:

XSSFColor color = new XSSFColor();
color.SetRgb(new byte[] { 0, 148, 95 });
style.FillPattern = FillPattern.SolidForeground;
style.FillForegroundColorColor = color;
HSSFWorkbook:
是操作Excel2003以前(包括2003)的版本,扩展名是.xls;导出excel最常用的方式;但是此种方式的局限就是导出的行数至多为65535行,超出65536条后系统就会报错。
XSSFWorkbook:
是操作Excel2007后的版本,扩展名是.xlsx;为了突破HSSFWorkbook的65535行局限。其对应的是excel2007(1048576行,16384列)扩展
平时在工作中,excel导出图片经常会用到,但奈何HSSFWorkbook导出数据数量有限制问题,所以企业里大多都用SXSSFWorkbook格式,很少用HSSFWorkbook。所以今天以这两种格式分别记录下,图片的导出过程。
2HSSFWorkbook
 @Test
    public void excelImageTestHSSFWorkbook1(){
				
HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls XSSFWorkbook:是操作Excel2007的版本,扩展名是.xlsx对于不同版本的EXCEL文档要使用不同的工具类,如果使用错了,会提示如下错误信息。org.apache.poi.openxml4j.exceptions.InvalidOperationExceptionorg.apache.poi.poifs.filesystem.OfficeXmlFileException //创建对Excel.
我们之前使用了POI技术将回货表构造成excel文件输出并打印,但是我们依然遗留了许多的问题,这次我们将使用的POI的HSSF,升级为XSSF。 首先什么是HSSF、XSSF呢?其实它是根据不同的规格提供不同的功能。 HSSF - 提供读写Microsoft Excel格式档案的功能。 XSSF - 提供读写Microsoft Excel OO...
在写导出excel时,第一次测试导出数据使用的HSSFWorkbook,文档后缀.xsl,导出数据在65536行以内,很流畅,很完美~~ 然而,当项目部署到服务器,需要导出数据大于65536行时,报出问题: java.lang.IllegalArgumentException: Invalid row number (65536) outside allowable range (0…65535) 才知道,XSSFWorkbook导出数据行数远大于HSSFWorkbook,于是修改为XSSFWorkbook
excel实现大数据量输出,xlsx是必选格式,目前poi中对xssf消耗内存情况,给出sxssf方法进行处理,但是如果输出格式中包含图形和格式的复杂文本情况,如何有效实现,之前一直没有一个较好的方式; 本文中提出,用hssf接收存储内部数据,在输出时化成sxssf,兼顾存储效率和输出,项目实测中可以达到既定需求,是一个可以借鉴的较好思路。 希望能够对你有所启示。
import org.apache.poi.hssf.usermodel.DVConstraint; import org.apache.poi.hssf.usermodel.HSSFDataValidation; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.xssf.usermodel.XSS...
然后程序又报OutOfMemoryError:java heap space;内存溢出错误,又改用: Workbook writeWB = new SXSSFWorkbook();       Sheet writeSheet = wri