首页 > 编程语言 >如何通过Java应用程序将Word转为Excel

如何通过Java应用程序将Word转为Excel

时间:2023-01-13 10:40:12浏览次数:63  
标签:Java int documentObject 单元格 Excel cell Word

平时在工作中,很多小伙伴会习惯性地将文件保存为Word文档格式,但有时会发现某些文件如果保存成Excel表格可能会更好地呈现。例如有的文本在Word文本中不如在Excel工作表编辑计算方便,所以要把Word转Excel表格。那么对于之前已经保存成Word格式的文件该怎么转成Excel文件格式呢?下面就给大家分享一个高效又方便的方法,通过编程方式将Word转为Excel。

引入jar包

导入方法1:

手动引入。将 ​Free Spire.Office for Java​ 下载到本地,解压,找到lib文件夹下的Spire.Office.jar文件。在IDEA中打开如下界面,将本地路径中的jar文件引入Java程序:

如何通过Java应用程序将Word转为Excel_转换

导入方法2:如果您想通过 ​​​​Maven​​​​安装,则可以在 pom.xml 文件中添加以下代码导入 JAR文件。

<repositories>
<repository>
<id>com.e-iceblue</id>
<name>e-iceblue</name>
<url>https://repo.e-iceblue.cn/repository/maven-public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.office.free</artifactId>
<version>5.3.1</version>
</dependency>
</dependencies>

将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;
}
}
}

效果图

如何通过Java应用程序将Word转为Excel_Word转Excel_02

—本文完—

标签:Java,int,documentObject,单元格,Excel,cell,Word
From: https://blog.51cto.com/u_15656056/6005802

相关文章

  • kettle java 代码调用
    使用程序调用kettlepom.xml点击查看代码<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.or......
  • JavaScript 并发模型
    JavaScript并发模型JavaScript是一种单线程语言,这意味着它只有一个执行线程。这意味着,当JavaScript代码正在运行时,它会阻塞其他所有代码的执行。这种模型称为单线程模型......
  • JAVA中DNS缓存设置(转)
    原文:https://blog.csdn.net/guanfengliang1988/article/details/92813431作者:夜风_BLOG我们上网的原点就是打开浏览器,在上方地址栏输入网址的那一刻,这个回车按了之后,发生......
  • 用pageOffice控件实现 office 文档在线编辑Word 只能加批注的功能
    OA办公中,业务需要编辑打开word文档后文档的正文不能改变,只能对文档进行加批注的操作怎么实现编辑打开word文档后文档的正文不能改变,只能对文档进行加批注的操作呢?2实......
  • 来自StateOfJS调查:2022年JavaScript生态圈趋势报告(前端早读课)
    原文我这里记录些觉得有趣的。Promise.allSettled()完成所有输入的方法,nomatterwhat,返回对应的状态和值/原因,这对想知道所有返回状态的业务很好用;使用async/await没法......
  • JavaDoc
    JavaDocjavadoc命令是用来生成自己API文档的参数信息@author作者名@version版本号@since指明需要最早使用的jdk版本@param参数名@return返回值情况@thro......
  • Java基础——异常处理
    异常概述所谓“程序”,就是按照次序,一步一步执行的指令;那么“异常”,就是程序没有按我们期待的次序执行时,程序给出的提示。在JAVA语言中,通过定义不同的异常类型,来提示不同......
  • JavaScript表单form
    form表单实例1<!DOCTYPEhtml>2<html>3<head>4<metacharset="utf-8">5<title>javascriptform表单</title>6</head>7......
  • 【转】用“逐步排除”的方法定位Java服务线上“系统性”故障
    一、摘要由于硬件问题、系统资源紧缺或者程序本身的BUG,Java服务在线上不可避免地会出现一些“系统性”故障,比如:服务性能明显下降、部分(或所有)接口超时或卡死等。其中部分......
  • 【转】用pageOffice插件实现 word文档在线填充指定数据
    pageOffice控件实现officeword文档在线填充指定数据应用场景OA办公中,经常要在文档的指定位置,填充后端指定数据。如合同中,姓名位置,金额位置,住址位置,要填充后端指定数......