阿里嘎多懒洋洋桑 2024-03-07 10:54 采纳率: 100%
浏览 14
已结题

java导出word柱状图后柱子上面没有数值

java导出word图标后上面没有数值怎么弄,就是红色的那个数字怎么弄出来

img

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-07 10:54
    关注

    引自免费微信小程序:皆我百晓生

    在Java中,如果你使用Apache POI库来生成Word文档并插入柱状图,通常情况下柱状图上的数值并不会自动显示。你需要手动为每个柱子添加数据标签(Data Label)。以下是一个简单的示例,说明如何在创建图表后为每个系列的柱子添加数值:

    import org.apache.poi.ss.usermodel.*;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    import org.apache.poi.xwpf.usermodel.*;
    
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class WordChartWithValues {
    
        public static void main(String[] args) throws IOException {
            // 创建一个Excel workbook用于存储图表数据
            Workbook workbook = new XSSFWorkbook();
            Sheet sheet = workbook.createSheet("Data");
            
            // 假设我们有一些数据
            Row dataRow = sheet.createRow(0);
            dataRow.createCell(0).setCellValue(10);  // 第一个柱子值
            dataRow.createCell(1).setCellValue(20);  // 第二个柱子值
            // ... 添加更多数据
    
            // 将数据区域设定为图表的数据源范围
            String chartTitle = "Bar Chart with Values";
            Drawing<?> drawing = sheet.createDrawingPatriarch();
            ClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 0, 5, 10, 20);
            Chart chart = drawing.createChart(anchor);
    
            ChartLegend legend = chart.getOrCreateLegend();
            legend.setPosition(LegendPosition.TOP_RIGHT);
    
            ChartDataSource<Number> xs = DataSources.fromNumericCellRange(sheet, new CellRangeAddress(0, 0, 0, 1));
            ChartDataSource<Number> ys = DataSources.fromNumericCellRange(sheet, new CellRangeAddress(0, 0, 0, 1));
    
            BarChartData data = chart.getChartDataFactory().createBarChartData(xs, ys);
            BarChartSeries series = data.addSeries(xs, ys);
            series.setTitleText("Series 1");
    
            // 设置柱状图的样式,并为其添加数据标签
            CTPlotArea plotArea = chart.getCTChart().getPlotArea();
            for (CTBarSer barSeries : plotArea.getBarChartList().get(0).getSerArray()) {
                CTDLbls dLbls = barSeries.addNewDLbls();
                dLbls.setShowVal(true);  // 显示数值
                dLbls.setShowCatName(false);  // 不显示类别名称
            }
    
            // 将图表嵌入到Word文档中
            XWPFDocument document = new XWPFDocument();
            XWPFParagraph paragraph = document.createParagraph();
            XWPFRun run = paragraph.createRun();
            run.setText("Here is the chart:");
            FileInputStream excelFileInputStream = new FileInputStream(workbook.write(new FileOutputStream("chartdata.xlsx")));
            byte[] bytes = IOUtils.toByteArray(excelFileInputStream);
            int pictureId = document.addPicture(bytes, Document.PICTURE_TYPE_XLSX);
            paragraph.createRun().addPicture(new ByteArrayInputStream(bytes), Document.PICTURE_TYPE_XLSX, chartTitle, Units.toEMU(600), Units.toEMU(400));
    
            // 输出Word文档
            FileOutputStream out = new FileOutputStream("output.docx");
            document.write(out);
            out.close();
            document.close();
            workbook.close();
        }
    }
    

    请注意,上述代码首先将数据写入Excel文件中,然后创建图表,并在Excel图表设置中开启数值显示。接着,它将包含图表的Excel工作簿作为图片嵌入到Word文档中。

    由于Apache POI并不直接支持在Word文档内创建图表并添加数据标签,所以采取了间接的方法:先在Excel中创建图表并设置好样式,再将图表以图片形式插入到Word中。如果你需要更高级的功能或者直接在Word里绘制图表并添加数据标签,可能需要寻找其他能够提供此功能的Java库或API。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月15日
  • 已采纳回答 3月7日
  • 创建了问题 3月7日

悬赏问题

  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表