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

Java使用apache?poi操作excel的方式

 更新時間:2022年05月30日 11:12:21   作者:尋覓beyond  
這篇文章主要介紹了Java使用apache?poi進行excel相關(guān)操作,本文主要針對Apache?POI對excel的操作進行介紹,主要包括如何創(chuàng)建一個excel、錄入數(shù)據(jù)、讀取excel數(shù)據(jù)的方式,需要的朋友可以參考下

一.基本介紹

1.1、Apache POI介紹

  Apache POI是一個可以進行微軟的文檔進行開源庫,可以操作的文檔類型包括word、ppt、excel、visio、outlook....

  本文主要針對Apache POI對excel的操作進行介紹,主要包括如何創(chuàng)建一個excel、錄入數(shù)據(jù)、讀取excel數(shù)據(jù)的方式。

  參考官方文檔:

  1.首頁:https://poi.apache.org/

  2.Excel文檔介紹,使用方式

1.2、HSSF和XSSF

  在POI中,如果要操作Excel,可以有兩種操作“模式”,分別是HSSF和XSSF,其中HSSF可以處理win97以及低于2007的excel,而XSSF可以用于處理2007以及更高的版本excel,所以我們一般都會使用XSSF。

  有一個很重要的術(shù)語:工作薄,其實可以理解為“文檔”,excel、word,都屬于工作簿,英文workbook。

1.3、引入依賴

  只需要導(dǎo)入poi-ooxml這個庫即可。

<dependencies>
    <!-- poi庫 -->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>4.1.2</version>
    </dependency>
 
    <!-- 示例以單元測試的形式,所以需要導(dǎo)入junit -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13</version>
    </dependency>
</dependencies>

二.利用poi庫創(chuàng)建excel

2.1、創(chuàng)建一個空excel

  下面的代碼運行后

package cn.ganlixin.poi;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.junit.Test;
import java.io.*;
public class CreateExcelTest {
    /**
     * 創(chuàng)建一個空的Excel文件
     */
    @Test
    public void testCreateEmptyExcel() throws IOException {
        // 創(chuàng)建文件
        BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream("data.xlsx"));
        // 創(chuàng)建工作簿類(所有要寫入excel的數(shù)據(jù),都將保存在workbook中)
        XSSFWorkbook workbook = new XSSFWorkbook();
        // 將workbook中的數(shù)據(jù)寫入到文件中。
        workbook.write(outputStream);
        // 關(guān)閉
        workbook.close();
        outputStream.close();
    }
}

2.2、簡單演示寫入excel內(nèi)容

  下面演示創(chuàng)建一個data.xlsx,并在“my-sheet-1”sheet內(nèi)的第5行第3列寫入一個“hello world”:

package cn.ganlixin.poi;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.junit.Test;
import java.io.*;
public class CreateExcelTest {
    /**
     * 簡單演示如何寫入數(shù)據(jù)內(nèi)容
     */
    @Test
    public void testCreateSimpleWorkbook() throws IOException {
        // 指定創(chuàng)建的excel文件名稱
        BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream("data.xlsx"));
        // 定義一個工作?。ㄋ幸獙懭雃xcel的數(shù)據(jù),都將保存在workbook中)
        XSSFWorkbook workbook = new XSSFWorkbook();
        // 創(chuàng)建一個sheet
        XSSFSheet sheet = workbook.createSheet("my-sheet-1");
        // 開始寫入數(shù)據(jù)流程,2大步:1、定位到單元格,2、寫入數(shù)據(jù);定位單元格,需要通過行、列配合指定。
        // step1: 先選擇第幾行(0表示第一行),下面表示在第6行
        XSSFRow row = sheet.createRow(5);
        // step2:選擇第幾列(0表示第一列),注意,這里的第幾列,是在上面指定的row基礎(chǔ)上,也就是第6行,第3列
        XSSFCell cell = row.createCell(2);
        // step3:設(shè)置單元格的數(shù)據(jù)(寫入數(shù)據(jù))
        cell.setCellValue("hello world");
        // 執(zhí)行寫入操作
        workbook.write(outputStream);
        workbook.close();
        outputStream.flush();
        outputStream.close();
    }
}

  運行后,下面是生成的excel:

2.3、通常的寫入數(shù)據(jù)流程

  一般寫入excel的數(shù)據(jù)都是結(jié)構(gòu)化的(類似于數(shù)據(jù)庫表的結(jié)構(gòu)),下面是一個示例,創(chuàng)建一個users.xlsx文檔:

