package com.njcn; import com.njcn.gather.tools.report.util.Docx4jUtil; import org.docx4j.openpackaging.packages.WordprocessingMLPackage; import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart; import org.docx4j.wml.ObjectFactory; import org.docx4j.wml.P; import org.docx4j.wml.Tbl; import javax.xml.bind.JAXBElement; import java.io.File; import java.util.Arrays; import java.util.List; /** * 动态表格生成测试 * * @author hongawen * @version 1.0 * @date 2025/9/21 */ public class DynamicTableTest { public static void main(String[] args) { try { // 测试场景1:2个回路,7个检测项目(与result.png一致) testScenario1(); // 测试场景2:1个回路,只检测电压和频率 testScenario2(); // 测试场景3:4个回路,多个检测项目 testScenario3(); System.out.println("所有测试场景执行完成!"); } catch (Exception e) { e.printStackTrace(); } } /** * 测试场景1:2个回路,7个检测项目(模拟result.png的数据) */ public static void testScenario1() throws Exception { System.out.println("=== 测试场景1:2个回路,7个检测项目 ==="); // 创建Word文档 WordprocessingMLPackage wordPackage = WordprocessingMLPackage.createPackage(); MainDocumentPart mainDocumentPart = wordPackage.getMainDocumentPart(); ObjectFactory factory = new ObjectFactory(); // 1. 添加标题 P titleP = factory.createP(); Docx4jUtil.createTitle(factory, titleP, "检测结果(场景1:2回路7项目)", 32, true); mainDocumentPart.getContent().add(titleP); // 2. 检测项目配置 List testItems = Arrays.asList( "电压", "电压不平衡度", "电流不平衡度", "谐波电压", "谐波电流", "间谐波电压", "短时间闪变" ); // 3. 检测结果数据(模拟result.png中的数据) String[][] testResults = { {"不合格", "不合格"}, // 电压 {"无法比较", "无法比较"}, // 电压不平衡度 {"合格", "合格"}, // 电流不平衡度 {"合格", "合格"}, // 谐波电压 {"合格", "合格"}, // 谐波电流 {"不合格", "不合格"}, // 间谐波电压 {"无法比较", "无法比较"} // 短时间闪变 }; // 4. 定义回路名称 List circuitNames = Arrays.asList("测量回路 1", "测量回路 2"); // 5. 生成动态表格(包含说明内容) JAXBElement table = Docx4jUtil.createDynamicTestResultTable( factory, testItems, circuitNames, testResults, "不合格", "部分值", "200", "去除最大最小值"); mainDocumentPart.getContent().add(table); // 6. 保存文档 File outputFile = new File("检测结果_场景1_2回路7项目.docx"); wordPackage.save(outputFile); System.out.println("文档已保存:" + outputFile.getAbsolutePath()); } /** * 测试场景2:1个回路,只检测电压和频率 */ public static void testScenario2() throws Exception { System.out.println("=== 测试场景2:1个回路,2个检测项目 ==="); WordprocessingMLPackage wordPackage = WordprocessingMLPackage.createPackage(); MainDocumentPart mainDocumentPart = wordPackage.getMainDocumentPart(); ObjectFactory factory = new ObjectFactory(); // 标题 P titleP = factory.createP(); Docx4jUtil.createTitle(factory, titleP, "检测结果(场景2:1回路2项目)", 32, true); mainDocumentPart.getContent().add(titleP); // 简单的检测项目 List testItems = Arrays.asList("电压", "频率"); // 1个回路的检测结果 String[][] testResults = { {"不合格"}, // 电压 {"合格"} // 频率 }; // 定义回路名称 List circuitNames = Arrays.asList("#1母线"); // 生成表格(包含说明内容) JAXBElement table = Docx4jUtil.createDynamicTestResultTable( factory, testItems, circuitNames, testResults, "不合格", "任意值", "100", "取第一个满足条件的数据"); mainDocumentPart.getContent().add(table); File outputFile = new File("检测结果_场景2_1回路2项目.docx"); wordPackage.save(outputFile); System.out.println("文档已保存:" + outputFile.getAbsolutePath()); } /** * 测试场景3:4个回路,多个检测项目 */ public static void testScenario3() throws Exception { System.out.println("=== 测试场景3:4个回路,5个检测项目 ==="); WordprocessingMLPackage wordPackage = WordprocessingMLPackage.createPackage(); MainDocumentPart mainDocumentPart = wordPackage.getMainDocumentPart(); ObjectFactory factory = new ObjectFactory(); // 标题 P titleP = factory.createP(); Docx4jUtil.createTitle(factory, titleP, "检测结果(场景3:4回路5项目)", 32, true); mainDocumentPart.getContent().add(titleP); // 检测项目 List testItems = Arrays.asList( "电压", "频率", "电压不平衡度", "谐波电压", "间谐波电压" ); // 4个回路的检测结果 String[][] testResults = { {"不合格", "合格", "合格", "不合格"}, // 电压 {"合格", "合格", "合格", "合格"}, // 频率 {"无法比较", "无法比较", "合格", "合格"}, // 电压不平衡度 {"合格", "不合格", "合格", "合格"}, // 谐波电压 {"不合格", "不合格", "不合格", "合格"} // 间谐波电压 }; // 定义回路名称(自定义名称示例) List circuitNames = Arrays.asList("主变高压侧", "主变低压侧", "备用线路1", "备用线路2"); // 生成表格(包含说明内容) JAXBElement table = Docx4jUtil.createDynamicTestResultTable( factory, testItems, circuitNames, testResults, "不合格", "平均值", "300", "取算术平均值"); mainDocumentPart.getContent().add(table); File outputFile = new File("检测结果_场景3_4回路5项目.docx"); wordPackage.save(outputFile); System.out.println("文档已保存:" + outputFile.getAbsolutePath()); } }