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

java 實現(xiàn)數(shù)據(jù)導(dǎo)入導(dǎo)出

這篇具有很好參考價值的文章主要介紹了java 實現(xiàn)數(shù)據(jù)導(dǎo)入導(dǎo)出。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

官方文檔(完整功能展示):地址

依賴

<!-- easyexcel導(dǎo)入導(dǎo)出 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>3.2.1</version>
        </dependency>

導(dǎo)出
1.隨便一個實體類(默認不管加不加@ExcelProperty的注解的所有字段都會參與讀寫,若某字段不想?yún)⑴c,可在字段上添加@ExcelIgnore。若只想加@ExcelProperty才參與,則類上加@ExcelIgnoreUnannotated)更多注解使用

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    @ExcelProperty("用戶id")
    private Long uid;
    @ExcelProperty("用戶名")
    private String uname;
    @ExcelProperty("用戶性別")
    private int usex;
    @ExcelProperty("注冊時間")
    private Date udate;
}

2.編一個方法用于返回要導(dǎo)出的數(shù)據(jù)

//編數(shù)據(jù)用作導(dǎo)出
    private List<User> data() {
        List<User> list = ListUtils.newArrayList();
        Random random = new Random();
        for (long i = 0; i < 10; i++) {
            User data = new User(i,"用戶"+i,random.nextInt(2),new Date());
            list.add(data);
        }
        return list;
    }

3.1 用戶訪問接口時進行下載

@GetMapping(value = "ceshi")
    public void ceshi(HttpServletResponse response, @Param("fileName") String fileName) throws IOException {
        ServletOutputStream out = response.getOutputStream();
        response.setContentType("multipart/form-data");
        response.setCharacterEncoding("utf-8");
        response.setHeader("Content-Disposition", "attachment;filename*=utf-8'zh_cn'" + URLEncoder.encode(fileName + ".xlsx", "UTF-8"));
        EasyExcel.write(out, User.class).sheet("模板").doWrite( data() );//User.class是要到出數(shù)據(jù)的實體類,data()是要導(dǎo)出的數(shù)據(jù)
        out.flush();//使用戶下載文件
    }

3.2 直接規(guī)定一個地址進行保存

@GetMapping(value = "ceshi")
    public void ceshi(){
        String fileName = "E:\\ceshi\\" + "simpleWrite" + System.currentTimeMillis() + ".xlsx";
        EasyExcel.write(fileName, User.class).sheet("模板").doWrite(data());
    }

請求接口方法:鏈接
我這里是直接瀏覽器輸入url訪問的

測試3.1,效果

java導(dǎo)入導(dǎo)出,java,開發(fā)語言,servlet
測試3.2,效果

java導(dǎo)入導(dǎo)出,java,開發(fā)語言,servlet
導(dǎo)入
1.隨便一個實體類

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    @ExcelProperty("用戶id")
    private Long uid;
    @ExcelProperty("用戶名")
    private String uname;
    @ExcelProperty("用戶性別")
    private int usex;
    @ExcelProperty("注冊時間")
    private Date udate;
}

2.一個dao用于存儲至數(shù)據(jù)庫,此處隨便寫的用于演示

public class DemoDAO {
    public void save(List<User> list){
        System.out.println("調(diào)用-------------------------");
        list.forEach(x->{
            System.out.println(x);
        });
    }
}

3.官網(wǎng)復(fù)制的監(jiān)聽類


import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.listener.ReadListener;
import com.alibaba.excel.util.ListUtils;
import lombok.extern.slf4j.Slf4j;

import java.util.List;

// 有個很重要的點 UserListener 不能被spring管理,要每次讀取excel都要new,然后里面用到spring可以構(gòu)造方法傳進去
@Slf4j
public class UserListener implements ReadListener<User> {

    /**
     * 每隔5條存儲數(shù)據(jù)庫,實際使用中可以100條,然后清理list ,方便內(nèi)存回收
     */
    private static final int BATCH_COUNT = 5;
    /**
     * 緩存的數(shù)據(jù)
     */
    private List<User> userDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
    /**
     * 假設(shè)這個是一個DAO,當然有業(yè)務(wù)邏輯這個也可以是一個service。當然如果不用存儲這個對象沒用。
     */
    private DemoDAO demoDAO;