package cn.ganlixin.poi;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.junit.Test;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class CreateExcelTest {
    private static class User {
        private Integer id;
        private String name;
        private Integer age;
        private String addr;
        // 避免占用篇幅,所以省略了構(gòu)造方法、getter、setter
    }
    /**
     * 寫入結(jié)構(gòu)化的用戶信息數(shù)據(jù)
     */
    @Test
    public void testCreateUsersExcel() throws IOException {
        List<User> userList = new ArrayList<>();
        userList.add(new User(1, "abc", 99, "北京"));
        userList.add(new User(2, "lol", 77, "上海"));
        userList.add(new User(3, "qaq", 88, "深圳"));
        userList.add(new User(4, "owo", 66, "杭州"));
        // 指定創(chuàng)建的excel文件名稱
        BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream("users.xlsx"));
        // 定義一個工作?。ㄋ幸獙懭雃xcel的數(shù)據(jù),都將保存在workbook中)
        XSSFWorkbook workbook = new XSSFWorkbook();
        // 創(chuàng)建一個sheet
        XSSFSheet sheet = workbook.createSheet("my-sheet");
        // 第一行,為表頭,需要單獨寫入,下面是錯誤方式,因為在反復(fù)的創(chuàng)建第1行(rowNumber為0)
        /*
        sheet.createRow(0).createCell(0).setCellValue("編號");
        sheet.createRow(0).createCell(1).setCellValue("姓名");
        sheet.createRow(0).createCell(2).setCellValue("年齡");
        sheet.createRow(0).createCell(3).setCellValue("城市");
         */
        // 正確方式
        XSSFRow head = sheet.createRow(0);
        head.createCell(0).setCellValue("編號");
        head.createCell(1).setCellValue("姓名");
        head.createCell(2).setCellValue("年齡");
        head.createCell(3).setCellValue("城市");
        // 接下來遍歷要錄入的數(shù)據(jù)(建議使用for,并且從第2行開始,也就是rowNumber為1,因為表頭占了一行)
        for (int rowNumber = 1, index = 0; index < userList.size(); index++, rowNumber++) {
            User user = userList.get(index);
            // 寫入數(shù)據(jù)流程,1、定位到單元格,2、寫入數(shù)據(jù);定位單元格,需要通過行、列配合指定。
            XSSFRow row = sheet.createRow(rowNumber);
            row.createCell(0).setCellValue(user.getId());
            row.createCell(1).setCellValue(user.getName());
            row.createCell(2).setCellValue(user.getAge());
            row.createCell(3).setCellValue(user.getAddr());
        }
        // 執(zhí)行寫入操作
        workbook.write(outputStream);
        workbook.close();
        outputStream.flush();
        outputStream.close();
    }
}

  生成的excel如下:

三.使用POI讀取Excel內(nèi)容

3.1、讀取excel示例

  下面針對上面創(chuàng)建的users.xlsx進行讀取并打印

package cn.ganlixin.poi;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.junit.Test;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
public class ReadExcelTest {
    @Test
    public void testReadUsersExcel() throws IOException {
        // 指定excel文件,創(chuàng)建緩存輸入流
        BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream("users.xlsx"));
        // 直接傳入輸入流即可,此時excel就已經(jīng)解析了
        XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
        // 選擇要處理的sheet名稱
        XSSFSheet sheet = workbook.getSheet("my-sheet");
        // 第一行表頭,單獨處理
        // 迭代遍歷sheet剩余的每一行
        for (int rowNum = 0; rowNum < sheet.getPhysicalNumberOfRows(); rowNum++) {
            if (rowNum == 0) { // 讀取第一行(表頭)
                XSSFRow head = sheet.getRow(rowNum);
                String headColumn_1 = head.getCell(0).getStringCellValue();
                String headColumn_2 = head.getCell(1).getStringCellValue();
                String headColumn_3 = head.getCell(2).getStringCellValue();
                String headColumn_4 = head.getCell(3).getStringCellValue();
                String headStr = String.format("%s\t%s\t%s\t%s", headColumn_1, headColumn_2, headColumn_3, headColumn_4);
                System.out.println(headStr);
            } else { // 非表頭(注意讀取的時候要注意單元格內(nèi)數(shù)據(jù)的格式,要使用正確的讀取方法)
                XSSFRow row = sheet.getRow(rowNum);
                int id = (int) row.getCell(0).getNumericCellValue();
                String name = row.getCell(1).getStringCellValue();
                int age = (int) row.getCell(2).getNumericCellValue();
                String addr = row.getCell(3).getStringCellValue();
                String rowContent = String.format("%s\t%s\t%s\t%s", id, name, age, addr);
                System.out.println(rowContent);
            }
        }
        workbook.close();
        inputStream.close();
    }
}

  運行輸出如下:

