代码之家  ›  专栏  ›  技术社区  ›  amachado

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

  •  0
  • amachado  · 技术社区  · 6 年前

    使用apache poi和openxmlformats,我构建了一个带有条形图的excel。一切正常,但现在我想改变轴的颜色,主要的网格线和字体大小,但我找不到这样做的方法。

    我该怎么做?

    谢谢

    1 回复  |  直到 6 年前
        1
  •  1
  •   Axel Richter    6 年前

    如何获取有关 org.openxmlformats.schemas.drawingml.x2006 物体:

    所有Office打开的XML文件( *.xlsx , *.docx , *.pptx )是邮政档案。所以我们可以把它们解压,看看里面的东西。

    所以创建一个 *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>
    

    现在我们需要一个api文档 org.openxmlformats.schemas.drawingml.x2006格式 . 由于grepcode.com似乎不太可用,我发现 http://www.atetric.com/atetric/javadoc/org.apache.poi/ooxml-schemas/1.3/ 为此。从开始 Interface CTValAx

    所以根据我的代码 Create Bar Chart in Excel with Apache POI 值轴的格式如下:

    ...
            //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
    ...