Apache Poi:Excel在'xxx.xlsx'中找到了不可读的内容 - 对于堆积条形图自定义颜色代码',选择'是'后工作

问题描述 投票:1回答:1

在这里,我创建了堆积条形图,代码正在运行,但它正在给出 - 'Excel在'xxx.xlsx'中找到了不可读的内容,这个错误在打开Excel文件时。

var filename = new Date();
filename.toString();
var f1 = filename.toString.replaceAll(":", "")
var file = new File(Play.application().configuration().getString("bdc.documents.location") + "/exportedDocuments/" + f1 + ".xlsx");
file.getParentFile().mkdirs();
val fileOut = new FileOutputStream(file)
val wb = new XSSFWorkbook()
val sheet = wb.createSheet("Sheet1");
var row = sheet.createRow(0);
var cnt = 0

var size = estimationDelays.size
var a = size + 3
var b = 18
var c = a * 4
var a1 = 0
var b1 = 0
var c1 = 0

var drawing = sheet.createDrawingPatriarch();
var anchor = drawing.createAnchor(0, 0, 5, 0, 0, a, b, c)
var chart = drawing.createChart(anchor)

var ctChart = chart.getCTChart
var ctPlotArea = ctChart.getPlotArea();
var ctBarChart = ctPlotArea.addNewBarChart();

var anchor1 = drawing.createAnchor(0, 0, 0, 0, 0, a1, b1, c1)
var shape = drawing.createSimpleShape(anchor1)
shape.setShapeType(ShapeTypes.LINE);
shape.setLineWidth(1.5);
shape.setLineStyle(3);
shape.setLineStyleColor(0, 0, 255);

var ctBoolean1 = ctBarChart.addNewVaryColors();
ctBoolean1.setVal(false)
ctBarChart.addNewBarDir().setVal(STBarDir.BAR);
ctBarChart.addNewGrouping().setVal(STBarGrouping.STACKED);

var data = 100.toByte
ctBarChart.addNewOverlap().setVal(data)

var dLbls = ctBarChart.addNewDLbls();
dLbls.addNewShowBubbleSize().setVal(false);
dLbls.addNewShowLegendKey().setVal(false);
dLbls.addNewShowCatName().setVal(false);
dLbls.addNewShowSerName().setVal(false);
dLbls.addNewShowPercent().setVal(false);
dLbls.addNewShowVal().setVal(true);
var dLblsNumFmt = dLbls.addNewNumFmt();
dLblsNumFmt.setSourceLinked(false);
dLblsNumFmt.setFormatCode("#;\\-#;");

val buisness: Array[Byte] = Array(96.toByte, 189.toByte, 104.toByte)
val application: Array[Byte] = Array(93.toByte, 165.toByte, 218.toByte)
val integration: Array[Byte] = Array(178.toByte, 145.toByte, 47.toByte)
val infrastructure: Array[Byte] = Array(205.toByte, 162.toByte, 252.toByte)
val development: Array[Byte] = Array(173.toByte, 191.toByte, 10.toByte)
val resource: Array[Byte] = Array(25.toByte, 101.toByte, 169.toByte)

for (r <- 1 to 7) {
  var cTBarSer = ctBarChart.addNewSer();
  var cTStrRef = cTBarSer.addNewTx().addNewStrRef();
  cTStrRef.setF("Label " + r);
  cTStrRef.addNewStrCache().addNewPtCount().setVal(1);
  var cTStrVal = cTStrRef.getStrCache().addNewPt();
  cTStrVal.setIdx(0);
  cTStrVal.setV(estimationMap.get(r.toString));

  cTBarSer.addNewIdx().setVal(r - 1);
  cTStrRef = cTBarSer.addNewCat().addNewStrRef();
  cTStrRef.setF("Categories");
  cTStrRef.addNewStrCache().addNewPtCount().setVal(3);
  for (c <- 1 to size + 1) {
    cTStrVal = cTStrRef.getStrCache().addNewPt();
    cTStrVal.setIdx(c - 1);
    cTStrVal.setV(requirementMap.get(c.toString));
  }

  var cTNumRef = cTBarSer.addNewVal().addNewNumRef();
  cTNumRef.setF("" + r);
  cTNumRef.addNewNumCache().addNewPtCount().setVal(3);
  for (c <- 1 to size + 1) {
    var cTNumVal = cTNumRef.getNumCache().addNewPt();
    cTNumVal.setIdx(c - 1);
    if (r == 1) {
      cTNumVal.setV(initialMap.get(c.toString))
      var ctShapeProperties = cTBarSer.addNewSpPr();
      ctShapeProperties.addNewSolidFill().addNewSrgbClr().setVal(buisness);
    } else {
      if (r == 2) {
        cTNumVal.setV(applicationMap.get(c.toString))
        var ctShapeProperties = cTBarSer.addNewSpPr();
        ctShapeProperties.addNewSolidFill().addNewSrgbClr().setVal(application);
      } else {
        if (r == 3) {
          cTNumVal.setV(integrationMap.get(c.toString))
          var ctShapeProperties = cTBarSer.addNewSpPr();
          ctShapeProperties.addNewSolidFill().addNewSrgbClr().setVal(integration);
        } else {
          if (r == 4) {
            cTNumVal.setV(infrastructureMap.get(c.toString))
            var ctShapeProperties = cTBarSer.addNewSpPr();
            ctShapeProperties.addNewSolidFill().addNewSrgbClr().setVal(infrastructure);
          } else {
            if (r == 5) {
              cTNumVal.setV(developmentMap.get(c.toString))
              var ctShapeProperties = cTBarSer.addNewSpPr();
              ctShapeProperties.addNewSolidFill().addNewSrgbClr().setVal(development);
            } else {
              if (r == 6) {
                cTNumVal.setV(pendingMap.get(c.toString))
                var ctShapeProperties = cTBarSer.addNewSpPr();
                ctShapeProperties.addNewSolidFill().addNewSrgbClr().setVal(buisness);
              } else {
                if (r == 7) {
                  cTNumVal.setV(resourceMap.get(c.toString))
                  var ctShapeProperties = cTBarSer.addNewSpPr();
                  ctShapeProperties.addNewSolidFill().addNewSrgbClr().setVal(resource);
                } else {

                }
              }
            }
          }
        }
      }
    }
  }
}

