word 和 excel 在用途和功能方面彼此不同。word 主要用于文本文档,如论文、电子邮件、信件、书籍、简历或学术论文,其中文本格式是必不可少的。excel 用于保存数据、制作表格和图表以及进行复杂的计算。
不建议将复杂的 word 文件转换为 excel 电子表格,因为 excel 很难像 word 一样呈现内容。但是,如果你的 word 文档主要由表格组成,而你想在 excel 中分析表格数据,则可以使用 spire.office for java 将 word 转为 excel,并同时保持良好的可读性。
安装 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.5.6
将 word 转为 excel
这个场景实际上使用了 spire.office 包中的两个库。分别是 spire.doc for java 和 spire.xls for java。前者用于从 word 文档中读取和提取内容,后者用于创建 excel 文档并在特定单元格中写入数据。为了使此代码示例易于理解,我们创建了以下三个执行特定功能的自定义方法。
- exporttableinexcel() - 将数据从 word 表格导出到指定的 excel 单元格。
- copycontentintable() - 将内容从 word 中的表格单元格复制到 excel 单元格。
- copytextandstyle() - 将带格式的文本从 word 段落复制到 excel 单元格。
以下步骤演示了如何使用 spire.office for java 将数据从 word 文档导出到工作表。
- 创建一个 document 对象以加载 word 文件。
- 创建一个 workbook 对象并向其添加一个名为 “wordtoexcel” 的工作表。
- 遍历 word 文档中的所有节,遍历某个节下的所有文档对象,然后判断一个文档对象是段落还是表格。
- 如果文档对象是一个段落,使用 copytextandstyle() 方法将段落写在 excel 的指定单元格中。
- 如果文档对象是表格,则使用 exporttableinexcel() 方法将表格数据从 word 导出到 excel 单元格。
- 自动调整 excel 中的行高和列宽,使单元格内的数据不会超出单元格的边界。
- 使用 workbook.savetofile() 方法将工作簿保存到 excel 文件。
- java
import com.spire.doc.*;
import com.spire.doc.documents.paragraph;
import com.spire.doc.fields.docpicture;
import com.spire.doc.fields.textrange;
import com.spire.xls.*;
import java.awt.*;
public class convertwordtoexcel {
public static void main(string[] args) {
//创建一个 document 对象
document doc = new document();
//加载 word 文件
doc.loadfromfile("xxx公司采购单.docx");
//创建一个 workbook 对象
workbook wb = new workbook();
//删除默认工作表
wb.getworksheets().clear();
//创建一个名为“wordtoexcel”的工作表
worksheet worksheet = wb.createemptysheet("wordtoexcel");
int row = 1;
int column = 1;
//循环遍历 word 文档中的各个节
for (int i = 0; i < doc.getsections().getcount(); i ) {
//获取特定节
section section = doc.getsections().get(i);
//遍历某个节下的所有文档对象
for (int j = 0; j < section.getbody().getchildobjects().getcount(); j ) {
//获取特定的文档对象
documentobject documentobject = section.getbody().getchildobjects().get(j);
//判断对象是否为段落
if (documentobject instanceof paragraph) {
cellrange cell = worksheet.getcellrange(row, column);
paragraph paragraph = (paragraph) documentobject;
//将段落从 word 复制到特定单元格
copytextandstyle(cell, paragraph);
row ;
}
//判断对象是否为表格
if (documentobject instanceof table) {
table table = (table) documentobject;
//将表格数据从 word 导出到 excel
int currentrow = exporttableinexcel(worksheet, row, table);
row = currentrow;
}
}
}
//在单元格中换行文本
worksheet.getallocatedrange().iswraptext(true);
//自动调整行高和列宽
worksheet.getallocatedrange().autofitrows();
worksheet.getallocatedrange().autofitcolumns();
//将工作簿保存到 excel 文件
wb.savetofile("output.xlsx", excelversion.version2013);
}
//将数据从 word 表格导出到 excel 单元格
private static int exporttableinexcel(worksheet worksheet, int row, table table) {
cellrange cell;
int column;
for (int i = 0; i < table.getrows().getcount(); i ) {
column = 1;
tablerow tbrow = table.getrows().get(i);
for (int j = 0; j < tbrow.getcells().getcount(); j ) {
tablecell tbcell = tbrow.getcells().get(j);
cell = worksheet.getcellrange(row, column);
cell.borderaround(linestyletype.thin, color.black);
copycontentintable(tbcell, cell);
column ;
}
row ;
}
return row;
}
//将内容从 word 表格单元格复制到 excel 单元格
private static void copycontentintable(tablecell tbcell, cellrange cell) {
paragraph newpara = new paragraph(tbcell.getdocument());
for (int i = 0; i < tbcell.getchildobjects().getcount(); i ) {
documentobject documentobject = tbcell.getchildobjects().get(i);
if (documentobject instanceof paragraph) {
paragraph paragraph = (paragraph) documentobject;
for (int j = 0; j < paragraph.getchildobjects().getcount(); j ) {
documentobject cobj = paragraph.getchildobjects().get(j);
newpara.getchildobjects().add(cobj.deepclone());
}
if (i < tbcell.getchildobjects().getcount() - 1) {
newpara.appendtext("\n");
}
}
}
copytextandstyle(cell, newpara);
}
//将段落的文本和样式复制到单元格
private static void copytextandstyle(cellrange cell, paragraph paragraph) {
richtext richtext = cell.getrichtext();
richtext.settext(paragraph.gettext());
int startindex = 0;
for (int i = 0; i < paragraph.getchildobjects().getcount(); i ) {
documentobject documentobject = paragraph.getchildobjects().get(i);
if (documentobject instanceof textrange) {
textrange textrange = (textrange) documentobject;
string fontname = textrange.getcharacterformat().getfontname();
boolean isbold = textrange.getcharacterformat().getbold();
color textcolor = textrange.getcharacterformat().gettextcolor();
float fontsize = textrange.getcharacterformat().getfontsize();
string textrangetext = textrange.gettext();
int strlength = textrangetext.length();
excelfont font = new excelfont(cell.getworksheet().getworkbook().createfont());
font.setcolor(textcolor);
font.isbold(isbold);
font.setsize(fontsize);
font.setfontname(fontname);
int endindex = startindex strlength;
richtext.setfont(startindex, endindex, font);
startindex = strlength;
}
if (documentobject instanceof docpicture) {
docpicture picture = (docpicture) documentobject;
cell.getworksheet().getpictures().add(cell.getrow(), cell.getcolumn(), picture.getimage());
cell.getworksheet().setrowheightinpixels(cell.getrow(), 1, picture.getimage().getheight());
}
}
switch (paragraph.getformat().gethorizontalalignment()) {
case left:
cell.sethorizontalalignment(horizontalaligntype.left);
break;
case center:
cell.sethorizontalalignment(horizontalaligntype.center);
break;
case right:
cell.sethorizontalalignment(horizontalaligntype.right);
break;
}
}
}
申请临时 license
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用javascript。获取有效期 30 天的临时许可证。