欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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包一定版本一定要相同?。。。?!

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對(duì)象(excel的文檔對(duì)象)
        HSSFWorkbook wb = new HSSFWorkbook();//建立新的sheet對(duì)象(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("班級(jí)");
        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ù)是工作表的索引號(hào)。

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

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

相關(guān)文章

  • Java實(shí)現(xiàn)替換PDF中的字體功能

    Java實(shí)現(xiàn)替換PDF中的字體功能

    文檔中可通過應(yīng)用不同的字體來呈現(xiàn)不一樣的視覺效果,通過字體來實(shí)現(xiàn)文檔布局、排版等設(shè)計(jì)需要。本文將詳細(xì)為大家介紹如何利用Java實(shí)現(xiàn)替換PDF文中的字體,需要的可以參考一下
    2022-03-03
  • Java文本文件操作方法實(shí)例詳解

    Java文本文件操作方法實(shí)例詳解

    這篇文章主要介紹了Java文本文件操作方法,以實(shí)例形式較為詳細(xì)的分析了java操作文本文件的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • java中實(shí)體類轉(zhuǎn)Json的2種方法

    java中實(shí)體類轉(zhuǎn)Json的2種方法

    本篇文章中主要介紹了java中實(shí)體類轉(zhuǎn)Json的2種方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧。
    2017-01-01
  • 深入了解HttpClient的ResponseHandler接口

    深入了解HttpClient的ResponseHandler接口

    這篇文章主要為大家介紹了深入了解HttpClient的ResponseHandler接口,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • Java編程一個(gè)隨機(jī)數(shù)產(chǎn)生模塊代碼分享

    Java編程一個(gè)隨機(jī)數(shù)產(chǎn)生模塊代碼分享

    這篇文章主要介紹了Java編程一個(gè)隨機(jī)數(shù)產(chǎn)生模塊代碼分享,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • Java方法的可變參數(shù)類型實(shí)例分析

    Java方法的可變參數(shù)類型實(shí)例分析

    這篇文章主要介紹了Java方法的可變參數(shù)類型,通過實(shí)例對(duì)Java中的可變參數(shù)類型進(jìn)行了較為深入的分析,需要的朋友可以參考下
    2014-09-09
  • 為什么 Java 8 中不需要 StringBuilder 拼接字符串

    為什么 Java 8 中不需要 StringBuilder 拼接字符串

    java8中,編輯器對(duì)“+”進(jìn)行了優(yōu)化,默認(rèn)使用StringBuilder進(jìn)行拼接,所以不用顯示的使用StringBuilder了,直接用“+”就可以了。下面我們來詳細(xì)了解一下
    2019-05-05
  • Java實(shí)現(xiàn)簡易的分詞器功能

    Java實(shí)現(xiàn)簡易的分詞器功能

    搜索功能是具備數(shù)據(jù)庫功能的系統(tǒng)的一大重要特性和功能,生活中常見的搜索功能基本上都具備了分詞搜索功能.然而ES功能固然強(qiáng)大,但對(duì)于學(xué)生或小項(xiàng)目而言整合起來太費(fèi)人力物力,若是寫個(gè)分詞器就會(huì)使項(xiàng)目錦上添花,使其不僅僅是只能單關(guān)鍵詞搜索的系統(tǒng),需要的朋友可以參考下
    2021-06-06
  • 4個(gè)Java8中你需要知道的函數(shù)式接口分享

    4個(gè)Java8中你需要知道的函數(shù)式接口分享

    Java?8?中提供了許多函數(shù)式接口,包括Function、Consumer、Supplier、Predicate?等等。本文主要來和大家介紹一下它們的具體使用,需要的可以參考一下
    2023-04-04
  • Spring Security 多過濾鏈的使用詳解

    Spring Security 多過濾鏈的使用詳解

    本文主要介紹了Spring Security 多過濾鏈的使用,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07

最新評(píng)論