国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

用poi把xls格式轉(zhuǎn)換成xlsx格式

這篇具有很好參考價值的文章主要介紹了用poi把xls格式轉(zhuǎn)換成xlsx格式。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

java中要實現(xiàn)excel新老格式的轉(zhuǎn)換比較麻煩,開源庫也沒幾個好用的。用ChatGpt查詢也是推薦直接用POI,下面是借助ChatGPT寫出來的代碼,經(jīng)過小小修改,格式轉(zhuǎn)換良好,基本能用,就是效率比較低下。將就著用吧,哎!
package com.yc.cloud.excel.util;

import lombok.extern.slf4j.Slf4j;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.*;

import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;

@Slf4j
public class ExcelFmtConvert {

    /**
     * Excel格式從xls轉(zhuǎn)換成xlsx格式
     *
     * @param xlsInputStream   xls格式的輸入流
     * @param xlsxOutputStream xlsx格式的輸出流
     */
    public static void convertXlsToXlsxByStream(InputStream xlsInputStream, OutputStream xlsxOutputStream) {
        try {
            HSSFWorkbook oldWorkbook = new HSSFWorkbook(xlsInputStream);
            XSSFWorkbook newWorkbook = new XSSFWorkbook();

            for (int i = 0; i < oldWorkbook.getNumberOfSheets(); i++) {
                HSSFSheet oldSheet = oldWorkbook.getSheetAt(i);
                XSSFSheet newSheet = newWorkbook.createSheet(oldSheet.getSheetName());

                // 遍歷行,創(chuàng)建行
                for (int j = 0; j <= oldSheet.getLastRowNum(); j++) {
                    HSSFRow oldRow = oldSheet.getRow(j);
                    XSSFRow newRow = newSheet.createRow(j);
                    if (oldRow != null) {
                        // 復(fù)制行高
                        newRow.setHeight(oldRow.getHeight());

                        //遍歷列,復(fù)制單元格
                        for (int k = 0; k < oldRow.getLastCellNum(); k++) {
                            HSSFCell oldCell = oldRow.getCell(k);
                            XSSFCell newCell = newRow.createCell(k);
                            if (oldCell != null) {
                                try {
                                    setCellValue(newCell, oldCell);
                                    copyCellStyle(newWorkbook, newCell, oldWorkbook, oldCell);
                                } catch (Exception ex) {
                                    log.warn("單元格拷貝異常:", ex);
                                }
                            }
                        }
                    }
                }

                // 復(fù)制單元格合并信息
                List<CellRangeAddress> mergedRegions = oldSheet.getMergedRegions();
                for (CellRangeAddress mergedRegion : mergedRegions) {
                    CellRangeAddress targetMergedRegion = new CellRangeAddress(
                            mergedRegion.getFirstRow(),
                            mergedRegion.getLastRow(),
                            mergedRegion.getFirstColumn(),
                            mergedRegion.getLastColumn()
                    );
                    newSheet.addMergedRegion(targetMergedRegion);
                }

                // 復(fù)制列寬
                int columnCount = 0;
                if (newSheet.getRow(0) != null) {
                    // 假設(shè)第一行包含所有列,根據(jù)第一行的列數(shù)獲取列數(shù)
                    columnCount = newSheet.getRow(0).getLastCellNum();
                }
                for (int columnIndex = 0; columnIndex < columnCount; columnIndex++) {
                    newSheet.setColumnWidth(columnIndex, oldSheet.getColumnWidth(columnIndex));
                }
            }

            newWorkbook.write(xlsxOutputStream);
            oldWorkbook.close();
            newWorkbook.close();
        } catch (Exception e) {
            log.error("excel格式轉(zhuǎn)換(xls->xlsx)異常:", e);
        }
    }

    private static void setCellValue(XSSFCell newCell, HSSFCell oldCell) {
        if (oldCell == null) {
            return;
        }
        switch (oldCell.getCellType()) {
            case STRING:
                newCell.setCellValue(oldCell.getStringCellValue());
                break;
            case NUMERIC:
                if (DateUtil.isCellDateFormatted(oldCell)) {
                    newCell.setCellValue(oldCell.getDateCellValue());
                } else {
                    newCell.setCellValue(oldCell.getNumericCellValue());
                }
                break;
            case BOOLEAN:
                newCell.setCellValue(oldCell.getBooleanCellValue());
                break;
            case FORMULA:
                newCell.setCellValue(oldCell.getCellFormula());
                break;
            default:
        }
    }

