java中Excel使用图形的操作方法,图片展示

BSO 2020-09-11 09:16:21 java常见问答 4568

java的学习是一个漫长而又反复的过程,这往往要求学习的人全力以赴地投入进去,才能有所收获。今天就来为大家介绍java中Excel使用图形的操作方法,并且通过生动的图片和详细的代码来为大家展示。

一、首先要介绍的是画线,代码展示如下:

HSSFSheet sheet = workbook.createSheet("Test"); // 创建工作表(Sheet)
HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 0, 0, (short) 1, 0, (short) 4, 4);
HSSFSimpleShape line = patriarch.createSimpleShape(anchor);
line.setShapeType(HSSFSimpleShape.OBJECT_TYPE_LINE); //设置图形类型
line.setLineStyle(HSSFShape.LINESTYLE_SOLID); //设置图形样式
line.setLineWidth(6350); //在POI中线的宽度12700表示1pt,所以这里是0.5pt粗的线条。

图片如下:

java中Excel使用图形的操作方法

另外需要补充的是,用POI画图主要有下面几步:

⑴创建一个Patriarch;

⑵创建一个Anchor,用来确定图形的位置;

⑶调用Patriarch创建图形;

⑷设置图形类型(直线,矩形,圆形等)及样式(颜色,粗细等)。

另外关于HSSFClientAnchor(dx1,dy1,dx2,dy2,col1,row1,col2,row2)的参数,也为大家做一个简要的说明:

①dx1:起始单元格的x偏移量,如例子中的0表示直线起始位置距B 1单元格左侧的距离;

②dy1:起始单元格的y偏移量,如例子中的0表示直线起始位置距B 1单元格上侧的距离;

③dx2:终止单元格的x偏移量,如例子中的0表示直线起始位置距E 5单元格左侧的距离;

④dy2:终止单元格的y偏移量,如例子中的0表示直线起始位置距E 5单元格上侧的距离;

⑤col1:起始单元格列序号,从0开始计算;

⑥row1:起始单元格行序号,从0开始计算,如例子中col1=1,row1=0就表示起始单元格为B 1;

⑦col2:终止单元格列序号,从0开始计算;

⑧row2:终止单元格行序号,从0开始计算,如例子中col2=4,row2=4就表示起始单元格为E 5;

而且关于LineStyle属性,它的可选值对应的效果如下图所示:

java中Excel使用图形的操作方法

二、画矩形,代码展示如下:

HSSFSheet sheet = workbook.createSheet("Test"); // 创建工作表(Sheet)
HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
HSSFClientAnchor anchor = new HSSFClientAnchor(255, 122, 255, 122, (short) 1, 0, (short) 4, 3);
HSSFSimpleShape rec = patriarch.createSimpleShape(anchor);
rec.setShapeType(HSSFSimpleShape.OBJECT_TYPE_RECTANGLE);
rec.setLineStyle(HSSFShape.LINESTYLE_DASHGEL); //设置边框样式
rec.setFillColor(255, 0, 0); //设置填充色
rec.setLineWidth(25400); //设置边框宽度
rec.setLineStyleColor(0, 0, 255); //设置边框颜色

图片如下所示:

java中Excel使用图形的操作方法

三、画圆形,代码展示如下:

rec.setShapeType(HSSFSimpleShape.OBJECT_TYPE_OVAL); //设置图片类型

图片如下:

java中Excel使用图形的操作方法

四、画Grid

在POI中,本来是没有画Grid(网格)的方法。但可以通过画线的方式来模拟画Grid,代码展示如下:

HSSFSheet sheet = workbook.createSheet("Test"); // 创建工作表(Sheet)
HSSFRow row = sheet.createRow(2);
row.createCell(1);
row.setHeightInPoints(240);
sheet.setColumnWidth(2, 9000);
int linesCount = 20;
HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
//因为HSSFClientAnchor中dx只能在0-1023之间,dy只能在0-255之间,这里采用比例的方式
double xRatio = 1023.0 / (linesCount * 10);
double yRatio = 255.0 / (linesCount * 10);
// 画竖线
int x1 = 0;
int y1 = 0;
int x2 = 0;
int y2 = 200;
for (int i = 0; i < linesCount; i++)
{
    HSSFClientAnchor a2 = new HSSFClientAnchor();
    a2.setAnchor((short) 2, 2, (int)(x1 * xRatio)
        , (int)(y1 * yRatio), (short) 2, 2, (int)(x2 * xRatio)
        , (int)(y2 * yRatio));
    HSSFSimpleShape shape2 = patriarch.createSimpleShape(a2);
    shape2.setShapeType(HSSFSimpleShape.OBJECT_TYPE_LINE);
    x1 += 10;
    x2 += 10;
}
// 画横线
x1 = 0;
y1 = 0;
x2 = 200;
y2 = 0;
for (int i = 0; i < linesCount; i++)
{
    HSSFClientAnchor a2 = new HSSFClientAnchor();
    a2.setAnchor((short) 2, 2, (int)(x1 * xRatio)
        , (int)(y1 * yRatio), (short) 2, 2, (int)(x2 * xRatio)
        , (int)(y2 * yRatio));
    HSSFSimpleShape shape2 = patriarch.createSimpleShape(a2);
    shape2.setShapeType(HSSFSimpleShape.OBJECT_TYPE_LINE);
    y1 += 10;
    y2 += 10;
}

图片如下:

java中Excel使用图形的操作方法

五、插入图片,代码展示如下:

HSSFSheet sheet = workbook.createSheet("Test"); // 创建工作表(Sheet)
FileInputStream stream = newFileInputStream("d:\\POI\\Apache.gif");
byte[] bytes = new byte[(int) stream.getChannel()
    .size()];
stream.read(bytes); //读取图片到二进制数组
int pictureIdx = workbook.addPicture(bytes, HSSFWorkbook.PICTURE_TYPE_JPEG);
HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 0, 0, (short) 0, 0, (short) 5, 5);
HSSFPicture pict = patriarch.createPicture(anchor, pictureIdx);
//pict.resize();//自动调节图片大小,图片位置信息可能丢失

图片如下:

java中Excel使用图形的操作方法

六、从Excel文件提取图片,代码展示如下:

InputStream inp = new FileInputStream(filePath);
HSSFWorkbook workbook = new HSSFWorkbook(inp); //读取现有的Excel文件
List < HSSFPictureData > pictures = workbook.getAllPictures();
for (int i = 0; i < pictures.size(); i++)
{
    HSSFPictureData pic = pictures.get(i);
    String ext = pic.suggestFileExtension();
    if (ext.equals("png")) //判断文件格式
    {
        FileOutputStream png = newFileOutputStream("d:\\POI\\Apache.png");
        png.write(pic.getData());
        png.close(); //保存图片
    }
}

以上就是关于在java中Excel使用图形的操作方法,并且通过图片和代码为大家展示。想要了解更多java经典例子,敬请关注奇Q工具网。

推荐阅读:

java中Excel公式的计算和函数,实例展示

java中Excel单元格对齐包含什么?使用边框怎么做?

java中Excel字体的设置,背景和纹理的操作