From ba8b51763d81a089a9c560a578f7b68441446494 Mon Sep 17 00:00:00 2001
From: liusheng <337615773@qq.com>
Date: 星期四, 30 四月 2026 20:47:53 +0800
Subject: [PATCH] 南华附一 和 登陆优化
---
ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java | 149 +++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 142 insertions(+), 7 deletions(-)
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
index c81ec58..06e482e 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
@@ -38,14 +38,9 @@
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.ss.util.CellRangeAddressList;
import org.apache.poi.util.IOUtils;
+import org.apache.poi.xddf.usermodel.chart.*;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
-import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
-import org.apache.poi.xssf.usermodel.XSSFDataValidation;
-import org.apache.poi.xssf.usermodel.XSSFDrawing;
-import org.apache.poi.xssf.usermodel.XSSFPicture;
-import org.apache.poi.xssf.usermodel.XSSFShape;
-import org.apache.poi.xssf.usermodel.XSSFSheet;
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.apache.poi.xssf.usermodel.*;
import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTMarker;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -1472,4 +1467,144 @@
log.error("{}璁剧疆瀵煎嚭Excel鏂囦欢鍚嶇О寮傚父,{}", fileName, e.getMessage());
}
}
+
+// public static void main(String[] args) {
+// // 1. 鍒涘缓宸ヤ綔绨�
+// try (XSSFWorkbook workbook = new XSSFWorkbook()) {
+// // 2. 鐢熸垚鏌辩姸鍥� Sheet
+// createBarChartSheet(workbook);
+// // 3. 鐢熸垚鎶樼嚎鍥� Sheet
+// createLineChartSheet(workbook);
+// // 4. 鐢熸垚楗肩姸鍥� Sheet
+// createPieChartSheet(workbook);
+//
+// // 5. 瀵煎嚭鍒版湰鍦版枃浠�
+// try (FileOutputStream fos = new FileOutputStream("D:/鍥捐〃瀵煎嚭.xlsx")) {
+// workbook.write(fos);
+// System.out.println("Excel 鍥捐〃瀵煎嚭鎴愬姛锛佽矾寰勶細D:/鍥捐〃瀵煎嚭.xlsx");
+// }
+// } catch (IOException e) {
+// e.printStackTrace();
+// }
+// }
+
+ // ==================== 1. 鍒涘缓鏌辩姸鍥� Sheet ====================
+ private static void createBarChartSheet(XSSFWorkbook workbook) {
+ XSSFSheet sheet = workbook.createSheet("鏌辩姸鍥�");
+ writeChartData(sheet);
+
+ XSSFDrawing drawing = sheet.createDrawingPatriarch();
+ XSSFClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 3, 1, 12, 15);
+ XSSFChart chart = drawing.createChart(anchor);
+ chart.setTitleText("浜у搧閿�閲�-鏌辩姸鍥�");
+ chart.setTitleOverlay(false);
+
+ // 鍧愭爣杞�
+ XDDFCategoryAxis xAxis = chart.createCategoryAxis(AxisPosition.BOTTOM);
+ XDDFValueAxis yAxis = chart.createValueAxis(AxisPosition.LEFT);
+ yAxis.setCrosses(AxisCrosses.AUTO_ZERO);
+
+ // 鏁版嵁鑼冨洿锛氬垎绫籄2:A6锛屾暟鍊糂2:B6
+ XDDFDataSource<String> cat = XDDFDataSourcesFactory.fromStringCellRange(sheet,
+ new CellRangeAddress(1, 5, 0, 0));
+ XDDFNumericalDataSource<Double> val = XDDFDataSourcesFactory.fromNumericCellRange(sheet,
+ new CellRangeAddress(1, 5, 1, 1));
+
+ // 鏌辩姸鍥炬暟鎹�
+ XDDFBarChartData barChart = (XDDFBarChartData) chart.createData(ChartTypes.BAR, xAxis, yAxis);
+ XDDFBarChartData.Series series = (XDDFBarChartData.Series) barChart.addSeries(cat, val);
+ series.setTitle("閿�閲�", null);
+ barChart.setBarDirection(BarDirection.COL);
+
+ // 缁樺埗锛堝叧閿細缂哄け灏变笉鏄剧ず鍥捐〃锛�
+ chart.plot(barChart);
+ }
+
+ // ==================== 2. 鍒涘缓鎶樼嚎鍥� Sheet ====================
+ private static void createLineChartSheet(XSSFWorkbook workbook) {
+ XSSFSheet sheet = workbook.createSheet("鎶樼嚎鍥�");
+ // 鍐欏叆琛ㄥご + 鏁版嵁
+ writeChartData(sheet);
+
+ // 缁樺浘鍖哄煙
+ XSSFDrawing drawing = sheet.createDrawingPatriarch();
+ XSSFClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 0, 5, 10, 20);
+ XSSFChart chart = drawing.createChart(anchor);
+
+ // 鍥捐〃鏍囬
+ chart.setTitleText("鏈堝害閿�鍞鎶樼嚎鍥�");
+ chart.setTitleOverlay(false);
+
+ // 鍥句緥
+ XDDFChartLegend legend = chart.getOrAddLegend();
+ legend.setPosition(LegendPosition.TOP_RIGHT);
+
+ // X杞淬�乊杞�
+ XDDFCategoryAxis bottomAxis = chart.createCategoryAxis(AxisPosition.BOTTOM);
+ bottomAxis.setTitle("鏈堜唤");
+ XDDFValueAxis leftAxis = chart.createValueAxis(AxisPosition.LEFT);
+ leftAxis.setTitle("閿�鍞锛堜竾鍏冿級");
+
+ // 鏁版嵁鑼冨洿
+ XDDFDataSource<String> months = XDDFDataSourcesFactory.fromStringCellRange(sheet, new CellRangeAddress(0, 5, 0, 0));
+ XDDFNumericalDataSource<Double> values = XDDFDataSourcesFactory.fromNumericCellRange(sheet, new CellRangeAddress(0, 5, 1, 1));
+
+ // 鍒涘缓鎶樼嚎鍥�
+ XDDFLineChartData lineData = (XDDFLineChartData) chart.createData(ChartTypes.LINE, bottomAxis, leftAxis);
+ XDDFLineChartData.Series series = (XDDFLineChartData.Series) lineData.addSeries(months, values);
+ series.setTitle("閿�鍞", null);
+ series.setMarkerStyle(MarkerStyle.CIRCLE); // 鏄剧ず鍦嗙偣
+
+ chart.plot(lineData);
+ }
+
+ // ========== 鏂板锛氶ゼ鐘跺浘 ==========
+ private static void createPieChartSheet(XSSFWorkbook workbook) {
+ XSSFSheet sheet = workbook.createSheet("楗肩姸鍥�");
+ writeChartData(sheet);
+
+ XSSFDrawing drawing = sheet.createDrawingPatriarch();
+ XSSFClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 3, 1, 12, 15);
+ XSSFChart chart = drawing.createChart(anchor);
+ chart.setTitleText("浜у搧鍗犳瘮-楗肩姸鍥�");
+ chart.setTitleOverlay(false);
+
+ // 楗煎浘涓嶉渶瑕乆Y杞�
+ XDDFDataSource<String> cat = XDDFDataSourcesFactory.fromStringCellRange(sheet,
+ new CellRangeAddress(1, 5, 0, 0));
+ XDDFNumericalDataSource<Double> val = XDDFDataSourcesFactory.fromNumericCellRange(sheet,
+ new CellRangeAddress(1, 5, 1, 1));
+
+ // 楗煎浘鏁版嵁
+ XDDFPieChartData pieChart = (XDDFPieChartData) chart.createData(ChartTypes.PIE, null, null);
+ pieChart.addSeries(cat, val);
+ chart.plot(pieChart);
+ }
+
+ // ==================== 鍏叡鏂规硶锛氬啓鍏ュ浘琛ㄦ暟鎹� ====================
+ private static void writeChartData(XSSFSheet sheet) {
+ Object[][] data = {
+ {"鍒嗙被", "鏁板��"},
+ {"浜у搧A", 35},
+ {"浜у搧B", 28},
+ {"浜у搧C", 42},
+ {"浜у搧D", 19},
+ {"浜у搧E", 26}
+ };
+ int rowIdx = 0;
+ for (Object[] rows : data) {
+ Row row = sheet.createRow(rowIdx++);
+ int cellIdx = 0;
+ for (Object val : rows) {
+ if (val instanceof String) {
+ row.createCell(cellIdx++).setCellValue((String) val);
+ } else if (val instanceof Number) {
+ row.createCell(cellIdx++).setCellValue(((Number) val).doubleValue());
+ }
+ }
+ }
+ sheet.autoSizeColumn(0);
+ sheet.autoSizeColumn(1);
+ }
+
}
--
Gitblit v1.9.3