最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java用POI導(dǎo)入導(dǎo)出Excel實(shí)例分析

 更新時(shí)間:2021年11月17日 08:38:49   作者:技術(shù)之家  
在本篇文章里小編給大家整理的是一篇關(guān)于Java用POI導(dǎo)入導(dǎo)出Excel實(shí)例分析內(nèi)容,有需要的朋友們可以跟著學(xué)習(xí)下。

1、異常java.lang.NoClassDefFoundError: org/apache/poi/UnsupportedFileFormatException

解決方法:

使用的poi的相關(guān)jar包一定版本一定要相同!?。。。?/p>

2、maven所使用jar包,沒有使用maven的話,就用poi-3.9.jar和poi-ooxml-3.9.jar(這個(gè)主要是用于Excel2007以后的版本)兩個(gè)jar包就行()

  <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.9</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.9</version>
        </dependency>

3、java導(dǎo)入Excel

先上傳Excel

//上傳Excel
    @RequestMapping("/uploadExcel")    public boolean uploadExcel(@RequestParam MultipartFile file,HttpServletRequest request) throws IOException {        if(!file.isEmpty()){
            String filePath = file.getOriginalFilename();            //windows
            String savePath = request.getSession().getServletContext().getRealPath(filePath);            //linux            //String savePath = "/home/odcuser/webapps/file";
            File targetFile = new File(savePath);            if(!targetFile.exists()){
                targetFile.mkdirs();
            }

            file.transferTo(targetFile);            return true;
        }        return false;
    }

在讀取Excel里面的內(nèi)容

 public static void readExcel() throws Exception{


        InputStream is = new FileInputStream(new File(fileName));
        Workbook hssfWorkbook = null;        if (fileName.endsWith("xlsx")){
           hssfWorkbook = new XSSFWorkbook(is);//Excel 2007
        }else if (fileName.endsWith("xls")){
            hssfWorkbook = new HSSFWorkbook(is);//Excel 2003
        }       // HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);       // XSSFWorkbook hssfWorkbook = new XSSFWorkbook(is);
        User student = null;
        List<User> list = new ArrayList<User>();        // 循環(huán)工作表Sheet
        for (int numSheet = 0; numSheet <hssfWorkbook.getNumberOfSheets(); numSheet++) {            //HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);
            Sheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);            if (hssfSheet == null) {                continue;
            }            // 循環(huán)行Row
            for (int rowNum = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {                //HSSFRow hssfRow = hssfSheet.getRow(rowNum);
                Row hssfRow = hssfSheet.getRow(rowNum);                if (hssfRow != null) {
                    student = new User();                    //HSSFCell name = hssfRow.getCell(0);                    //HSSFCell pwd = hssfRow.getCell(1);
                    Cell name = hssfRow.getCell(0);
                    Cell pwd = hssfRow.getCell(1);//這里是自己的邏輯                    student.setUserName(name.toString());
                    student.setPassword(pwd.toString());

                    list.add(student);
                }
            }
        }


    }

4、導(dǎo)出Excel

