`

使用Apache POI精确设置Excel的行高和列宽

 
阅读更多

EXCEL的行高度和列宽度单位是不一样的。

1,EXCEL列高度的单位是磅,Apache POI的行高度单位是缇(twip):

1英寸=72磅=25.4毫米=1440缇
1磅=0.353毫米=20缇

POI中的行高=Excel的行高度*20

Excel的行高度=POI中的行高/20

 

这里顺便把像素的换行方法说一下:

DPI = 1英寸内可显示的像素点个数。通常电脑屏幕是96DPI, IPhone4s的屏幕是326DPI, 普通激光黑白打印机是400DPI

要计算POI行高或者Excel的行高,就先把它行转换到英寸,再乘小DPI就可以得到像素

像素 = (磅/72)*DPI

像素= (Excel的行高度/72)*DPI

像素= (POI中的行高/20/72)*DPI

Excel的行高度=像素/DPI*72

POI中的行高=像素/DPI*72*20

例如在电脑屏幕上, Excel默认行高度为13.5,  (13.5/72)*96=18像素,而Excel中也确实显示的就是18像素。

 

2,EXCEL列宽度的单位是字符个数

(2014-08-18备注:关于Excel的宽度计算的详细介绍在这篇文章Excel的宽度怎么算的?

在excel2003以上的版本中,可以建立一个空白的xls文档并将第一列宽度拉到10。然后在A1单元格中输入1234567890可以看到单元格正好可以容纳这十个字符。一个字符的宽度是通过测量1234567890这十个字符在默认字体(通常是宋体11号字,视版本可能不同)下的平均宽度得到的。

只要记住一个字符的宽度是8像素 (2013-10-29备注:一个字符的宽度取决于Excel文件中的第一个字体大小,并不一定就是8像素)就可以了。

一个单元格实际的像素宽度还要在 (字符个数 * 默认字符的宽度)的基础上前后各加2个像素的空白边。另外字符之间会叠加一个像素,在计算时也要减去:

(2013-10-29备注:一个字符的边距不一定只是2像素,和字体有关系)

像素 = 2个像素空白 + (字符个数 * 默认字符的宽度) + 2个像素空白 - (字符个数 - 1)

整理一下,公式变成:

像素 = 5 + (字符个数 * (默认字符的宽度 - 1))

代入默认字符宽度8:

像素 = 5 + (字符个数 * 7)

 

POI中的字符宽度算法是:

double 宽度 = (字符个数 * (字符宽度 - 1) + 5) / (字符宽度 - 1) * 256;

然后再四舍五入成整数。

 

最后把我写的一个工具类贴上来,方便使用。

  1. public class HSSFUtil {  
  2.     private static final short TWIPS_PER_PIEXL = 15//1 Pixel = 1440 TPI / 96 DPI = 15 Twips  
  3.       
  4.     public static short pixel2PoiHeight(int pixel) {  
  5.         return (short) (pixel * TWIPS_PER_PIEXL);  
  6.     }  
  7.   
  8.     public static int poiHeight2Pixel(short height) {  
  9.         return height / TWIPS_PER_PIEXL;  
  10.     }  
  11.   
  12.     //像素转poi宽度  
  13.     public static int pixel2PoiWidth(FontInfo fontInfo, int pixel) {  
  14.         double numChars = pixel2Character(fontInfo, pixel);  
  15.         numChars *= fontInfo.charWidth;  
  16.         numChars += fontInfo.spacing;  
  17.         numChars /= fontInfo.charWidth;  
  18.         numChars *= 256;  
  19.         return (int)numChars;  
  20.     }  
  21.       
  22.     //poi宽度转像素  
  23.     public static int poiWidth2Pixel(FontInfo fontInfo, int poiWidth) {  
  24.         double numChars = poiWidth2Character(fontInfo, poiWidth);  
  25.         return character2Piexl(fontInfo, numChars);  
  26.     }  
  27.       
  28.     public static double poiWidth2Character(FontInfo fontInfo, int poiWidth){  
  29.         double numChars = poiWidth / 256.0 - (fontInfo.spacing * 1.0 / fontInfo.charWidth);  
  30.         //2位小数  
  31.         return new BigDecimal(numChars).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();  
  32.     }  
  33.       
  34.     public static int character2PoiWidth(FontInfo fontInfo, double numChars){  
  35.         double w = (numChars + (fontInfo.spacing * 1.0 / fontInfo.charWidth)) * 256;  
  36.         return (int) w;  
  37.     }  
  38.       
  39.     //excel字符转像素  
  40.     public static int character2Piexl(FontInfo fontInfo, double numChars){  
  41.         double pixel = fontInfo.charWidth * numChars + fontInfo.spacing;  
  42.         return (int)pixel;  
  43.     }  
  44.       
  45.     //excel像素转字符  
  46.     public static double pixel2Character(FontInfo fontInfo, int pixel){  
  47.         double numChars =  (pixel - fontInfo.spacing) * 1.0 / fontInfo.charWidth;  
  48.         return new BigDecimal(numChars).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();  
  49.     }  
  50.       
  51.     //获得工作簿默认字符宽度  
  52.     public static FontInfo getDefaultCharWidth(Workbook book){  
  53.         //博客没人气,我已删除此段代码,请自行研究或者留邮箱  
  54.     }  
  55.       
  56.     //获得不同字体的字符边距   
  57.     private static int getSpacing(int fontHeightInPoints, int charWidth){  
  58.         //博客没人气,我已删除此段代码,请自行研究或者留邮箱  
  59.     }  
  60. }  

 

2014-11-04:宽度的算法在这:Excel的宽度怎么算的?》点击打开链接

分享到:
评论

相关推荐

    poi excel example,分页,行高,列宽

    `XLSExport`可能涉及导出数据到Excel文件的过程,而`XLSDemo`可能是一个演示如何使用POI的基本功能的示例,包括设置行高、列宽和分页。 在`XLSExport`类中,可能会有如下的方法或功能: 1. 创建`Workbook`对象,这...

    apache POI文件读写excel

    总结,Apache POI是Java开发中处理Excel文件的强大工具,涵盖了从基本的读写操作到复杂的格式设置和公式计算。通过熟练掌握Apache POI,开发者可以构建灵活且高效的Excel处理程序,满足各种业务需求。

    Apache POI 模板导出excel.rar

    Apache POI是一个强大的Java库,专门用于处理Microsoft Office格式的文件,如Excel、Word和PowerPoint。在"Apache POI 模板导出excel.rar"这个压缩包中,我们聚焦于使用Apache POI 3.16版本来生成基于Excel模板的...

    Apache poi 操作 excel 文件压缩包

    在Java环境中,Apache POI 提供了一套API,使得开发者能够创建、修改和读取Excel文件。这个压缩包包含了Apache POI库的多个版本及其依赖库,如ooxml-schemas、xmlbeans等,用于支持对Excel文件的OOXML(Office Open ...

    Apache POI for Android

    - **读取Excel**:使用Apache POI,开发者可以打开Excel文件,访问工作簿、工作表,以及单元格中的数据。例如,通过`WorkbookFactory.create()`方法加载文件,然后遍历工作表和单元格进行数据提取。 - **写入Excel...

    apache poi 导出excel、word

    - **表格**:Table对象代表Word中的表格,可以添加Row和Cell,设置列宽和行高,以及对单元格进行格式化。 6. **使用POM.xml**: 在Java Maven项目中,POM.xml文件是项目配置的核心,它包含了项目的依赖管理。为了...

    Apache POI库jar文件

    Apache POI库是一个开源的Java库,可以帮助开发人员处理Microsoft Office格式的文档,例如Word文档、Excel电子表格和PowerPoint演示文稿等。以下是Apache POI库的详细介绍: 支持多种Office格式:Apache POI库支持...

    Apache POI组件操作Excel,制作报表(四)

    这篇博文将深入探讨如何使用Apache POI组件来创建、修改和读取Excel文件,以实现报表制作。Apache POI提供了HSSF(Horizontally Stored Sheets Format)用于处理.xls格式的旧版Excel文件,以及XSSF(XML Spreadsheet...

    Apache POI HSSF读写Excel

    Apache POI是一个强大的Java库,专门用于处理Microsoft Office格式的文件,尤其是Excel(.xls)和Word(.doc)文档。HSSF(Horizontally Stored Sheet Format)是Apache POI项目的一部分,专注于处理旧版的Excel文件...

    Apache Poi Excel导出

    这篇博客“Apache Poi Excel导出”可能详细介绍了如何使用Apache POI库来生成Excel文件,特别适用于数据导出或报表生成等场景。 Apache POI API 包含多个关键组件,如HSSF(Horizontally Stored Format)用于处理旧...

    apache POI 导出Excel 设置打印

    在Java开发中,Apache POI 提供了API,使我们能够创建、修改和读取Excel文档。当我们需要导出Excel并设置打印参数时,Apache POI 提供了丰富的功能。 1. **创建Excel工作簿和工作表** 在使用Apache POI导出Excel时...

    使用ITEXT导出PDF、WORD,APACHE POI导出EXCEL报表文件

    本文将深入探讨如何使用ITEXT库导出PDF和Word,以及利用Apache POI库导出Excel报表文件。 首先,让我们来了解ITEXT库。ITEXT是一个开源Java库,专门用于创建和修改PDF文档。使用ITEXT,你可以方便地生成包含文本、...

    apache POI 读取 Excel

    apache poi 读取 Excel 的 jar 包 博文链接:https://wxinpeng.iteye.com/blog/231895

    Apache POI组件操作Excel,制作报表(三)

    在"exceltest"这个文件中,可能包含了使用Apache POI制作的Excel报表示例,通过查看和分析这些示例代码,可以更好地理解和学习如何实际应用上述知识点。记得在实践中不断探索和尝试,以提高使用Apache POI的能力。

    Apache POI Excel操作

    本篇将详细介绍Apache POI在Excel操作中的应用,包括基本概念、使用步骤、关键类和方法以及实际示例。 1. 基本概念 - HSSF (Horrible Spreadsheet Format):用于处理旧版的BIFF格式Excel文件(.xls)。 - XSSF ...

    Apache POI资源包

    1. **读取Microsoft Office文件**:通过HSSF(Horrible Spreadsheet Format)和XSSF(XML Spreadsheet Format)API,Apache POI能够读取旧版的Excel文件(.xls)和新版本的Excel文件(.xlsx)。类似地,HWPF...

    最新Apache POI 5.2.3jar包和源码

    使用Apache POI,开发者可以创建、读取和修改Excel工作簿、工作表、单元格、公式,甚至可以处理图表、图片和样式。此外,它也支持Word和PowerPoint文件的操作。Apache POI源码的提供使得开发者能够深入理解其内部...

    Apache POI导入数据到Excel电子表格

    在Java开发中,Apache POI 提供了一套丰富的API,使得开发者能够方便地读取、写入和修改Excel电子表格。本篇文章将详细介绍如何使用Apache POI 导入数据到Excel。 首先,你需要在项目中引入Apache POI相关的库。...

    Apache poi 导出excel实例

    这篇博客文章“Apache POI 导出excel实例”将深入探讨如何使用Apache POI库来生成Excel文件,这对于在Java环境中处理大量数据并需要导出为Excel格式的应用非常有用。 首先,我们需要导入Apache POI库到我们的项目中...

    Apache POI导入和导出Excel文件.

    Apache POI导入和导出Excel文件

Global site tag (gtag.js) - Google Analytics