使用 Apache POI 在 Excel 表中绘制形状的Java程序
Apache POI 通过允许用户选择一系列单元格来支持自定义打印,以便使用Java程序在工作表中配置所需的打印区域。最高的形状是族长。这在工作表上根本看不到。要开始绘图,您需要在 HSSFSheet 类上调用 createPatriarch。
让我们举个例子,使用 Apache POI 使用 Excel 文件的所有样式创建一个椭圆形。
方法:
- 首先,我们需要将 Maven 依赖添加到 maven 项目中,我们可以使用 pom.xml 文件包含 POI 依赖,如下所示:
- 创建工作簿实例
- 在上述工作簿中创建一个电子表格。
- 使用 XSSFRow 创建行
- 使用 XSSFCell 创建一个单元格。
- 使用 HSSFPatriarch 创建一个族长。
- 要在 Excel 工作表上定位形状,请使用 HSSFClientAnchor 创建一个锚点。
- 设置形状类型(线、椭圆、矩形等...)
- 设置描述形状的任何其他样式细节。 (例如:线条粗细等……)
- 通过定义 FileOutputStream 类型的对象将内容写入工作簿
- 关闭文件的连接。
org.apache.poi
poi
3.9
所需方法
方法一: HSSFClientAnchor()
- HSSFClientAnchor(int dx1,int dy1,int dx2,int dy2,短 col1,int row1,短 col2,int row2)
- 创建一个新的客户端锚点并设置锚点的左上角和右下角坐标。
- 注意:Microsoft Excel 有时似乎不允许 y1 高于 y2 或 x1 高于 x2,您可能需要反转它们并垂直或水平翻转绘制形状!
- 参数:
- dx1 – 第一个单元格内的 x 坐标。
- dy1 - 第一个单元格内的 y 坐标。
- dx2 – 第二个单元格内的 x 坐标。
- dy2 – 第二个单元格内的 y 坐标。
- col1 – 第一个单元格的列(基于 0)。
- row1 – 第一个单元格的行(基于 0)。
- col2 – 第二个单元格的列(基于 0)。
- row2 – 第二个单元格的行(基于 0)。
方法二: createSimpleShape()
- 创建一个简单的形状。这包括线条、矩形和椭圆等形状。
- 参数:anchor 客户端锚描述了这个组是如何附加到工作表上的。
- 返回:新创建的形状。
方法三: setShapeType(HSSFSimpleShape.OBJECT_TYPE_OVAL)
- 参数:值 - shapeType
方法四: setLineStyleColor(8, 8, 8)
- 颜色应用于此形状的线条。
- 参数:红绿蓝
方法五: setFillColor(100, 10, 150)
- 颜色用于填充此形状。
- 参数:红绿蓝
方法六: setLineWidth(HSSFShape.LINEWIDTH_ONE_PT * 3)
- 设置线条的宽度。 12700 = 1 分。
- 参数: EMU 中的 lineWidth 宽度。 12700 动车组 = 1 分
方法七: setLineStyle(HSSFShape.LINESTYLE_DOTSYS)
- 设置线条样式。
- 参数:lineStyle LINESTYLE_ 中的常量之一
执行:
Java
// Java Program to Creating an Oval Shape Using all the
// styling to Excel File using Apache POI
// Importing required classes
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
import org.apache.poi.hssf.usermodel.HSSFPatriarch;
import org.apache.poi.hssf.usermodel.HSSFShape;
import org.apache.poi.hssf.usermodel.HSSFSimpleShape;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
// Main class
public class GFG {
// Main driver method
public static void main(String args[])
throws IOException
{
// Naming a workbook
String excelfilename = "GFG.xls";
// Creating a workbook
Workbook workbook = new HSSFWorkbook();
// Creating a spreadsheet by creating an object of
// XSSFSheet and also give name
Sheet spreadsheet
= workbook.createSheet("XLDrawingShape");
// Creating an object patriarch of HSSFPatriarch.
HSSFPatriarch patriarch
= (HSSFPatriarch)
spreadsheet.createDrawingPatriarch();
// Creating an object anchor of HSSFClientAnchor
// and also set a value
HSSFClientAnchor anchor = new HSSFClientAnchor(
0, 0, 1023, 255, (short)1, 0, (short)5, 4);
// Creating an object shape of HSSFSimpleShape
HSSFSimpleShape shape
= patriarch.createSimpleShape(anchor);
// Setting all the attributes of shape
shape.setShapeType(
HSSFSimpleShape.OBJECT_TYPE_OVAL);
shape.setLineStyleColor(8, 8, 8);
shape.setFillColor(100, 10, 150);
shape.setLineWidth(HSSFShape.LINEWIDTH_ONE_PT * 3);
shape.setLineStyle(HSSFShape.LINESTYLE_DOTSYS);
// try block to check for exceptions
try {
// Placing the output file in default location
// and also kept in try catch block
FileOutputStream outputfile
= new FileOutputStream(excelfilename);
// Writing to workbook
workbook.write(outputfile);
// Closing workbook using close() method
outputfile.close();
// Displaying message for console window when
// program is successfully executed
System.out.println(excelfilename
+ " is written successfully");
}
// Catch block to handle the exceptions
catch (FileNotFoundException e) {
// Displaying error message for console window
// when program is not successfully executed
System.out.println("ERROR!! " + e.getMessage());
}
}
}
输出:在控制台窗口
当程序成功执行时。
GFG.xlsx is written successfully.
当程序没有成功执行时。
ERROR!! GFG.xlsx (The process cannot access the file because it is being used by another process)
输出:工作簿(excel文件)