    private static void copyCellStyle(XSSFWorkbook xssfWorkbook, XSSFCell newCell, HSSFWorkbook hssfWorkbook, HSSFCell oldCell) {
        HSSFCellStyle oldCellStyle = oldCell.getCellStyle();

        // 創(chuàng)建一個XSSFCellStyle(新Excel格式)
        XSSFCellStyle newCellStyle = xssfWorkbook.createCellStyle();

        // 復(fù)制對齊方式
        newCellStyle.setAlignment(oldCellStyle.getAlignment());
        newCellStyle.setVerticalAlignment(oldCellStyle.getVerticalAlignment());

        // 復(fù)制字體屬性
        XSSFFont newFont = xssfWorkbook.createFont();
        HSSFFont oldFont = oldCellStyle.getFont(hssfWorkbook);
        newFont.setFontName(oldFont.getFontName());
        newFont.setFontHeightInPoints(oldFont.getFontHeightInPoints());
        newFont.setColor(oldFont.getColor());
        newCellStyle.setFont(newFont);

        // 復(fù)制填充顏色
        newCellStyle.setFillPattern(oldCellStyle.getFillPattern());
        newCellStyle.setFillForegroundColor(oldCellStyle.getFillForegroundColor());
        newCellStyle.setFillBackgroundColor(oldCellStyle.getFillBackgroundColor());

        // 復(fù)制數(shù)據(jù)格式
        newCellStyle.setDataFormat(oldCellStyle.getDataFormat());

        newCell.setCellStyle(newCellStyle);
    }
}

?文章來源地址http://www.zghlxwxcb.cn/news/detail-688073.html

?

