在这里,我创建了堆积条形图,代码正在运行,但它正在给出 - '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时不会提示任何错误。
代码工作... 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())