到此這篇關(guān)于Java使用apache poi進行excel相關(guān)操作的文章就介紹到這了,更多相關(guān)java  apache poi操作excel內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • @Valid 校驗無效,BindingResult未獲得錯誤的解決

    @Valid 校驗無效,BindingResult未獲得錯誤的解決

    這篇文章主要介紹了@Valid 校驗無效,BindingResult未獲得錯誤的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 詳解springboot測試類注解

    詳解springboot測試類注解

    這篇文章主要介紹了springboot測試類注解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • 為什么Spring官方推薦的@Transational還能導(dǎo)致生產(chǎn)事故

    為什么Spring官方推薦的@Transational還能導(dǎo)致生產(chǎn)事故

    在Spring中進行事務(wù)管理非常簡單,只需要在方法上加上注解@Transactional,那么為什么Spring官方推薦的@Transational還能導(dǎo)致生產(chǎn)事故,本文就詳細(xì)的介紹一下
    2021-11-11
  • MyBatis多對多關(guān)聯(lián)映射創(chuàng)建示例

    MyBatis多對多關(guān)聯(lián)映射創(chuàng)建示例

    這篇文章主要為大家介紹了MyBatis多對多關(guān)聯(lián)映射的創(chuàng)建示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • Java內(nèi)存模型final的內(nèi)存語義

    Java內(nèi)存模型final的內(nèi)存語義

    這篇文章主要介紹了Java內(nèi)存模型final的內(nèi)存語義,上篇介紹volatile的內(nèi)存語義,本文講述的是final的內(nèi)存語義,相比之下,final域的讀和寫更像是普通變量的訪問。下面我們一起來看看文章學(xué)校內(nèi)容吧,需要的朋友可以參考一下
    2021-11-11
  • Java實現(xiàn)FIFO、LRU、LFU、OPT頁面置換算法

    Java實現(xiàn)FIFO、LRU、LFU、OPT頁面置換算法

    本文主要介紹了Java實現(xiàn)FIFO、LRU、LFU、OPT頁面置換算法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • IDEA 2020.1 版自動導(dǎo)入MAVEN依賴的方法(新版MAVEN無法自動導(dǎo)入/更新POM依賴、MAVEN設(shè)置自動更新、自動更新快捷鍵)

    IDEA 2020.1 版自動導(dǎo)入MAVEN依賴的方法(新版MAVEN無法自動導(dǎo)入/更新POM依賴、MAVEN設(shè)置自動更

    這篇文章主要介紹了IDEA 2020.1 版自動導(dǎo)入MAVEN依賴的方法(新版MAVEN無法自動導(dǎo)入/更新POM依賴、MAVEN設(shè)置自動更新、自動更新快捷鍵),需要的朋友可以參考下
    2020-08-08
  • SpringBoot中打印SQL語句的幾種方法實現(xiàn)

    SpringBoot中打印SQL語句的幾種方法實現(xiàn)

    本文主要介紹了SpringBoot中打印SQL語句的幾種方法實現(xiàn),,通過打印SQL語句可以幫助開發(fā)人員快速了解數(shù)據(jù)庫的操作情況,進而進行性能分析和調(diào)試,感興趣的可以了解一下
    2023-11-11
  • idea中springboot項目創(chuàng)建后追加依賴

    idea中springboot項目創(chuàng)建后追加依賴

    在項目創(chuàng)建的時候選擇好依賴創(chuàng)建項目,之后追加依賴不是很方便,本文就來介紹一下idea中springboot項目創(chuàng)建后追加依賴,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • maven-compiler-plugin版本指定方式

    maven-compiler-plugin版本指定方式

    這篇文章主要介紹了maven-compiler-plugin版本指定方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01

最新評論

小金县| 鞍山市| 桂林市| 常德市| 太保市| 集贤县| 新化县| 开封县| 黄山市| 如东县| 铁岭市| 南开区| 呼伦贝尔市| 昭平县| 丽江市| 贵港市| 龙岩市| 固阳县| 策勒县| 昆明市| 乳山市| 门头沟区| 淄博市| 南丰县| 常山县| 开原市| 华蓥市| 扶沟县| 辽中县| 大渡口区| 达州市| 海城市| 南部县| 嘉善县| 江孜县| 右玉县| 腾冲县| 江阴市| 大渡口区| 天水市| 新建县|