Java實現(xiàn)將導出帶格式的Excel數(shù)據(jù)到Word表格
在Word中制作報表時,我們經(jīng)常需要將Excel中的數(shù)據(jù)復制粘貼到Word中,這樣則可以直接在Word文檔中查看數(shù)據(jù)而無需打開另一個Excel文件。但是如果表格比較長,內容就會存在一定程度的丟失,無法完整顯示數(shù)據(jù)。并且當工作量到達一定程度時,整個過程會非常費時,降低工作效率。那么如何輕松地將帶格式的 Excel 數(shù)據(jù)導出到 Word 表格呢?不用擔心,本文將通過Java應用程序詳細介紹如何把帶格式的Excel數(shù)據(jù)導入Word表格。希望這篇文章能對大家有所幫助。
使用工具:Free Spire.Office for Java
程序環(huán)境:
方法1:手動引入。將 Free Spire.Office for Java 下載到本地,解壓,找到lib文件夾下的Spire.XLS.jar文件。在IDEA中打開如下界面,將本地路徑中的jar文件引入Java程序
方法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>
具體步驟:
- 創(chuàng)建一個 Workbook 對象并使用 Workbook.LoadFromFile() 方法加載一個示例 Excel 文件。
- 通過 Workbook.Worksheets[index] 屬性獲取特定的工作表。
- 創(chuàng)建一個 Document 對象,并向其添加一個節(jié)。
- 使用 Section.AddTable() 方法添加一個表。
- 檢測工作表中合并的單元格,并使用自定義方法 MergeCells() 合并 Word表格相應的單元格。
- 通過 CellRange.Value 屬性獲取特定 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("sample.xlsx"); //得到第一張工作表 Worksheet sheet = workbook.getWorksheets().get(0); //創(chuàng)建一個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); } //如果有合并的區(qū)域,則合并單元格 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; } } }
效果圖:
到此這篇關于Java實現(xiàn)將導出帶格式的Excel數(shù)據(jù)到Word表格的文章就介紹到這了,更多相關Java導出Excel數(shù)據(jù)到Word內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Spring?boot?admin?服務監(jiān)控利器詳解
這篇文章主要介紹了Spring?boot?admin?服務監(jiān)控利器詳解,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-08-08SpringBoot?@InitBinder注解綁定請求參數(shù)的過程詳解
這篇文章主要介紹了SpringBoot?@InitBinder注解綁定請求參數(shù),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-04-04java 自己實現(xiàn)DataSource實現(xiàn)實例
這篇文章主要介紹了java 自己實現(xiàn)DataSource實現(xiàn)代碼的相關資料,需要的朋友可以參考下2017-05-05