java读取excel获取数据写入到另外一个excel

Posted Nihaorz

tags:

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

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.nihaorz</groupId>
    <artifactId>excel_hezhan</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>net.sf.jxls</groupId>
            <artifactId>jxls-core</artifactId>
            <version>1.0.6</version>
        </dependency>
        <dependency>
            <groupId>net.sourceforge.jexcelapi</groupId>
            <artifactId>jxl</artifactId>
            <version>2.6.12</version>
        </dependency>
    </dependencies>

</project>

  

ExcelReader.java

package com.nihaorz;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DataFormatter;
import org.apache.poi.ss.usermodel.DateUtil;
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.ss.usermodel.WorkbookFactory;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ExcelReader {


    private String filePath;
    private String sheetName;
    private Workbook workBook;
    private Sheet sheet;
    private List<String> columnHeaderList;
    private List<List<String>> listData;
    private List<Map<String,String>> mapData;
    private boolean flag;

    public ExcelReader(String filePath, String sheetName) {
        this.filePath = filePath;
        this.sheetName = sheetName;
        this.flag = false;
        this.load();
    }

    public Map<String, String> getAllData(){
        Map<String, String> map = new HashMap();
        String prefix = "LEFT(\"";
        String suffix = "\",19)";
        for(int i = 0; i < listData.size(); i++){
            List<String> list = listData.get(i);
            List<String> list1 = new ArrayList();
            for(int j = 0; j < list.size(); j++){
                String str = list.get(j);
                if(str.startsWith(prefix) && str.endsWith(suffix)){
                    str = str.substring(prefix.length(), str.lastIndexOf(suffix));
                }
                list1.add(str);
            }
            map.put(list1.get(0), list.get(1));
        }
        return map;
    }

    private void load() {
        FileInputStream inStream = null;
        try {
            inStream = new FileInputStream(new File(filePath));
            workBook = WorkbookFactory.create(inStream);
            sheet = workBook.getSheet(sheetName);
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            try {
                if(inStream!=null){
                    inStream.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    private String getCellValue(Cell cell) {
        String cellValue = "";
        DataFormatter formatter = new DataFormatter();
        if (cell != null) {
            switch (cell.getCellType()) {
                case Cell.CELL_TYPE_NUMERIC:
                    if (DateUtil.isCellDateFormatted(cell)) {
                        cellValue = formatter.formatCellValue(cell);
                    } else {
                        double value = cell.getNumericCellValue();
                        int intValue = (int) value;
                        cellValue = value - intValue == 0 ? String.valueOf(intValue) : String.valueOf(value);
                    }
                    break;
                case Cell.CELL_TYPE_STRING:
                    cellValue = cell.getStringCellValue();
                    break;
                case Cell.CELL_TYPE_BOOLEAN:
                    cellValue = String.valueOf(cell.getBooleanCellValue());
                    break;
                case Cell.CELL_TYPE_FORMULA:
                    cellValue = String.valueOf(cell.getCellFormula());
                    break;
                case Cell.CELL_TYPE_BLANK:
                    cellValue = "";
                    break;
                case Cell.CELL_TYPE_ERROR:
                    cellValue = "";
                    break;
                default:
                    cellValue = cell.toString().trim();
                    break;
            }
        }
        return cellValue.trim();
    }

    private void getSheetData() {
        listData = new ArrayList<List<String>>();
        mapData = new ArrayList<Map<String, String>>();
        columnHeaderList = new ArrayList<String>();
        int numOfRows = sheet.getLastRowNum() + 1;
        for (int i = 0; i < numOfRows; i++) {
            Row row = sheet.getRow(i);
            Map<String, String> map = new HashMap<String, String>();
            List<String> list = new ArrayList<String>();
            if (row != null) {
                for (int j = 0; j < row.getLastCellNum(); j++) {
                    Cell cell = row.getCell(j);
                    if (i == 0){
                        columnHeaderList.add(getCellValue(cell));
                    }
                    else{
                        map.put(columnHeaderList.get(j), this.getCellValue(cell));
                    }
                    list.add(this.getCellValue(cell));
                }
            }
            if (i > 0){
                mapData.add(map);
            }
            listData.add(list);
        }
        flag = true;
    }

    public String getCellData(int row, int col){
        if(row<=0 || col<=0){
            return null;
        }
        if(!flag){
            this.getSheetData();
        }
        if(listData.size()>=row && listData.get(row-1).size()>=col){
            return listData.get(row-1).get(col-1);
        }else{
            return null;
        }
    }

    public String getCellData(int row, String headerName){
        if(row<=0){
            return null;
        }
        if(!flag){
            this.getSheetData();
        }
        if(mapData.size()>=row && mapData.get(row-1).containsKey(headerName)){
            return mapData.get(row-1).get(headerName);
        }else{
            return null;
        }
    }

}

  

ExcelTest.java

package com.nihaorz;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;

import java.io.File;
import java.util.Map;

public class ExcelTest {

    public static void main(String[] args) throws Exception {
        ExcelReader eh = new ExcelReader("C:\\Users\\Nihaorz\\Desktop\\贺站.xlsx", "Sheet1");
        eh.getCellData(1,1);
        Map<String, String> map = eh.getAllData();

        String filePath = "C:\\Users\\Nihaorz\\Desktop\\待修改.xls";
        // Excel获得文件
        Workbook workBook = Workbook.getWorkbook(new File(filePath));
        // 打开一个文件的副本,并且指定数据写回到原文件
        WritableWorkbook book = Workbook.createWorkbook(new File(filePath), workBook);

        Sheet sheet = book.getSheet(0);
        WritableSheet wsheet = book.getSheet(0);
        int colunms = sheet.getColumns();
        for (int i = 0; i < sheet.getRows(); i++) {
            String number = sheet.getCell(4, i).getContents().trim();
            if(map.containsKey(number)){
                Cell cell = wsheet.getCell(13, i);
                String address = cell.getContents().trim();
                if(address == null  || "".equals(address)){
                    Label label = new Label(colunms, i, map.get(number), getDataCellFormat());
                    wsheet.addCell(label);
                }
            }
        }
        book.write();
        book.close();
    }

    public static WritableCellFormat getDataCellFormat() {
        WritableFont wf = new WritableFont(WritableFont.TIMES, 10, WritableFont.BOLD, false);
        WritableCellFormat wcf = new WritableCellFormat(wf);
        return wcf;
    }

}

  

以上是关于java读取excel获取数据写入到另外一个excel的主要内容,如果未能解决你的问题,请参考以下文章

java中怎么把数据写入excel

如何用java把数据写入到excel

python 读取excel数据插入到另外一个excel

从excel表格读取数据用Java代码实现批量上传写入数据库

java 读CSV 和 Excel

Jmeter_如何获取结果写到excel