ctBarChart.addNewAxId().setVal(123456);
ctBarChart.addNewAxId().setVal(123457);

//cat axis
var ctCatAx = ctPlotArea.addNewCatAx();
ctCatAx.addNewAxId().setVal(123456); //id of the cat axis
var ctScaling = ctCatAx.addNewScaling();
ctScaling.addNewOrientation().setVal(STOrientation.MIN_MAX);
ctCatAx.addNewDelete().setVal(false);
ctCatAx.addNewAxPos().setVal(STAxPos.B);
ctCatAx.addNewCrossAx().setVal(123457); //id of the val axis
ctCatAx.addNewTickLblPos().setVal(STTickLblPos.NEXT_TO);

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

//legend
val ctLegend = ctChart.addNewLegend();
ctLegend.addNewLegendPos().setVal(STLegendPos.T);
ctLegend.addNewOverlay().setVal(false);

wb.write(fileOut)
Ok(f1.toString()) 

var ctShapeProperties = cTBarSer.addNewSpPr(); ctShapeProperties.add Solid Fill()。addNewSrgbClr()。setVal(business);

我已在堆积图表上为自定义颜色代码添加了此属性,同时删除此属性,在打开Excel时不会提示任何错误。

excel scala apache-poi bar-chart spreadsheet
1个回答
1
投票

代码工作... ctShapeProperties - 即在cTBarSer.addNewIdx()之后定义的形状属性.setVal(r - 1);用于自定义颜色代码,而不是在打开Excel时提示错误。

var filename = new Date();
filename.toString();
var f1 = filename.toString.replaceAll(":", "")
var file = new File(Play.application().configuration().getString("bdc.documents.location") + "/exportedDocuments/" + f1 + ".xlsx");
file.getParentFile().mkdirs();
val fileOut = new FileOutputStream(file)
val wb = new XSSFWorkbook()
val sheet = wb.createSheet("Sheet1");
var row = sheet.createRow(0);
var cnt = 0

var size = estimationDelays.size
var a = size + 3
var b = 18
var c = a * 4
var a1 = 0
var b1 = 0
var c1 = 0

var drawing = sheet.createDrawingPatriarch();
var anchor = drawing.createAnchor(0, 0, 5, 0, 0, a, b, c)
var chart = drawing.createChart(anchor)

var ctChart = chart.getCTChart
var ctPlotArea = ctChart.getPlotArea();
var ctBarChart = ctPlotArea.addNewBarChart();

var anchor1 = drawing.createAnchor(0, 0, 0, 0, 0, a1, b1, c1)
var shape = drawing.createSimpleShape(anchor1)
shape.setShapeType(ShapeTypes.LINE);
shape.setLineWidth(1.5);
shape.setLineStyle(3);
shape.setLineStyleColor(0, 0, 255);

var ctBoolean1 = ctBarChart.addNewVaryColors();
ctBoolean1.setVal(false)
ctBarChart.addNewBarDir().setVal(STBarDir.BAR);
ctBarChart.addNewGrouping().setVal(STBarGrouping.STACKED);

var data = 100.toByte
ctBarChart.addNewOverlap().setVal(data)

var dLbls = ctBarChart.addNewDLbls();
dLbls.addNewShowBubbleSize().setVal(false);
dLbls.addNewShowLegendKey().setVal(false);
dLbls.addNewShowCatName().setVal(false);
dLbls.addNewShowSerName().setVal(false);
dLbls.addNewShowPercent().setVal(false);
dLbls.addNewShowVal().setVal(true);
var dLblsNumFmt = dLbls.addNewNumFmt();
dLblsNumFmt.setSourceLinked(false);
dLblsNumFmt.setFormatCode("#;\\-#;");

