在Word中创建报告时,我们经常会遇到这样的情况:我们需要将数据从Excel中复制和粘贴到Word中,这样读者就可以直接在Word中浏览数据,而不用打开Excel文档。在本文中,您将学习如何使用Spire.Office for Java将Excel数据转换为Word表格并保留格式。


目录

程序环境

安装Spire.Office for Java

注意:上面代码中的版本号要与下载链接中的版本号保持一致,以体验新功能或避免BUG

将带格式的Excel数据导出到Word表格

步骤

代码示例

效果图


程序环境

安装Spire.Office for Java

首先,你需要在你的Java程序中添加Spire.Office.jar文件作为一个依赖项。该JAR文件可以从这个链接下载。如果你使用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</artifactId><version>7.9.9</version></dependency>
</dependencies>

注意:上面代码中的版本号要与下载链接中的版本号保持一致,以体验新功能或避免BUG


将带格式的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文件中。

代码示例

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复制字体和单元格样式到WordcopyStyle(textRange, xCell, wCell);}}//Save the document to a Word file保存文档为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;}}
}

效果图

---THE END---

Java导出带格式的Excel数据到Word表格相关推荐

  1. 如何通过Java导出带格式的 Excel 数据到 Word 表格

    在Word中制作报表时,我们经常需要将Excel中的数据复制粘贴到Word中,这样则可以直接在Word文档中查看数据而无需打开另一个Excel文件.但是如果表格比较长,内容就会存在一定程度的丢失,无法 ...

  2. java 导出复杂格式的 Excel 留着自己备用

    效果   看看是不是你要的样子 POM.xml <dependency><groupId>org.apache.poi</groupId><artifactI ...

  3. C#导出带格式的Excel

    代码里的地址我就不删除了,这是我亲戚的汽配店,各位看到的亲们还希望有机会的话多去光顾一下啊!刚起步阶段,有点艰难. public void DataTabletoExcel(int Id)       ...

  4. Java带图片的excel数据导入

    带图片的EXCEL数据导入 这里使用的是POI,所以这里使用的很杂,不过方便对它们的了解.模板下载与图片导出到excel都不一样. 下面会把对应连接贴上. 带入依赖:不要使用3.17的版本,直接上代码 ...

  5. php 导出csv设置列宽度,php数据库导出excel表格数据-php从数据库导出csv格式的Excel表格是,字段本身就......

    PHP如何将查询出来的数据导出成excel表格(最好做... $objPHPExcel->getActiveSheet()->getDefaultColumnDimension(A)-&g ...

  6. XLSX实现导出带样式的Excel表格的坑

    XLSX导出带样式的Excel表格失败 导入XLSX xlsx-style的使用 项目的要求,需要导出一个结果到Excel表格中,因为所以,没有用Java的方式去实现,而选择了Vue前端直接导出的方式 ...

  7. Java导出主表和明细Excel

    Java导出主表和明细Excel 使用POI导出数据库主表和明细数据,原文https://www.cnblogs.com/gudongcheng/p/8268909.html 业务代码 package ...

  8. java 导出csv 格式,java导出csv格式文件的方法

    这篇文章主要为大家详细介绍了java导出csv格式文件的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 导出csv格式文件的本质是导出以逗号为分隔的文本数据 imp ...

  9. Java 导出DBF格式文件(标题中文)

    本文章不是原创,但是我抄袭的那个连接我找不到了,还是有些自己写的东西,见谅! 目录 前言 一.DBF是什么? 二.使用步骤 1.引入库 2.正文 总结 前言 写这篇文章是有原因的,我前两天有一个需求, ...

最新文章

  1. javascript function
  2. 【用研】细读7张图片,教你玩转用户调研
  3. DEEPNORM:千层transformer...
  4. Crackme006 - 全新160个CrackMe学习系列(图文|视频|注册机源码)
  5. Eclipse用户使用IntelliJ IDEA的常见问答
  6. matlab打开界面模糊,如何在人机界面GUI的M文件中嵌入模糊FIS模块
  7. vue制作展开收起效果
  8. eclipse 工程中使用引入maven项目遇到maven-resources-plugin:2.6 找不到
  9. php进程间通信 yoc_PHP 进程间通信各种通信方式间的优劣之分??
  10. 作为程序员,北漂的我有很多话想说。
  11. 【IoT最佳实践】设备获取实时天气信息
  12. UnityWebform(2):自定义LifetimeManager和TypeConverter使Unity从HttpContext中取值注入WebForm页面...
  13. 拓端tecdat|R语言Black Scholes和Cox-Ross-Rubinstein期权定价模型案例
  14. springboot项目打包成jar包
  15. 【SAP-FICO详细教程】
  16. 【PAT】1046. Shortest Distanc(循环数组)+(总结高效代码)
  17. springBoot使用poi导出Excel
  18. 通过U盘传播的“病毒”
  19. 易语言调用大漠插件对雷电模拟器进行后台绑定源码
  20. 通信系统的组成(精简介绍)

热门文章

  1. matlab语音合成技术,matlab语音合成详细版
  2. 职场常用问题分析与管理方法
  3. 你的计算机毕业设计怎么写——教你点科技与狠活
  4. MI 小米米家智能平台
  5. (008)前端css,js,Jquery,Servlet入门
  6. The Sandbox 开启 2022 年新征途,Mega City 土地销售来啦
  7. 爆笑:学生假条和老师批示
  8. 关于一道你们眼中的水题 Windy数 的乱写(数位dp)
  9. php代码数鸡蛋数学题,求鸡蛋数
  10. 微信小程序图片的比例问题