泉州网站制作,鲜花店的网站建设,网站建设设计服务商,房地产公司排名本文将继续介绍POI的使用#xff0c;上接在Java中使用Apache POI导入导出Excel#xff08;二#xff09;
使用Apache POI组件操作Excel#xff08;三#xff09;
24、拆分和冻结窗格
您可以创建两种类型的窗格;冻结窗格和拆分窗格。
冻结窗格按列和行进行拆分。您创建…本文将继续介绍POI的使用上接在Java中使用Apache POI导入导出Excel二
使用Apache POI组件操作Excel三
24、拆分和冻结窗格
您可以创建两种类型的窗格;冻结窗格和拆分窗格。
冻结窗格按列和行进行拆分。您创建 使用以下机制的冻结窗格
sheet1.createFreezePane 3 2 3 2 ;
前两个参数是列和行 希望分裂。后两个参数表示 在右下象限中可见的单元格。
拆分窗格的显示方式不同。分割区域为 分为四个独立的工作区域。分裂 发生在像素级别并且用户能够 通过将分割拖动到新位置来调整分割。
拆分窗格是使用以下调用创建的
sheet2.createSplitPane 2000 2000 0 0 Sheet.PANE_LOWER_LEFT ;
第一个参数是分割的 x 位置。 这是 1/20 点。本案中的一点 似乎等同于一个像素。第二个参数是 拆分的 y 位置。再次在 1/20 分。
最后一个参数指示当前具有的窗格 焦点。这将是 Sheet.PANE_LOWER_LEFT 之一 PANE_LOWER_RIGHT、PANE_UPPER_RIGHT 或 PANE_UPPER_LEFT。
Workbook wb new XSSFWorkbook();Sheet sheet1 wb.createSheet(new sheet);
Sheet sheet2 wb.createSheet(second sheet);
Sheet sheet3 wb.createSheet(third sheet);
Sheet sheet4 wb.createSheet(fourth sheet);// Freeze just one row
sheet1.createFreezePane( 0, 1, 0, 1 );// Freeze just one column
sheet2.createFreezePane( 1, 0, 1, 0 );// Freeze the columns and rows (forget about scrolling position of the lower right quadrant).
sheet3.createFreezePane( 2, 2 );// Create a split with the lower left side being the active quadrant
sheet4.createSplitPane( 2000, 2000, 0, 0, Sheet.PANE_LOWER_LEFT );try (OutputStream fileOut new FileOutputStream(workbook.xls)) {wb.write(fileOut);
}
25、重复行和列
可以在 使用 setRepeatingRows 和 setRepeatingColumns 方法。这些方法需要 CellRangeAddress 参数 它指定行或列的范围 重复。 对于 setRepeatingRows它应该指定一个范围 rows 以重复其中 column 部分跨越所有 列。 对于 setRepeatingColumns它应该指定一个范围 列以重复其中行部分跨越所有 行。 如果参数为 null则重复的行或列 将被删除。
Workbook wb new XSSFWorkbook();Sheet sheet1 wb.createSheet(Sheet1);
Sheet sheet2 wb.createSheet(Sheet2);// Set the rows to repeat from row 4 to 5 on the first sheet.
sheet1.setRepeatingRows(CellRangeAddress.valueOf(4:5));// Set the columns to repeat from column A to C on the second sheet
sheet2.setRepeatingColumns(CellRangeAddress.valueOf(A:C));try (OutputStream fileOut new FileOutputStream(workbook.xls)) {wb.write(fileOut);
}
26、页眉和页脚
示例适用于页眉但直接应用于页脚。
Workbook wb new XSSFWorkbook();Sheet sheet wb.createSheet(new sheet);Header header sheet.getHeader();
header.setCenter(Center Header);
header.setLeft(Left Header);
header.setRight(HSSFHeader.font(Stencil-Normal, Italic) HSSFHeader.fontSize((short) 16) Right w/ Stencil-Normal Italic font and size 16);try (OutputStream fileOut new FileOutputStream(workbook.xls)) {wb.write(fileOut);
}
27、页眉和页脚的 XSSF 增强功能
示例适用于页眉但直接应用于页脚。请注意上面的 基本页眉和页脚适用于 XSSF 工作簿以及 HSSF 工作簿。HSSFHeader 公司 stuff 不适用于 XSSF 工作簿。
XSSF 能够处理首页页眉和页脚以及偶数/奇数 页眉和页脚。所有页眉/页脚属性标志也可以在 XSSF 中处理。 奇数页眉和页脚是默认的页眉和页脚。它显示在所有 不显示首页页眉或不显示偶数页页眉的页面。那是 如果偶数页眉/页脚不存在则奇数页眉/页脚显示在 甚至页面。如果第一页页眉/页脚不存在则奇数页眉/页脚 显示在第一页上。如果未设置 even/odd 属性则与 偶数页眉/页脚不存在。如果 first page 属性不存在则为 与第一页页眉/页脚不存在相同。
Workbook wb new XSSFWorkbook();XSSFSheet sheet (XSSFSheet) wb.createSheet(new sheet);// Create a first page header
Header header sheet.getFirstHeader();
header.setCenter(Center First Page Header);
header.setLeft(Left First Page Header);
header.setRight(Right First Page Header);// Create an even page header
Header header2 sheet.getEvenHeader();
der2.setCenter(Center Even Page Header);
header2.setLeft(Left Even Page Header);
header2.setRight(Right Even Page Header);// Create an odd page header
Header header3 sheet.getOddHeader();
der3.setCenter(Center Odd Page Header);
header3.setLeft(Left Odd Page Header);
header3.setRight(Right Odd Page Header);// Set/Remove Header properties
XSSFHeaderProperties prop sheet.getHeaderFooterProperties();
prop.setAlignWithMargins();
prop.scaleWithDoc();
prop.removeDifferentFirstPage(); // This does not remove first page headers or footers
prop.removeDifferentEvenOdd(); // This does not remove even headers or footerstry (OutputStream fileOut new FileOutputStream(workbook.xlsx)) {wb.write(fileOut);
}
28、绘制形状
POI 支持使用 Microsoft Office 绘制形状 绘图工具。图纸上的形状以 组和 AND 形状的层次结构。最顶层的形状 是族长。这在工作表上不可见 完全。要开始绘制您需要在 XSSFSheet 类上调用 createPatriarch。这具有 效果擦除存储的任何其他形状信息 在那张纸上。默认情况下POI 将保留形状 记录在工作表中除非您调用 此方法。
要创建形状您必须完成以下操作 步骤
创建 Patriarch。创建锚点以将形状定位在图纸上。请族长创建形状。设置形状类型线条、椭圆、矩形等设置有关形状的任何其他样式详细信息。例如 线条粗细等
XSSFPatriarch patriarch sheet.createDrawingPatriarch();
a new XSSFClientAnchor( 0, 0, 1023, 255, (short) 1, 0, (short) 1, 0 );XSSFSimpleShape shape1 patriarch.createSimpleShape(a1);
shape1.setShapeType(XSSFSimpleShape.OBJECT_TYPE_LINE);
文本框是使用其他调用创建的
XSSFTextbox textbox1 patriarch.createTextbox(new XSSFClientAnchor(0,0,0,0,(short)1,1,(short)2,2));
textbox1.setString(new XSSFRichTextString(This is a test) );
可以使用不同的字体来设置 TextBox 中的文本。方法如下
XSSFFont font wb.createFont();
font.setItalic(true);
font.setUnderline(XSSFFont.U_DOUBLE);
XSSFRichTextString string new XSSFRichTextString(Woo!!!);
string.applyFont(2,5,font);
textbox.setString(string );
就像使用 Excel 手动完成一样将形状组合在一起这是可能的。这是通过使用这些组调用 createGroup()创建形状。也可以在组内创建组。
警告您创建的任何组都应至少包含两个 其他形状或子组。
以下是创建形状组的方法
// Create a shape group.
XSSFShapeGroup group patriarch.createGroup(new XSSFClientAnchor(0,0,900,200,(short)2,2,(short)2,2));// Create a couple of lines in the group.
XSSFSimpleShape shape1 group.createShape(new XSSFChildAnchor(3,3,500,500));shape1.setShapeType(XSSFSimpleShape.OBJECT_TYPE_LINE);((XSSFChildAnchor) shape1.getAnchor()).setAnchor(3,3,500,500);XSSFSimpleShape shape2 group.createShape(new XSSFChildAnchor(1,200,400,600));
shape2.setShapeType(XSSFSimpleShape.OBJECT_TYPE_LINE);
如果你仔细观察你会注意到形状 添加到组中的锚点使用新类型的锚点 XSSFChildAnchor 的 Anchor 中。发生的事情是 创建的组具有自己的坐标空间 放置在其中的形状。POI 默认将其设置为 0,0,1023,255但您可以根据需要更改它。 方法如下
myGroup.setCoordinates(10,10,20,20); // top-left, bottom-right
如果您在一个组中创建一个组它也会 拥有自己的坐标空间。
29、样式化形状
默认情况下形状看起来有点普通。可对形状应用不同的样式。目前可以做的事情包括
更改填充颜色。创建没有填充颜色的形状。更改线条的粗细。更改线条的样式。例如虚线、点。更改线条颜色。
以下是如何执行此操作的示例
XSSFSimpleShape s patriarch.createSimpleShape(a);s.setShapeType(XSSFSimpleShape.OBJECT_TYPE_OVAL);
s.setLineStyleColor(10,10,10);
s.setFillColor(90,10,200);
s.setLineWidth(XSSFShape.LINEWIDTH_ONE_PT * 3);
s.setLineStyle(XSSFShape.LINESTYLE_DOTSYS);
30、形状和图形2D
虽然原生 POI 形状绘制命令是 在形状中绘制形状的推荐方法有时 最好使用标准 API 以兼容 外部库。考虑到这一点我们创建了一些 Graphics 和 Graphics2d 的包装器。
所有图形命令都发送到 XSSFShapeGroup 中。 这是如何完成的
a new XSSFClientAnchor( 0, 0, 1023, 255, (short) 1, 0, (short) 1, 0 );group patriarch.createGroup( a );
group.setCoordinates( 0, 0, 80 * 4 , 12 * 23 );float verticalPointsPerPixel a.getAnchorHeightInPoints(sheet) / (float)Math.abs(group.getY2() - group.getY1());g new EscherGraphics( group, wb, Color.black, verticalPointsPerPixel );g2d new EscherGraphics2d( g );drawChemicalStructure( g2d );
我们做的第一件事是创建组并设置其坐标 以匹配我们计划绘制的内容。接下来我们计算一个合理的 fontSizeMultiplier 创建 EscherGraphics 对象。 由于我们真正需要的是 Graphics2d 对象因此我们创建一个 EscherGraphics2d 对象并传入 我们创建的 Graphics 对象。最后我们调用 routine 该对象将绘制到 EscherGraphics2d 对象中。
每个像素的垂直点值得更多解释。 转换 Graphics 调用的难点之一 进入 Escher 绘图调用是 Excel 没有 绝对像素位置的概念。它衡量 它的单元格宽度以 characters 为单位和单元格高度以磅为单位。 不幸的是它没有明确定义它是什么类型的角色 测量。据推测这是因为 Excel 将是 在不同平台上甚至在同一平台内使用不同的字体 平台。
由于这个约束我们不得不实现 verticalPointsPerPixel 的 Pixel。这是字体在以下时间应缩放的量 您发出 drawString 等命令。计算此值 使用以下公式
multipler groupHeightInPoints / heightOfGroup
组的高度计算相当简单方法是计算 形状的边界框的 y 坐标之间的差异。这 可以使用名为 HSSFClientAnchor.getAnchorHeightInPoints 的便利性来计算组的高度。
graphics 类支持的许多函数 不完整。以下是一些已知的函数 工作。
fillRectfillOvaldrawStringdrawOvaldrawLineclearRect
不支持的函数将返回并记录一条消息 使用 POI 日志记录基础设施默认处于禁用状态。