在 word 中创建报告时,我们经常会遇到这样的情况:我们需要将数据从 excel 中复制和粘贴到 word 中,这样读者就可以直接在 word 中浏览数据,而不用打开 excel 文档。在本文中,您将学习如何使用 spire.office for java 将 excel 数据转换为 word 表格并保留格式。
安装 spire.office for java
首先,你需要在你的 java 程序中添加 spire.office.jar 文件作为一个依赖项。该jar文件可以从这个链接下载。如果你使用 maven,你可以通过在项目的 pom.xml 文件中添加以下代码,在你的应用程序中轻松导入该 jar 文件。
com.e-iceblue
e-iceblue
https://repo.e-iceblue.cn/repository/maven-public/
e-iceblue
spire.office
8.9.7
将带格式的 excel 数据导出到 word 表格
以下是使用 spire.office for java 将 excel 数据转换为 word 表格并保留格式的步骤。
- 创建一个 workbook 对象,并使用 workbook.loadfromfile() 方法加载一个 excel 样本文件。
- 使用 workbook.getworksheets().get() 方法获取一个特定的工作表。
- 创建一个 document 对象,并向其添加一个章节。
- 使用 section.addtable() 方法添加一个表格。
- 检测工作表中的合并单元格,并使用自定义方法 mergecells() 合并 word tale 中的相应单元格。
- 使用 cellrange.getvalue() 方法获取特定 excel 单元格的值,并使用 tablecell.addparagraph().appendtext() 方法将其添加到 word 表中的一个单元格。
- 使用自定义方法 copystyle() 将字体样式和单元格样式从 excel 复制到 word 表格中。
- 使用 document.savetofile() 方法将文档保存到 word 文件中。
- java
import com.spire.doc.*;
import com.spire.doc.fileformat;
import com.spire.doc.documents.horizontalalignment;
import com.spire.doc.documents.pageorientation;
import com.spire.doc.documents.verticalalignment;
import com.spire.doc.fields.textrange;
import com.spire.xls.*;
public class exportexceltoword {
public static void main(string[] args) {
//下载一个excel文件
workbook workbook = new workbook();
workbook.loadfromfile("c:/users/administrator/desktop/sample.xlsx");
//得到第一张工作表
worksheet sheet = workbook.getworksheets().get(0);
//创建一个word文档
document doc = new document();
section section = doc.addsection();
section.getpagesetup().setorientation(pageorientation.landscape);
//添加一个表格
table table = section.addtable(true);
table.resetcells(sheet.getlastrow(), sheet.getlastcolumn());
//合并单元格
mergecells(sheet, table);
for (int r = 1; r <= sheet.getlastrow(); r ) {
//设置行高
table.getrows().get(r - 1).setheight((float) sheet.getrowheight(r));
for (int c = 1; c <= sheet.getlastcolumn(); c ) {
cellrange xcell = sheet.getcellrange(r, c);
tablecell wcell = table.get(r - 1, c - 1);
//获得特定excel单元格的值并将其添加到word表格单元格
textrange textrange = wcell.addparagraph().appendtext(xcell.getvalue());
// 从excel复制字体和单元格样式到word
copystyle(textrange, xcell, wcell);
}
}
//保存文档为word文件
doc.savetofile("exporttoword.docx", fileformat.docx);
}
//如果有合并的区域,则合并单元格
private static void mergecells(worksheet sheet, table table) {
if (sheet.hasmergedcells()) {
//从excel中获取合并的单元格范围
cellrange[] ranges = sheet.getmergedcells();
for (int i = 0; i < ranges.length; i ) {
int startrow = ranges[i].getrow();
int startcolumn = ranges[i].getcolumn();
int rowcount = ranges[i].getrowcount();
int columncount = ranges[i].getcolumncount();
//合并word表格中的对应单元格
if (rowcount > 1 && columncount > 1) {
for (int j = startrow; j <= startrow rowcount ; j ) {
table.applyhorizontalmerge(j - 1, startcolumn - 1, startcolumn - 1 columncount - 1);
}
table.applyverticalmerge(startcolumn - 1, startrow - 1, startrow - 1 rowcount - 1 );
}
if (rowcount > 1 && columncount == 1 ) {
table.applyverticalmerge(startcolumn - 1, startrow - 1, startrow - 1 rowcount - 1);
}
if (columncount > 1 && rowcount == 1 ) {
table.applyhorizontalmerge(startrow - 1, startcolumn - 1, startcolumn - 1 columncount-1);
}
}
}
}
//复制excel单元格样式到word表格
private static void copystyle(textrange wtextrange, cellrange xcell, tablecell wcell) {
//复制字体样式
wtextrange.getcharacterformat().settextcolor(xcell.getstyle().getfont().getcolor());
wtextrange.getcharacterformat().setfontsize((float) xcell.getstyle().getfont().getsize());
wtextrange.getcharacterformat().setfontname(xcell.getstyle().getfont().getfontname());
wtextrange.getcharacterformat().setbold(xcell.getstyle().getfont().isbold());
wtextrange.getcharacterformat().setitalic(xcell.getstyle().getfont().isitalic());
//复制背景色
wcell.getcellformat().setbackcolor(xcell.getstyle().getcolor());
//复制水平对齐方式
switch (xcell.gethorizontalalignment()) {
case left:
wtextrange.getownerparagraph().getformat().sethorizontalalignment(horizontalalignment.left);
break;
case center:
wtextrange.getownerparagraph().getformat().sethorizontalalignment(horizontalalignment.center);
break;
case right:
wtextrange.getownerparagraph().getformat().sethorizontalalignment(horizontalalignment.right);
break;
}
//复制垂直对齐方式
switch (xcell.getverticalalignment()) {
case bottom:
wcell.getcellformat().setverticalalignment(verticalalignment.bottom);
break;
case center:
wcell.getcellformat().setverticalalignment(verticalalignment.middle);
break;
case top:
wcell.getcellformat().setverticalalignment(verticalalignment.top);
break;
}
}
}
申请临时 license
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用javascript。获取有效期 30 天的临时许可证。