//創(chuàng)建Excel
    @RequestMapping("/createExcel")    public String createExcel(HttpServletResponse response) throws IOException {        //創(chuàng)建HSSFWorkbook對象(excel的文檔對象)
        HSSFWorkbook wb = new HSSFWorkbook();//建立新的sheet對象(excel的表單)
        HSSFSheet sheet=wb.createSheet("成績表");//在sheet里創(chuàng)建第一行,參數(shù)為行索引(excel的行),可以是0~65535之間的任何一個(gè)
        HSSFRow row1=sheet.createRow(0);//創(chuàng)建單元格(excel的單元格,參數(shù)為列索引,可以是0~255之間的任何一個(gè)
        HSSFCell cell=row1.createCell(0);        //設(shè)置單元格內(nèi)容
        cell.setCellValue("學(xué)員考試成績一覽表");//合并單元格CellRangeAddress構(gòu)造參數(shù)依次表示起始行,截至行,起始列, 截至列
        sheet.addMergedRegion(new CellRangeAddress(0,0,0,3));//在sheet里創(chuàng)建第二行
        HSSFRow row2=sheet.createRow(1);        //創(chuàng)建單元格并設(shè)置單元格內(nèi)容
        row2.createCell(0).setCellValue("姓名");
        row2.createCell(1).setCellValue("班級");
        row2.createCell(2).setCellValue("筆試成績");
        row2.createCell(3).setCellValue("機(jī)試成績");        //在sheet里創(chuàng)建第三行
        HSSFRow row3=sheet.createRow(2);
        row3.createCell(0).setCellValue("李明");
        row3.createCell(1).setCellValue("As178");
        row3.createCell(2).setCellValue(87);
        row3.createCell(3).setCellValue(78);        //.....省略部分代碼//輸出Excel文件
        OutputStream output=response.getOutputStream();
        response.reset();
        response.setHeader("Content-disposition", "attachment; filename=details.xls");
        response.setContentType("application/msexcel");
        wb.write(output);
        output.close();        return null;
    }

補(bǔ)充說明亂碼問題

1、文件名亂碼(我發(fā)現(xiàn)只要解決了文件名亂碼,其他亂碼也會(huì)跟著解決)response.setHeader("Content-disposition", "attachment; filename=中文.xls");

這個(gè)方法可以當(dāng)做一個(gè)公用方法來使用,以后有亂碼的都可以調(diào)用此方法

public static String toUtf8String(String s){ 
     StringBuffer sb = new StringBuffer(); 
       for (int i=0;i<s.length();i++){ 
          char c = s.charAt(i); 
          if (c >= 0 && c <= 255){sb.append(c);} 
        else{ 
        byte[] b; 
         try { b = Character.toString(c).getBytes("utf-8");} 
         catch (Exception ex) { 
             System.out.println(ex); 
                  b = new byte[0]; 
         } 
            for (int j = 0; j < b.length; j++) { 
             int k = b[j]; 
              if (k < 0) k += 256; 
              sb.append("%" + Integer.toHexString(k).toUpperCase()); 
              } 
     } 
  } 
  return sb.toString(); 
}

調(diào)用的時(shí)候,response.setHeader("Content-disposition", "attachment; filename="+toUtf8String("中文.xls"));

我上網(wǎng)查的時(shí)候,網(wǎng)上是說

今天要說的是在創(chuàng)建工作表時(shí),用中文做文件名和工作表名會(huì)出現(xiàn)亂碼的問題,先說以中文作為工作表名,大家創(chuàng)建工作表的代碼一般如下:

HSSFWorkbook workbook = new HSSFWorkbook();//創(chuàng)建EXCEL文件

HSSFSheet sheet= workbook.createSheet(sheetName); //創(chuàng)建工作表

這樣在用英文名作為工作表名是沒問題的,但如果sheetName是中文字符,就會(huì)出現(xiàn)亂碼,解決的方法如下代碼:

HSSFSheet sheet= workbook.createSheet();

workbook.setSheetName(0, sheetName,(short)1); //這里(short)1是解決中文亂碼的關(guān)鍵;而第一個(gè)參數(shù)是工作表的索引號。

但是我發(fā)現(xiàn)根本沒有這個(gè)方法,只需要改了文件名的亂碼,其他亂碼自然就解決了?。。?/p>

