速看:如何通過Java應用程序將Word轉為Excel

2023-01-13 10:09:56 來源:51CTO博客


(相關資料圖)

平時在工作中,很多小伙伴會習慣性地將文件保存為Word文檔格式,但有時會發現某些文件如果保存成Excel表格可能會更好地呈現。例如有的文本在Word文本中不如在Excel工作表編輯計算方便,所以要把Word轉Excel表格。那么對于之前已經保存成Word格式的文件該怎么轉成Excel文件格式呢?下面就給大家分享一個高效又方便的方法,通過編程方式將Word轉為Excel。

引入jar包

導入方法1:

手動引入。將??Free Spire.Office forJava??下載到本地,解壓,找到lib文件夾下的Spire.Office.jar文件。在IDEA中打開如下界面,將本地路徑中的jar文件引入Java程序:

導入方法2:如果您想通過 ????Maven????安裝,則可以在 pom.xml 文件中添加以下代碼導入 JAR文件。

            com.e-iceblue        e-iceblue        https://repo.e-iceblue.cn/repository/maven-public/                e-iceblue        spire.office.free        5.3.1    

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

效果圖

—本文完—

標簽: 是否為表格 在工作中 文件格式

上一篇:Starrocks的FE報元數據丟失的解決方案
下一篇:今日熱訊:0.2秒居然復制了100G文件?