繁体   English   中英

以openxmlformats更改图表的轴颜色和字体

[英]Change axis color and font of the chart in openxmlformats

使用apache POI和openxmlformats,我用条形图构建了一个excel。 一切正常,但是现在我想更改轴的颜色以及主要的网格线和字体大小,但是我找不到解决方法。

我该怎么办?

谢谢

如何获取有关org.openxmlformats.schemas.drawingml.x2006对象的信息:

所有Office Open XML文件( *.xlsx*.docx*.pptx )都是ZIP存档。 因此,我们可以将其解压缩并查看内部结构。

因此,创建一个带有条形图的*.xlsx文件,并对轴和网格线进行着色,并对轴字体进行格式化。 然后解压缩*.xlsx文件,并查看xl/charts/chart1.xml 在那里您会发现类似:

<c:valAx>
...
 <c:majorGridlines>
  <c:spPr>
   <a:ln>
    <a:solidFill>
     <a:srgbClr val="FF0000"/>
    </a:solidFill>
   </a:ln>
  </c:spPr>
 </c:majorGridlines>
...
 <c:spPr>
  <a:ln>
   <a:solidFill>
    <a:srgbClr val="FF0000"/>
   </a:solidFill>
  </a:ln>
 </c:spPr>
...
 <c:txPr>
  <a:bodyPr/>
  <a:p>
   <a:pPr>
    <a:defRPr sz="1200">
     <a:solidFill>
      <a:srgbClr val="FF0000"/>
     </a:solidFill>
    </a:defRPr>
   </a:pPr>
  </a:p>
 </c:txPr>
...
</c:valAx>

现在,我们需要org.openxmlformats.schemas.drawingml.x2006的API文档。 由于grepcode.com似乎不可用,因此我找到了http://www.atetric.com/atetric/javadoc/org.apache.poi/ooxml-schemas/1.3/ 接口CTValAx开始。

因此,基于我的使用Apache POI在Excel中创建条形图的代码,值轴的格式如下:

...
        //val axis
        CTValAx ctValAx = ctPlotArea.addNewValAx(); 
        ctValAx.addNewAxId().setVal(123457); //id of the val axis
        ctScaling = ctValAx.addNewScaling();
        ctScaling.addNewOrientation().setVal(STOrientation.MIN_MAX);
        ctValAx.addNewDelete().setVal(false);
        ctValAx.addNewAxPos().setVal(STAxPos.L);
        ctValAx.addNewCrossAx().setVal(123456); //id of the cat axis
        ctValAx.addNewTickLblPos().setVal(STTickLblPos.NEXT_TO);

        //colored major gridlines
        ctValAx.addNewMajorGridlines().addNewSpPr().addNewLn().addNewSolidFill().addNewSrgbClr().setVal(new byte[]{(byte)255,0,0});

        //colored axis line
        ctValAx.addNewSpPr().addNewLn().addNewSolidFill().addNewSrgbClr().setVal(new byte[]{(byte)255,0,0});

        //axis font
        org.openxmlformats.schemas.drawingml.x2006.main.CTTextBody ctTextBody
         = ctValAx.addNewTxPr(); //text body properties
        ctTextBody.addNewBodyPr(); //body properties
        org.openxmlformats.schemas.drawingml.x2006.main.CTTextCharacterProperties ctTextCharacterProperties 
         = ctTextBody.addNewP().addNewPPr().addNewDefRPr(); //character properties
        ctTextCharacterProperties.setSz(12*100); //size in 100th of a point
        ctTextCharacterProperties.addNewSolidFill().addNewSrgbClr().setVal(new byte[]{(byte)255,0,0}); //color
...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM