java Workbook 读写excel

Posted 蔡苗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java Workbook 读写excel相关的知识,希望对你有一定的参考价值。

1. 读取具体位置的excel数据

 

package com.royan.weakey.platform.common.excel;

import lombok.extern.slf4j.Slf4j;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

/**
 * read  a excel file of the definite path
 */
@Slf4j
public class ReadExcel<T> {


    public static void main(String[] args) {
        ReadExcel<String> obj = new ReadExcel<>();
        File file = new File("path");
        List<List<List>> excelList = obj.readExcel(file);
        excelList.forEach(sheet -> {
            sheet.forEach(row -> {
                row.forEach(column -> {
                    System.out.print(column + " ");
                });
                System.out.println();
            });

        });

    }


    public List<List<List>> readExcel(File file) {
        try {
            //create input stream ,get data
            InputStream stream = new FileInputStream(file);
            Workbook wb = new HSSFWorkbook(stream);
            int sheetSize = wb.getNumberOfSheets();
            List<List<List>> sheetList = new ArrayList<>();
            for (int i = 0; i < sheetSize; i++) {
                List<List> outerList = new ArrayList<>();
                Sheet sheet = wb.getSheetAt(i);
                for (int j = 0; j <= sheet.getLastRowNum(); j++) {
                    List<String> list = new ArrayList<>();
                    for (int c = 0; c < sheet.getRow(j).getLastCellNum(); c++) {
                        Cell cell = sheet.getRow(j).getCell(c);
                        String str = cell.getStringCellValue();
                        list.add(str);
                    }
                    outerList.add(list);
                }
                sheetList.add(outerList);
            }
            return sheetList;

        } catch (Exception e) {
            log.info(e.getMessage());
        }
        return null;

    }


}

 

 

 

 

2.将数据写入指定的位置的excel

 

 

 

package com.royan.weakey.platform.common.excel;

import com.google.common.collect.Lists;
import com.sun.xml.internal.ws.api.streaming.XMLStreamReaderFactory;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.*;
import java.util.*;

/**
 * writeExcel
 */
@Slf4j
public class WriteExcel {
    private static final String EXEL_XLS = "xls";
    private static final String EXEL_XLSX = "xlsx";


    public static void writeExcel(List<Map> dataList, String filePath, List<String> header) {
        OutputStream out = null;
        try {

            /**
             read  excel document
             */
            File file = new File(filePath);
            Workbook workbook = null;
            if (file.isDirectory()) {
                // default create .xls
                workbook = new HSSFWorkbook();
            } else if (file.getName().endsWith(".xls")) {
                workbook = new HSSFWorkbook();
            } else if (file.getName().endsWith(".xlsx")) {
                workbook = new XSSFWorkbook();
            } else
                throw new Exception("please get  .xls .xlsx end or directory,[" + filePath + "]");
            //if only support  single sheet
            Sheet sheet = workbook.createSheet("data");
            //set excel header
            Row fisrtRow = sheet.createRow(0);
            int columnCount = header.size();
            for (int h = 0; h < columnCount; h++) {
                fisrtRow.createCell(h).setCellValue(header.get(h));
            }
            /**
             * fill up  data in excel
             */
            int i = 1;
            for (Map data : dataList) {
                Row row = sheet.createRow(i);
                Object[] arrays = data.values().toArray();
                for (int j = 0; j < columnCount; j++) {
                    Object obj = arrays[j];
                    row.createCell(j).setCellValue(obj != null ? obj.toString() : "");
                }
                i++;
            }
            out = new FileOutputStream(file.isDirectory() ? filePath + "/" + header.get(0) + ".xls" : filePath);
            workbook.write(out);

        } catch (Exception e) {
            log.info("exception {}", e);
        } finally {

            try {
                if (out != null) {
                    out.flush();
                    out.close();
                }
            } catch (IOException o) {
                log.info("exception {}", o);
            }
            log.info("data output success");
        }


    }


    public static void main(String[] args) {
        Map<String, Object> dataMap = new HashMap<>();
        dataMap.put("BankName", "BankName");
        dataMap.put("Addr", "Addr");
        dataMap.put("Phone", "Phone");
        Map<String, Object> dataMap1 = new HashMap<>();
        dataMap1.put("BankName", "BankName1");
        dataMap1.put("Addr", "Addr1");
        dataMap1.put("Phone", "Phone1");
        List<String> header = new LinkedList<>();
        header.add("BankName");
        header.add("Addr");
        header.add("Phone");
        List<Map> list = new ArrayList<>();
        list.add(dataMap);
        list.add(dataMap1);
        writeExcel(list, "/Users/caibixiang/workSoftware/log", header);

    }

}

 

以上是关于java Workbook 读写excel的主要内容,如果未能解决你的问题,请参考以下文章

openpxyl模块完成excel数据读写的常用操作

python读写excel文件

python读写excel

Python读写Excel文件和正则表达式

Pythonexcel读写操作 xlrd & xlwt

Python读写excel