📜  使用 Apache POI 在 Excel 表中绘制形状的Java程序

📅  最后修改于: 2022-05-13 01:55:15.142000             🧑  作者: Mango

使用 Apache POI 在 Excel 表中绘制形状的Java程序

Apache POI 通过允许用户选择一系列单元格来支持自定义打印,以便使用Java程序在工作表中配置所需的打印区域。最高的形状是族长。这在工作表上根本看不到。要开始绘图,您需要在 HSSFSheet 类上调用 createPatriarch。

让我们举个例子,使用 Apache POI 使用 Excel 文件的所有样式创建一个椭圆形。

方法:

  1. 首先,我们需要将 Maven 依赖添加到 maven 项目中,我们可以使用 pom.xml 文件包含 POI 依赖,如下所示:
  2. 创建工作簿实例
  3. 在上述工作簿中创建一个电子表格。
  4. 使用 XSSFRow 创建行
  5. 使用 XSSFCell 创建一个单元格。
  6. 使用 HSSFPatriarch 创建一个族长。
  7. 要在 Excel 工作表上定位形状,请使用 HSSFClientAnchor 创建一个锚点。
  8. 设置形状类型(线、椭圆、矩形等...)
  9. 设置描述形状的任何其他样式细节。 (例如:线条粗细等……)
  10. 通过定义 FileOutputStream 类型的对象将内容写入工作簿
  11. 关闭文件的连接。
  
      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文件)