    public UserListener() {
        // 這里是demo,所以隨便new一個。實際使用如果到了spring,請使用下面的有參構(gòu)造函數(shù)
        demoDAO = new DemoDAO();
    }

    /**
     * 如果使用了spring,請使用這個構(gòu)造方法。每次創(chuàng)建Listener的時候需要把spring管理的類傳進來
     *
     * @param demoDAO
     */
    public UserListener(DemoDAO demoDAO) {
        this.demoDAO = demoDAO;
    }

    /**
     * 這個每一條數(shù)據(jù)解析都會來調(diào)用
     *
     * @param data    one row value. Is is same as {@link AnalysisContext#readRowHolder()}
     * @param context
     */
    @Override
    public void invoke(User data, AnalysisContext context) {
        log.info("解析到一條數(shù)據(jù):{}");
        userDataList.add(data);
        // 達到BATCH_COUNT了,需要去存儲一次數(shù)據(jù)庫,防止數(shù)據(jù)幾萬條數(shù)據(jù)在內(nèi)存,容易OOM
        if (userDataList.size() >= BATCH_COUNT) {
            saveData();
            // 存儲完成清理 list
            userDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
        }
    }

    /**
     * 所有數(shù)據(jù)解析完成了 都會來調(diào)用
     *
     * @param context
     */
    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        // 這里也要保存數(shù)據(jù),確保最后遺留的數(shù)據(jù)也存儲到數(shù)據(jù)庫
        saveData();
        log.info("所有數(shù)據(jù)解析完成!");
    }

    /**
     * 加上存儲數(shù)據(jù)庫
     */
    private void saveData() {
        log.info("{}條數(shù)據(jù),開始存儲數(shù)據(jù)庫!", userDataList.size());
        demoDAO.save(userDataList);
        log.info("存儲數(shù)據(jù)庫成功!");
    }
}

4.測試接口

@GetMapping(value = "ceshi1")
    public void ceshi1() {
        String fileName="E:\\ceshi\\1678090270171.xlsx";
        EasyExcel.read(fileName, User.class, new UserListener()).sheet().doRead();
    }

第一個參數(shù)也可是輸入流,如multipartFile.getInputStream()
java導(dǎo)入導(dǎo)出,java,開發(fā)語言,servlet

效果java導(dǎo)入導(dǎo)出,java,開發(fā)語言,servlet
對于需要字典的字段(基本數(shù)據(jù)類型封裝類寫法)
1.修改實體類
java導(dǎo)入導(dǎo)出,java,開發(fā)語言,servlet

 @ExcelProperty(value = "用戶性別",converter = UsexConverter.class)
    private Integer usex;

2.類型裝換器

public class UsexConverter  implements Converter<Integer> {

    @Override
    public Class<?> supportJavaTypeKey() {
        return Integer.class;
    }

    @Override
    public CellDataTypeEnum supportExcelTypeKey() {
        return CellDataTypeEnum.NUMBER;
    }

    @Override
    public Integer convertToJavaData(ReadCellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
        // 導(dǎo)入時字符串轉(zhuǎn)換數(shù)字
        switch (cellData.getStringValue()){
            case "男" : return 1;
            case "女" : return 0;
            default: return -1;
        }
    }

    /**
     * 將從數(shù)據(jù)庫中查到的數(shù)據(jù)轉(zhuǎn)換為 Excel 展示的數(shù)據(jù)
     * @param value 枚舉對象
     */
    @Override
    public WriteCellData<?> convertToExcelData(Integer value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
        String sexName;
        switch (value){
            case 0 : sexName= "女";break;
            case 1 : sexName= "男";break;
            default: sexName="其他";
        }
        return new WriteCellData<>(sexName);
    }
}

導(dǎo)出效果
java導(dǎo)入導(dǎo)出,java,開發(fā)語言,servlet

導(dǎo)入效果

java導(dǎo)入導(dǎo)出,java,開發(fā)語言,servlet

對于需要字典的字段(枚舉寫法)
1.添加枚舉類

public enum UsexEnum {
    MAN("男",1),WOMEN("女",0),UNKNOWN("未知",-1);

    String name;
    int value;

