引入依赖
<repositories>
<repository>
<id>AsposeJavaAPI</id>
<name>Aspose Java API</name>
<url>https://repository.aspose.com/repo/</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>AsposeJavaAPI</id>
<url>https://repository.aspose.com/repo/</url>
</pluginRepository>
</pluginRepositories>
<dependencies>
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-words</artifactId>
<version>21.1</version>
<type>pom</type>
</dependency>
</dependencies>
生成表格用到的模型类
public static class TdInfo {
public TdInfo(Integer rowSpan, Integer colSpan, String text) {
this.rowSpan = rowSpan;
this.colSpan = colSpan;
this.text = text;
}
/**
* 垂直合并单元格 大于1需要合并
*/
private Integer rowSpan;
/**
* 水平合并单元格 大于1需要合并
*/
private Integer colSpan;
/**
* 文本信息
*/
private String text;
//省略 get ,set 方法
}
aspose.word功能工具类
/**
* 创建word文件
*
* @param trList 表格数据
* @param file 生成的word文件对象
* @return
* @throws Exception
*/
public static boolean createWord(List<List<TdInfo>> trList, File file) {
try {
// 实例化一个document对象
Document document = new Document();
// 创建一个DocumentBuilder类的对象,并使用Document对象对其进行初始化
DocumentBuilder builder = new DocumentBuilder(document);
// Specify font formatting
Font font = builder.getFont();
font.setSize(13);
//字体加粗
font.setBold(true);
//设置字体颜色
font.setColor(Color.RED);
//设置字体
font.setName("宋体");
//插入文本行信息
builder.write("测试生成word文件");
//换行符
builder.insertBreak(BreakType.LINE_BREAK);
//换页符
//builder.insertBreak(BreakType.PAGE_BREAK);
font.setColor(Color.BLACK);
//设置文本内容格式
//ParagraphFormat paragraphFormat = builder.getParagraphFormat();
//设置首行缩进2个字符
//paragraphFormat.setFirstLineIndent(font.getSize() * 2);
builder.write("insert table info------------------------->");
builder.insertBreak(BreakType.LINE_BREAK);
//插入表格信息
int size = trList.size(), tdSize;
// 创建表格
Table table = builder.startTable();
List<TdInfo> tdList;
TdInfo tdInfo;
//存储垂直合并单元格的信息
Map<Integer, Integer> rowSpanMap = new HashMap<Integer, Integer>();
for (int i = 0; i < size; i++) {
tdList = trList.get(i);
//迭代单元格信息
tdSize = tdList.size();
for (int j = 0; j < tdSize; j++) {
tdInfo = tdList.get(j);
//CellMerge.FIRST和CellMerge.PREVIOUS需要组合使用才能合并单元格,FIRST表示为主要的单元格,PREVIOUS表示为被合并的单元格
if (tdInfo.getRowSpan() > 1) {
//垂直合并单元格
rowSpanMap.put(j, tdInfo.getRowSpan() + i);
builder.insertCell();
builder.getCellFormat().clearFormatting();
builder.getCellFormat().setVerticalMerge(CellMerge.FIRST);
} else {
int rowNumber = rowSpanMap.containsKey(j) ? rowSpanMap.get(j) : 0;
if (j < rowNumber) {
//合并行单元格信息
builder.insertCell();
builder.getCellFormat().clearFormatting();
builder.getCellFormat().setVerticalMerge(CellMerge.PREVIOUS);
}
builder.insertCell();
builder.getCellFormat().clearFormatting();
}
if (tdInfo.getColSpan() > 1) {
//水平合并单元格
builder.getCellFormat().setHorizontalMerge(CellMerge.FIRST);
}
//垂直居中对齐
//builder.getCellFormat().setVerticalAlignment(CellVerticalAlignment.CENTER);
if(i==0){
//设置首行的背景色为白色
builder.getCellFormat().getShading().setBackgroundPatternColor(Color.LIGHT_GRAY);
//水平居中对齐
builder.getParagraphFormat().setAlignment(ParagraphAlignment.CENTER);
}else{
builder.getParagraphFormat().setAlignment(ParagraphAlignment.LEFT);
}
//写入文本
builder.write(tdInfo.getText());
for (int p = 0; p < tdInfo.getColSpan() - 1; p++) {
//合并列单元格需要插入对应的空白列
builder.insertCell();
builder.getCellFormat().clearFormatting();
builder.getFont().clearFormatting();
builder.getCellFormat().setHorizontalMerge(CellMerge.PREVIOUS);
builder.getCellFormat().setVerticalMerge(CellMerge.NONE);
}
}
// 表格内的换行符
builder.endRow();
}
// 表格结束
builder.endTable();
//table.autoFit(AutoFitBehavior.AUTO_FIT_TO_WINDOW);
//生成文件
document.save(file.getAbsolutePath());
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
测试
public static void main(String[] args) throws Exception {
List<TdInfo> tr1 = Arrays.asList(new TdInfo(2, 1, "row 1 col 1 Row span 2"), new TdInfo(1, 1, "row 1 col 2"), new TdInfo(1, 1, "row 1 col 3"));
List<TdInfo> tr2 = Arrays.asList(new TdInfo(1, 2, "row 2 col 2 Col span 2"));
List<List<TdInfo>> trList = Arrays.asList(tr1, tr2);
createWord(trList, new File("C:\\Users\\Administrator\\Desktop\\test.docx"));
}
本文标题:使用aspose.word for Java在word中插入文本和表格支持合并单元格
本文链接:https://blog.quwenai.cn/post/2314.html
版权声明:本文不使用任何协议授权,您可以任何形式自由转载或使用。




![[并发编程] - Executor框架#ThreadPoolExecutor源码解读02 [并发编程] - Executor框架#ThreadPoolExecutor源码解读02](https://blog.quwenai.cn/zb_users/upload/2022/03/20220327124158164835611866353.png)


还没有评论,来说两句吧...