以上就是Java用POI導(dǎo)入導(dǎo)出Excel實(shí)例分析的詳細(xì)內(nèi)容,更多關(guān)于Java如何用POI導(dǎo)入導(dǎo)出Excel的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • public?static?void?main(String[]?args)使用解讀

    public?static?void?main(String[]?args)使用解讀

    這篇文章主要介紹了public?static?void?main(String[]?args)的使用,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Java使用UTF-8或GBK編碼后還是亂碼問題的解決辦法

    Java使用UTF-8或GBK編碼后還是亂碼問題的解決辦法

    在java中處理字符時(shí),經(jīng)常會(huì)發(fā)生亂碼,下面這篇文章主要給大家介紹了關(guān)于Java使用UTF-8或GBK編碼后還是亂碼問題的解決辦法,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • Java在Word中插入上標(biāo)和下標(biāo)的實(shí)現(xiàn)方法

    Java在Word中插入上標(biāo)和下標(biāo)的實(shí)現(xiàn)方法

    在某些情況下,你可能需要在Microsoft?Word中插入上標(biāo)和下標(biāo)。例如,當(dāng)你正在創(chuàng)建一個(gè)涉及科學(xué)公式的學(xué)術(shù)文件時(shí),在這篇文章中,你將學(xué)習(xí)如何使用Spire.Doc?for?Java庫在Word文檔中插入上標(biāo)和下標(biāo),需要的朋友可以參考下
    2022-10-10
  • java應(yīng)用領(lǐng)域分析

    java應(yīng)用領(lǐng)域分析

    在這篇文章里,我們將更確切地知道哪種類型的項(xiàng)目是使用Java完成的,Java運(yùn)用在哪些主要領(lǐng)域和部門,以及Java在現(xiàn)實(shí)世界的哪些地方起著什么作用,需要的朋友可以參考下
    2017-09-09
  • 了解Java線程池執(zhí)行原理

    了解Java線程池執(zhí)行原理

    那么有沒有一種辦法使得線程可以復(fù)用,就是執(zhí)行完一個(gè)任務(wù),并不被銷毀,而是可以繼續(xù)執(zhí)行其他的任務(wù)?在Java中可以通過線程池來達(dá)到這樣的效果。下面我們來詳細(xì)了解一下吧
    2019-05-05
  • Java讀取文件的簡單實(shí)現(xiàn)方法

    Java讀取文件的簡單實(shí)現(xiàn)方法

    這篇文章主要介紹了Java讀取文件的簡單實(shí)現(xiàn)方法,通過一個(gè)讀取txt格式的log文件為例,詳細(xì)的講述了Java讀取文件的方法及原理,需要的朋友可以參考下
    2014-09-09
  • java 多態(tài)與抽象類詳解總結(jié)

    java 多態(tài)與抽象類詳解總結(jié)

    在面向?qū)ο蟮母拍钪校械膶ο蠖际峭ㄟ^類來描繪的,但是反過來,并不是所有的類都是用來描繪對象的,如果一個(gè)類中沒有包含足夠的信息來描繪一個(gè)具體的對象,這樣的類就是抽象類,而多態(tài)是同一個(gè)行為具有多個(gè)不同表現(xiàn)形式或形態(tài)的能力
    2021-11-11
  • Java實(shí)現(xiàn)發(fā)送手機(jī)短信語音驗(yàn)證功能代碼實(shí)例

    Java實(shí)現(xiàn)發(fā)送手機(jī)短信語音驗(yàn)證功能代碼實(shí)例

    這篇文章主要介紹了Java實(shí)現(xiàn)發(fā)送手機(jī)短信語音驗(yàn)證功能代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 如何通過zuul添加或修改請求參數(shù)

    如何通過zuul添加或修改請求參數(shù)

    這篇文章主要介紹了如何通過zuul添加或修改請求參數(shù)的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java虛擬機(jī)之類加載

    Java虛擬機(jī)之類加載

    這篇文章主要介紹了Java虛擬機(jī)之類加載,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05

最新評論

武宁县| 彩票| 牟定县| 讷河市| 浮梁县| 龙江县| 扶余县| 抚顺市| 海城市| 涿州市| 安西县| 西乌| 光山县| 桦甸市| 双牌县| 云阳县| 达尔| 监利县| 镇赉县| 丘北县| 鄯善县| 卢龙县| 秀山| 衡山县| 双辽市| 化州市| 永泰县| 山阳县| 新干县| 南木林县| 图们市| 仪陇县| 讷河市| 田东县| 新安县| 宝鸡市| 鹰潭市| 罗平县| 文登市| 桦川县| 环江|