    UsexEnum(String name,int value){
        this.name = name;
        this.value = value;
    }
    /*
       根據(jù)name值返回枚舉類
     */
    public static UsexEnum getUsexEnumofName(String name){
        for (UsexEnum us : UsexEnum.values())
            if (name.equals(us.getName()))
                return us;
        return UNKNOWN;
    }
    String getName(){
        return name;
    }
    int getValue(){
        return value;
    }

    @Override
    public String toString(){
        return name;
    }
}

2.修改實體類
java導(dǎo)入導(dǎo)出,java,開發(fā)語言,servlet

@ExcelProperty(value = "用戶性別",converter = UsexConverter.class)//UsexConverter為類型裝換器
    private UsexEnum usex;

3.類型裝換器

package Ceshi.daorudaochu;


import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.data.ReadCellData;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import lombok.extern.slf4j.Slf4j;

/**
 * Excel 性別類型裝換器
 *
 * @author wang suo
 * @version 1.0
 * @date 2021/9/14 15:06
 */
@Slf4j
public class UsexConverter  implements Converter<UsexEnum> {

    @Override
    public Class<?> supportJavaTypeKey() {
        return UsexEnum.class;
    }

    @Override
    public CellDataTypeEnum supportExcelTypeKey() {
        return null;
    }

	/**
     *導(dǎo)入觸發(fā)
     * @param value 枚舉對象
     */
    @Override
    public UsexEnum convertToJavaData(ReadCellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
        // 導(dǎo)入時根據(jù)表格name值轉(zhuǎn)化為枚舉對象
        return UsexEnum.getUsexEnumofName(cellData.getStringValue());
    }

    /**
     * 導(dǎo)出觸發(fā),將從數(shù)據(jù)庫中查到的數(shù)據(jù)轉(zhuǎn)換為 Excel 展示的數(shù)據(jù)
     * @param value 枚舉對象
     */
    @Override
    public WriteCellData<?> convertToExcelData(UsexEnum value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
        // 將枚舉類型按照 key 傳值
        return new WriteCellData<UsexEnum>(String.valueOf(value));
    }
}

導(dǎo)出效果
java導(dǎo)入導(dǎo)出,java,開發(fā)語言,servlet
導(dǎo)入效果(里邊是空時沒觸發(fā)類型轉(zhuǎn)換)java導(dǎo)入導(dǎo)出,java,開發(fā)語言,servlet

導(dǎo)出時添加下拉選項
1.添加自定義攔截器

public class CustomSheetWriteHandler  implements SheetWriteHandler {
    @Override
    public void afterSheetCreate(SheetWriteHandlerContext context) {
        // 區(qū)間設(shè)置 第一列第一行和第二行的數(shù)據(jù)。由于第一行是頭,所以第一、二行的數(shù)據(jù)實際上是第二三行
        CellRangeAddressList cellRangeAddressList = new CellRangeAddressList(1, 0, 2, 2);//四個參數(shù)分別為起始行號,終止行號,起始列號,終止列號。均從0開始
        DataValidationHelper helper = context.getWriteSheetHolder().getSheet().getDataValidationHelper();
        DataValidationConstraint constraint = helper.createExplicitListConstraint(new String[] {"男", "女"});//下拉框值
        DataValidation dataValidation = helper.createValidation(constraint, cellRangeAddressList);
        context.getWriteSheetHolder().getSheet().addValidationData(dataValidation);
    }
}

2.導(dǎo)出時添加(此處為鏈式操作,可添加多個攔截器)

.registerWriteHandler(new CustomSheetWriteHandler())

java導(dǎo)入導(dǎo)出,java,開發(fā)語言,servlet
效果
java導(dǎo)入導(dǎo)出,java,開發(fā)語言,servlet
導(dǎo)出多個工作表文章來源地址http://www.zghlxwxcb.cn/news/detail-544381.html

ExcelWriter excelWriter = EasyExcel.write("E:\\ceshi\\1678090270171.xlsx").build();
  //具體工作表
 WriteSheet writeSheet = EasyExcel.writerSheet("Sheet1").head(xxx.class).build();//head根據(jù)實體類確定表頭,不加就直接填充數(shù)據(jù)