val buisness: Array[Byte] = Array(96.toByte, 189.toByte, 104.toByte)
val application: Array[Byte] = Array(93.toByte, 165.toByte, 218.toByte)
val integration: Array[Byte] = Array(178.toByte, 145.toByte, 47.toByte)
val infrastructure: Array[Byte] = Array(205.toByte, 162.toByte, 252.toByte)
val development: Array[Byte] = Array(173.toByte, 191.toByte, 10.toByte)
val resource: Array[Byte] = Array(25.toByte, 101.toByte, 169.toByte)

for (r <- 1 to 7) {
  var cTBarSer = ctBarChart.addNewSer();
  var cTStrRef = cTBarSer.addNewTx().addNewStrRef();
  cTStrRef.setF("Label " + r);
  cTStrRef.addNewStrCache().addNewPtCount().setVal(1);
  var cTStrVal = cTStrRef.getStrCache().addNewPt();
  cTStrVal.setIdx(0);
  cTStrVal.setV(estimationMap.get(r.toString));

  cTBarSer.addNewIdx().setVal(r - 1);
  var ctShapeProperties = cTBarSer.addNewSpPr();
  if (r == 1) {
    ctShapeProperties.addNewSolidFill().addNewSrgbClr().setVal(buisness);
  } else {
    if (r == 2) {
      ctShapeProperties.addNewSolidFill().addNewSrgbClr().setVal(application);
    } else {
      if (r == 3) {
        ctShapeProperties.addNewSolidFill().addNewSrgbClr().setVal(integration);
      } else {
        if (r == 4) {
          ctShapeProperties.addNewSolidFill().addNewSrgbClr().setVal(infrastructure);
        } else {
          if (r == 5) {
            ctShapeProperties.addNewSolidFill().addNewSrgbClr().setVal(development);
          } else {
            if (r == 6) {
              ctShapeProperties.addNewSolidFill().addNewSrgbClr().setVal(buisness);
            } else {
              if (r == 7) {
                ctShapeProperties.addNewSolidFill().addNewSrgbClr().setVal(resource);
              } else {

              }
            }
          }
        }
      }
    }
  }
  cTStrRef = cTBarSer.addNewCat().addNewStrRef();
  cTStrRef.setF("Categories");
  cTStrRef.addNewStrCache().addNewPtCount().setVal(3);
  for (c <- 1 to size + 1) {
    cTStrVal = cTStrRef.getStrCache().addNewPt();
    cTStrVal.setIdx(c - 1);
    cTStrVal.setV(requirementMap.get(c.toString));
  }

  var cTNumRef = cTBarSer.addNewVal().addNewNumRef();
  cTNumRef.setF("" + r);
  cTNumRef.addNewNumCache().addNewPtCount().setVal(3);
  for (c <- 1 to size + 1) {
    var cTNumVal = cTNumRef.getNumCache().addNewPt();
    cTNumVal.setIdx(c - 1);
    if (r == 1) {
      cTNumVal.setV(initialMap.get(c.toString))
    } else {
      if (r == 2) {
        cTNumVal.setV(applicationMap.get(c.toString))
      } else {
        if (r == 3) {
          cTNumVal.setV(integrationMap.get(c.toString))
        } else {
          if (r == 4) {
            cTNumVal.setV(infrastructureMap.get(c.toString))
          } else {
            if (r == 5) {
              cTNumVal.setV(developmentMap.get(c.toString))
            } else {
              if (r == 6) {
                cTNumVal.setV(pendingMap.get(c.toString))
              } else {
                if (r == 7) {
                  cTNumVal.setV(resourceMap.get(c.toString))
                } else {

                }
              }
            }
          }
        }
      }
    }
  }
}

ctBarChart.addNewAxId().setVal(123456);
ctBarChart.addNewAxId().setVal(123457);

//cat axis
var ctCatAx = ctPlotArea.addNewCatAx();
ctCatAx.addNewAxId().setVal(123456); //id of the cat axis
var ctScaling = ctCatAx.addNewScaling();
ctScaling.addNewOrientation().setVal(STOrientation.MIN_MAX);
ctCatAx.addNewDelete().setVal(false);
ctCatAx.addNewAxPos().setVal(STAxPos.B);
ctCatAx.addNewCrossAx().setVal(123457); //id of the val axis
ctCatAx.addNewTickLblPos().setVal(STTickLblPos.NEXT_TO);

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

//legend
val ctLegend = ctChart.addNewLegend();
ctLegend.addNewLegendPos().setVal(STLegendPos.T);
ctLegend.addNewOverlay().setVal(false);

wb.write(fileOut)
Ok(f1.toString()) 
© www.soinside.com 2019 - 2024. All rights reserved.