到了這里,關(guān)于用poi把xls格式轉(zhuǎn)換成xlsx格式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 文件格式xls和xlsx有什么區(qū)別?xlsx和xls選擇哪個

    文件格式xls和xlsx有什么區(qū)別?xlsx和xls選擇哪個

    在數(shù)字時代,我們經(jīng)常需要處理各種電子文件,其中xls和xlsx是兩種常見的電子表格文件格式。盡管它們只有一字之差,但它們在功能、兼容性和性能等方面有著顯著的區(qū)別。本文將詳細(xì)解析這兩種文件格式的區(qū)別,并指導(dǎo)您如何根據(jù)需求選擇合適的格式。 XLS是Microsoft Excel的

    2024年01月24日
    瀏覽(23)
  • 后綴xls和xlsx有什么區(qū)別,xls和xlsx怎么轉(zhuǎn)換

    后綴xls和xlsx有什么區(qū)別,xls和xlsx怎么轉(zhuǎn)換

    兩種后綴名 都是office excel的生成文件; 其中xls是早期的office生成的文件;office2010之前的版本; xlsx是office2010之后的版本excel生成的文件; office 安裝包 含新版本 如果你想相互轉(zhuǎn)化,那就通過另存為,保存對應(yīng)的后綴名即可; 新建的Excel保存時,需要指定保存類型。目前主流

    2024年02月07日
    瀏覽(22)
  • Java excel poi 使用HSSFWorkbook 導(dǎo)出的excel wps能打開office打不開問題解決 Excel無法打開xx.xlsx,因為文件格式或擴展名無效......

    Java excel poi 使用HSSFWorkbook 導(dǎo)出的excel wps能打開office打不開問題解決 Excel無法打開xx.xlsx,因為文件格式或擴展名無效......

    1.在開發(fā)代碼中涉及到報表導(dǎo)出 xlsx文件 office打不開問題 JavaPOI導(dǎo)出Excel有三種形式,他們分別是 1.HSSFWorkbook 2.XSSFWorkbook 3.SXSSFWorkbook。 pom文件如下 檢查創(chuàng)建sheet代碼如下 代碼中用了 HSSFworkbook 去創(chuàng)建Sheet 導(dǎo)致office打不開原因就在這里 HSSFworkbook 解釋如下: HSSFWorkbook:是操作Exc

    2024年02月16日
    瀏覽(24)
  • 【Unity】用Excel庫讀取Excel表格(.xlsx或者.xls)

    【Unity】用Excel庫讀取Excel表格(.xlsx或者.xls)

    首先需要下載解析的庫??EPPlus,? Excel,? ICSharpCode.SharpZipLib? ? 下載鏈接: https://download.csdn.net/download/weixin_46472622/87238048 使用方法 我的Excel 表格是這樣的,每一列有一個 我用一個結(jié)構(gòu)體對象來表示 讀取的方法 ?全部代碼,以及調(diào)用: 如果是打包PC端的exe,需要將編輯

    2024年02月12日
    瀏覽(30)
  • python 將 csv轉(zhuǎn)excel (.xls和.xlsx)的幾種方式

    python 將 csv轉(zhuǎn)excel (.xls和.xlsx)的幾種方式

    excel 后綴有2種格式, .xls 是從 Excel 97 到 Excel 2003 的默認(rèn)文件格式,而 .xlsx 是 Excel 2007 及更高版本的默認(rèn)文件格式。 .xlsx和.xls格式的主要區(qū)別在于,.xls格式單個工作表最多支持65536行,256列。 .xlsx格式最多支持1048576行,16384列。 此外就是,存儲同樣多的數(shù)據(jù),.xlsx格式文件更

    2024年02月08日
    瀏覽(18)
  • vue - - - - - 在線預(yù)覽常見文件格式 .doc, .docx, .xls, .xlsx,.pdf

    vue - - - - - 在線預(yù)覽常見文件格式 .doc, .docx, .xls, .xlsx,.pdf

    關(guān)于一些文件的在線預(yù)覽,最簡易的實現(xiàn)方式是什么呢? 寫在前面 .png, .jpg, .jpeg 等圖片格式 直接預(yù)覽http/https地址 即可 .pdf 文件 直接預(yù)覽http/https地址 即可 .doc, .docx, .xls, .xlsx 等類型文件,需要在預(yù)覽地址之前拼接上 https://view.officeapps.live.com/op/view.aspx?src= .ofd 等類型文件,需

    2024年02月09日
    瀏覽(62)
  • 用python將csv轉(zhuǎn)excel (.xls和.xlsx)的幾種方式

    excel 后綴有2種格式, .xls 是從 Excel 97 到 Excel 2003 的默認(rèn)文件格式,而 .xlsx 是 Excel 2007 及更高版本的默認(rèn)文件格式。 .xlsx和.xls格式的主要區(qū)別在于,.xls格式單個工作表最多支持65536行,256列。 .xlsx格式最多支持1048576行,16384列。 此外就是,存儲同樣多的數(shù)據(jù),.xlsx格式文件更

    2024年02月05日
    瀏覽(21)
  • VBA:Application.GetOpenFilename打開指定文件夾里的excel類型文件(xls、xlsx)

    \\\'GetOpenFilename相當(dāng)于Excel打開窗口,通過該窗口選擇要打開的文件,并可以返回選擇的文件完整路徑和文件名。 \\\'Application.GetOpenFilename(“文件類型篩選規(guī)則(就是說明)”,“優(yōu)先顯示第幾個類型的文件”,“標(biāo)題”,“是否允許選擇多個文件名”) 打開類型只限excel文件 \\\'“文件類型

    2024年02月11日
    瀏覽(21)
  • Node.js 使用 officecrypto-tool 讀取加密的 Excel (xls, xlsx) 和 Word( docx)文檔

    Node.js 使用 officecrypto-tool 讀取加密的 Excel (xls, xlsx) 和 Word( docx)文檔, 還支持 xlsx 和 docx 文件的加密(具體使用看文檔)。暫時不支持doc文件的解密 傳送門:officecrypto-tool 讀取加密的 Excel 示例 讀取加密的 Word 示例 使用:mammoth officecrypto-tool 使用其他的word讀取庫也是一樣的道理

    2024年02月10日
    瀏覽(37)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包