前言

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


程序环境

安装Spire.Office for Java

首先,你需要在你的Java程序中添加Spire.Office.jar文件作为一个依赖项。该JAR文件可以从这个链接下载。如果你使用Maven,你可以通过在项目的pom.xml文件中添加以下代码,在你的应用程序中轻松导入该JAR文件。

点击查看代码
  1. <repositories>
  2. <repository>
  3. <id>com.e-iceblue</id>
  4. <name>e-iceblue</name>
  5. <url> https://repo.e-iceblue.cn/repository/maven-public/</url>
  6. </repository>
  7. </repositories>
  8. <dependencies>
  9. <dependency>
  10. <groupId>e-iceblue</groupId>
  11. <artifactId>spire.office</artifactId>
  12. <version>7.9.6</version>
  13. </dependency>
  14. </dependencies>

小tips:请注意版本号的变化

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

代码示例

点击查看代码
  1. import com.spire.doc.*;
  2. import com.spire.doc.FileFormat;
  3. import com.spire.doc.documents.HorizontalAlignment;
  4. import com.spire.doc.documents.PageOrientation;
  5. import com.spire.doc.documents.VerticalAlignment;
  6. import com.spire.doc.fields.TextRange;
  7. import com.spire.xls.*;
  8. public class ExportExcelToWord {
  9. public static void main(String[] args) {
  10. //下载一个Excel文件
  11. Workbook workbook = new Workbook();
  12. workbook.loadFromFile("C:/Users/Administrator/Desktop/sample.xlsx");
  13. //得到第一张工作表
  14. Worksheet sheet = workbook.getWorksheets().get(0);
  15. //创建一个Word文档
  16. Document doc = new Document();
  17. Section section = doc.addSection();
  18. section.getPageSetup().setOrientation(PageOrientation.Landscape);
  19. //添加一个表格
  20. Table table = section.addTable(true);
  21. table.resetCells(sheet.getLastRow(), sheet.getLastColumn());
  22. //合并单元格
  23. mergeCells(sheet, table);
  24. for (int r = 1; r <= sheet.getLastRow(); r++) {
  25. //设置行高
  26. table.getRows().get(r - 1).setHeight((float) sheet.getRowHeight(r));
  27. for (int c = 1; c <= sheet.getLastColumn(); c++) {
  28. CellRange xCell = sheet.getCellRange(r, c);
  29. TableCell wCell = table.get(r - 1, c - 1);
  30. //获得特定Excel单元格的值并将其添加到Word表格单元格
  31. TextRange textRange = wCell.addParagraph().appendText(xCell.getValue());
  32. // 从Excel复制字体和单元格样式到Word
  33. copyStyle(textRange, xCell, wCell);
  34. }
  35. }
  36. //Save the document to a Word file保存文档为Word文件
  37. doc.saveToFile("ExportToWord.docx", FileFormat.Docx);
  38. }
  39. //如果有合并的区域,则合并单元格
  40. private static void mergeCells(Worksheet sheet, Table table) {
  41. if (sheet.hasMergedCells()) {
  42. //从Excel中获取合并的单元格范围
  43. CellRange[] ranges = sheet.getMergedCells();
  44. for (int i = 0; i < ranges.length; i++) {
  45. int startRow = ranges[i].getRow();
  46. int startColumn = ranges[i].getColumn();
  47. int rowCount = ranges[i].getRowCount();
  48. int columnCount = ranges[i].getColumnCount();
  49. //合并Word表格中的对应单元格
  50. if (rowCount > 1 && columnCount > 1) {
  51. for (int j = startRow; j <= startRow + rowCount ; j++) {
  52. table.applyHorizontalMerge(j - 1, startColumn - 1, startColumn - 1 + columnCount - 1);
  53. }
  54. table.applyVerticalMerge(startColumn - 1, startRow - 1, startRow - 1 + rowCount - 1 );
  55. }
  56. if (rowCount > 1 && columnCount == 1 ) {
  57. table.applyVerticalMerge(startColumn - 1, startRow - 1, startRow - 1 + rowCount - 1);
  58. }
  59. if (columnCount > 1 && rowCount == 1 ) {
  60. table.applyHorizontalMerge(startRow - 1, startColumn - 1, startColumn - 1 + columnCount-1);
  61. }
  62. }
  63. }
  64. }
  65. //复制Excel单元格样式到Word表格
  66. private static void copyStyle(TextRange wTextRange, CellRange xCell, TableCell wCell) {
  67. //复制字体样式
  68. wTextRange.getCharacterFormat().setTextColor(xCell.getStyle().getFont().getColor());
  69. wTextRange.getCharacterFormat().setFontSize((float) xCell.getStyle().getFont().getSize());
  70. wTextRange.getCharacterFormat().setFontName(xCell.getStyle().getFont().getFontName());
  71. wTextRange.getCharacterFormat().setBold(xCell.getStyle().getFont().isBold());
  72. wTextRange.getCharacterFormat().setItalic(xCell.getStyle().getFont().isItalic());
  73. //复制背景色
  74. wCell.getCellFormat().setBackColor(xCell.getStyle().getColor());
  75. //复制水平对齐方式
  76. switch (xCell.getHorizontalAlignment()) {
  77. case Left:
  78. wTextRange.getOwnerParagraph().getFormat().setHorizontalAlignment(HorizontalAlignment.Left);
  79. break;
  80. case Center:
  81. wTextRange.getOwnerParagraph().getFormat().setHorizontalAlignment(HorizontalAlignment.Center);
  82. break;
  83. case Right:
  84. wTextRange.getOwnerParagraph().getFormat().setHorizontalAlignment(HorizontalAlignment.Right);
  85. break;
  86. }
  87. //复制垂直对齐方式
  88. switch (xCell.getVerticalAlignment()) {
  89. case Bottom:
  90. wCell.getCellFormat().setVerticalAlignment(VerticalAlignment.Bottom);
  91. break;
  92. case Center:
  93. wCell.getCellFormat().setVerticalAlignment(VerticalAlignment.Middle);
  94. break;
  95. case Top:
  96. wCell.getCellFormat().setVerticalAlignment(VerticalAlignment.Top);
  97. break;
  98. }
  99. }
  100. }