excelWriter.write(result,writeSheet);//向表填充數(shù)據(jù)
 writeSheet = EasyExcel.writerSheet("表2").build();//writerSheet隨便起,不是指定要填哪個表而是第二個表叫表2
  excelWriter.write(result2,writeSheet);
  writeSheet = EasyExcel.writerSheet("Sheet3").build();//有幾個writeSheet最后的xlsx就有幾個工作表,sheel順序按照代碼順序
  excelWriter.write(result3,writeSheet);
  excelWriter.finish();//關(guān)閉流(必須)

到了這里,關(guān)于java 實現(xiàn)數(shù)據(jù)導(dǎo)入導(dǎo)出的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • Java導(dǎo)出Excel模板,導(dǎo)出數(shù)據(jù)到指定模板,通過模板導(dǎo)入數(shù)據(jù)(一)

    Java導(dǎo)出Excel模板,導(dǎo)出數(shù)據(jù)到指定模板,通過模板導(dǎo)入數(shù)據(jù)(一)

    本文章主要是介紹阿里巴巴的easyexcel的使用 1. 首先需要我們導(dǎo)入easyexcel的依賴包 2. 前期工作準備 編寫相關(guān)導(dǎo)出模板和導(dǎo)入模板。在項目的resources下創(chuàng)建文件夾,命名為excel 導(dǎo)出模板(此處僅做示例,字段根據(jù)自己項目來): ?導(dǎo)入模板(導(dǎo)入時需要哪些字段根據(jù)自己項目業(yè)

    2024年02月03日
    瀏覽(30)
  • Java 使用 EasyExcel 實現(xiàn)導(dǎo)入導(dǎo)出(新手篇教程)

    Java 使用 EasyExcel 實現(xiàn)導(dǎo)入導(dǎo)出(新手篇教程)

    官網(wǎng)鎮(zhèn)樓↓,覺得我寫的不好的同學可以去官網(wǎng)看哦 EasyExcel 示例: 如上一個簡易 Excel 表格,表頭占了兩行,且第三列開始才為有效數(shù)據(jù),那么我們應(yīng)該如何導(dǎo)入? 建造實體類 首先無論是導(dǎo)入還是導(dǎo)出,都需要先建對應(yīng)的實體類 ?如圖所示,因為我的示例 Excel 一共需要讀

    2024年04月17日
    瀏覽(29)
  • 基于.Net開發(fā)的數(shù)據(jù)庫導(dǎo)入導(dǎo)出的開源項目

    基于.Net開發(fā)的數(shù)據(jù)庫導(dǎo)入導(dǎo)出的開源項目

    在項目開發(fā)過程中,我們經(jīng)常碰到從數(shù)據(jù)庫導(dǎo)入導(dǎo)出的需求,雖然這樣的功能不是很復(fù)雜,但是往往我們都會碰到一些問題。 比如導(dǎo)入的Excel格式問題、Excetl中圖片導(dǎo)入問題,導(dǎo)出的需求為了方便客戶查看,會面臨更多個性化的需求,為了滿足這些需求,開發(fā)還是比較繁瑣的

    2024年02月02日
    瀏覽(28)
  • Java POI 百萬規(guī)模數(shù)據(jù)的導(dǎo)入和導(dǎo)出

    Java POI 百萬規(guī)模數(shù)據(jù)的導(dǎo)入和導(dǎo)出

    使用POI基于事件模式解析案例提供的Excel文件 **用戶模式:**加載并讀取Excel時,是通過一次性的將所有數(shù)據(jù)加載到內(nèi)存中再去解析每個單元格內(nèi)容。當Excel數(shù)據(jù)量較大時,由于不同的運行環(huán)境可能會造成內(nèi)存不足甚至OOM異常。 例如讀取我們剛剛導(dǎo)出的百萬數(shù)據(jù): 會直接報內(nèi)存

    2024年02月08日
    瀏覽(29)
  • Java原生POI實現(xiàn)的Excel導(dǎo)入導(dǎo)出(簡單易懂)

    Java原生POI實現(xiàn)的Excel導(dǎo)入導(dǎo)出(簡單易懂)

    首先是Controller入口方法 這個接口在postman上傳參是下面這樣的: 注意里面的參數(shù)名稱要和接口上的一致,不然會拿不到值 還有file那里key的類型要選file類型的,這樣就可以在后面value里面選擇文件 然后是Service方法 首先是Controller入口 strJson是用來接受其它參數(shù)的,一般導(dǎo)出的

    2024年02月11日
    瀏覽(27)
  • poi技術(shù)實現(xiàn)數(shù)據(jù)的導(dǎo)入與導(dǎo)出

    poi技術(shù)實現(xiàn)數(shù)據(jù)的導(dǎo)入與導(dǎo)出

    前言: POI是Apache軟件基金會的開放源碼函式庫,POI提供API給Java程序?qū)icrosoft Office格式檔案讀和寫的功能。 Microsoft Office:是由微軟公司開發(fā)的一套 辦公軟件套裝 。常用組件有Word、Excel、PowerPoint等。 POI也用于操作Excel(電子表格) 一個excel文件就是一個工作簿W(wǎng)orkbook 一個工

    2024年02月05日
    瀏覽(19)
  • 基于Luckysheet實現(xiàn)的協(xié)同編輯在線表格支持在線導(dǎo)入數(shù)據(jù)庫,前端導(dǎo)出,前端導(dǎo)入,后端導(dǎo)出

    基于Luckysheet實現(xiàn)的協(xié)同編輯在線表格支持在線導(dǎo)入數(shù)據(jù)庫,前端導(dǎo)出,前端導(dǎo)入,后端導(dǎo)出

    提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 提示:這里可以添加本文要記錄的大概內(nèi)容: 這兩年,在線表格協(xié)作工具越來越火,但開源界一直沒有相關(guān)的實現(xiàn),被壟斷在幾個大廠手上,隨著Luckysheet 的橫空出世,開源界終于也有一個漂亮能打的在

    2024年02月11日
    瀏覽(30)
  • java實現(xiàn)word導(dǎo)入導(dǎo)出富文本(含圖片)-附完整測試用例

    java實現(xiàn)word導(dǎo)入導(dǎo)出富文本(含圖片)-附完整測試用例

    1、解決富文本導(dǎo)入導(dǎo)出依賴兼容問題 2、處理富文本和非富文本內(nèi)容 3、解決webp格式通過java下載不了問題,如果要用到富文本導(dǎo)出,將來勢必是會碰到的bug,這里提前給提出來并解決,測試用例中有給圖片測試。 4、在原有方法上優(yōu)化,比如處理等比縮小圖片、將圖片本地路

    2024年02月03日
    瀏覽(27)
  • poi實現(xiàn)excel文件導(dǎo)入導(dǎo)出(基本數(shù)據(jù)導(dǎo)出、含格式導(dǎo)出、含批注導(dǎo)出、含圖片圖表導(dǎo)出)——springboot

    poi實現(xiàn)excel文件導(dǎo)入導(dǎo)出(基本數(shù)據(jù)導(dǎo)出、含格式導(dǎo)出、含批注導(dǎo)出、含圖片圖表導(dǎo)出)——springboot

    本文主要是介紹springboot + poi實現(xiàn)基本的excel文件導(dǎo)入導(dǎo)出,包含數(shù)據(jù)導(dǎo)出導(dǎo)入時數(shù)據(jù)的其他需求校驗,導(dǎo)出含有批注信息、導(dǎo)出含有圖片信息、導(dǎo)出含有圖表信息等的介紹等等,主要是一個demo盡可能簡單明了的來介紹相關(guān)功能即可。有什么問題可以在留言哦!并在文章末尾附

    2024年02月08日
    瀏覽(29)
  • Apache POI實現(xiàn)Excel導(dǎo)入讀取數(shù)據(jù)和寫入數(shù)據(jù)并導(dǎo)出

    Apache POI POI介紹 Apache POI是用Java編寫的免費開源的跨平臺的Java API,Apache POI提供API給Java程序?qū)icrosoft Office格式檔案讀和寫的功能,其中使用最多的就是使用POI操作Excel文件。 maven坐標: POI結(jié)構(gòu): 入門案例 ExcelTest .java文件 從Excel文件讀取數(shù)據(jù)

    2024年02月12日
    瀏覽(33)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包