效果图

---THE END---

Java导出带格式的Excel数据到Word表格的更多相关文章

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

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

  2. POI导出带格式的Excel模板——(六)

    Jar包

  3. java的poi技术读取Excel数据

    这篇blog主要是讲述java中poi读取excel,而excel的版本包括:2003-2007和2010两个版本, 即excel的后缀名为:xls和xlsx. 读取excel和MySQL相关: ja ...

  4. 如何将mysql表结构导出成Excel格式的(并带备注)另附转为word表格的方法

    方法一: 1.使用一个MySQL管理工具:SQLyog,点击菜单栏“数据库”下拉的最后一项: 导出的格式如下: 2.要想转成Excel格式的只需手动将该表复制到Excel中去. 方法二: 1.以下用的 ...

  5. 导出带图片的Excel——OOXML文件分析

    需求: 普通js导出文件excel具有兼容性问题,通过js-xsl导出文件API未找到导出图片的方案,实例过少,因此针对07年后以.xlsx后缀的excel文件,通过修改后缀.zip参考文件模板来实现 ...

  6. jasperReports 通过java导出各种格式报表,及javaweb项目整合显示各种报表

    注意:编写此项目时,请先手动编写**.jrxml  或者用IReport生成**.jrxml或**.jasper 注:java导出报表与web项目显示报表方法其实是相同的,只不过有一句代码不同,如下 ...

  7. Java导出Pdf格式表单

    前言   作为开发人员,工作中难免会遇到复杂表单的导出,接下来介绍一种通过Java利用模板便捷导出Pdf表单的方式 模拟需求   需求:按照下面格式导出pdf格式的学生成绩单 准备工作 Excel软件 ...

  8. java导出csv格式文件

    导出csv格式文件的本质是导出以逗号为分隔的文本数据 import java.io.BufferedWriter; import java.io.File; import java.io.FileIn ...

  9. java的poi技术读取Excel数据到MySQL

    这篇blog是介绍java中的poi技术读取Excel数据,然后保存到MySQL数据中. 你也可以在 : java的poi技术读取和导入Excel了解到写入Excel的方法信息 使用JXL技术可以在 ...

随机推荐

  1. 修改 hosts

    不会牛逼操作 -1. 位置.格式 所有系统都差不多,都是 啥啥/etc/hosts 这样的 . 具体去查即可 . 格式: ip + 域名 域名不能含有通配符 hosts 可以绕过 dns 解析,直接访 ...

  2. 万字长文:从计算机本源深入探寻volatile和Java内存模型

    万字长文:从计算机本源深入探寻volatile和Java内存模型 前言 在本篇文章当中,主要给大家深入介绍Volatile关键字和Java内存模型.在文章当中首先先介绍volatile的作用和Java ...

  3. Web优化躬行记(6)——优化闭环实践

    在遇到一个页面性能问题时,我理解的优化闭环是:分析.策略.验证和沉淀. 分析需要有分析数据,因此得有一个性能监控管理. 策略就是制订针对性的优化方案,解决当前遇到的问题. 验证的对象上述策略,判断方案 ...

  4. pnpm 的 workspace 实现 monorepo 工程

    前言 前端多个包管理的的方式一般都是采用monorepo的方式去管理,之前都是使用的lerna的workspace去管理.这段时间包管理切换到了pnpm上,它也有worksapce,可以支持monor ...

  5. MySQL通配符与正则表达式

    通配符 通配符必须全文匹配时才为真,使用LIKE关键字 字符 示例 含义 _ "a_b" 任意一个字符"axb",其中x可以使任意字符,包括汉字 % " ...

  6. LuoguP4165 [SCOI2007]组队

    化式子,然后两个指针平\(A\)过去 #include <cstring> #include <cstdio> #include <algorithm> #incl ...

  7. Spring 03 切面编程

    简介 AOP(Aspect Oriented Programming),即面向切面编程 这是对面向对象思想的一种补充. 面向切面编程,就是在程序运行时,不改变程序源码的情况下,动态的增强方法的功能. ...

  8. java-重载、包修饰词以及堆栈管理

    1.方法的重写(Override):重新写.覆盖 1)发生在父子类中,方法名称相同,参数列表相同,方法体不同 2)重写方法被调用时,看对象的类型2.重写与重载的区别: 1)重写(Override): ...

  9. 你必须学UML之理论篇

    1.前言 对于当前社会背景下从事软件开发的工作者而言,"写代码"实际上并不是唯一的工作.特别在一些中小型的企业当中,这些企业往往对于开发者的要求,不单单停留在写代码完成相应功能上, ...

  10. JZM 的套题(暴力,DP)

    J Z M \rm JZM JZM 即将奔赴 N O I \rm NOI NOI 考场,为了让同学们赶上自己的千分之一水平,刻意出了两道水题给同学们练练. 1.曾经的代码 J Z M \rm JZM ...