Java 使用Apache POI读/写同一excel文件

Java 使用Apache POI读/写同一excel文件,java,excel,apache-poi,Java,Excel,Apache Poi,我想根据某些条件读取excel并写入相同的excel。 比如说 Empno Name Salary 1 jonh 2000 2 Sam 3000 3 Dean 7000 现在我的要求是 1) 要读取基于列名的数据,请说“name”,然后获取该列下的所有数据 2) 以同样的方式,基于列名说‘name’,我想再添加一行数据 将新行添加到同一excel文件后,ie数据应采用以下方式 Empno Name

我想根据某些条件读取excel并写入相同的excel。 比如说

     Empno  Name Salary
       1     jonh 2000
       2     Sam  3000
       3     Dean 7000
现在我的要求是

1) 要读取基于列名的数据,请说“name”,然后获取该列下的所有数据

2) 以同样的方式,基于列名说‘name’,我想再添加一行数据 将新行添加到同一excel文件后,ie数据应采用以下方式

       Empno  Name Salary
       1     jonh  2000
       2     Sam   3000
       3     Dean  7000
       4     Smith  8000
如何使用ApachePOI实现这一点

谁能给我举个例子。我想读取/读取相同的excel不想创建新的excel


提前感谢。

您可以参考下面我的示例程序,它可能会对您有所帮助

package com.sam.test.excel;
/**
 * @author Saminathan
 *
 */
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import org.apache.poi.POIXMLProperties;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

/**
 * Sample Java program to read and write Excel file in Java using Apache POI
 * 
 */
public class FinalFormattingExcelWriting {
@SuppressWarnings("resource")
public static void main(String[] args) throws IOException,
        InvalidFormatException {
    FinalFormattingExcelWriting exl = new FinalFormattingExcelWriting();
    // adding student info into sheet
    exl.print("Student", "1", "Student1", "abc", 50, 78, 56, 55, 46);
    exl.print("Student", "2", "Student2", "def", 60, 54, 89, 66, 79);
    exl.print("Student", "3", "Student3", "ghi", 7, 96, 75, 88, 19);
    exl.print("Student", "4", "Student4", "jkl", 89, 15, 35, 44, 78);
    exl.print("Student", "5", "Student5", "mno", 40, 49, 46, 77, 46);
    exl.print("Student", "6", "Student6", "pqr", 56, 45, 57, 44, 44);
    exl.print("Student", "7", "Student7", "stu", 78, 61, 99, 66, 88);
    exl.print("Student", "8", "Student8", "vwx", 91, 39, 40, 22, 38);
    exl.print("Student", "9", "Student9", "yz", 45, 78, 49, 77, 59);
    exl.print("Student", "10", "Student10", "abc1", 77, 65, 77, 95, 46);
    System.out.println("Task Completed........................");
}

/*
 * Existing sheet and new sheet adding process
 */
@SuppressWarnings("resource")
public void print(String excelSheetName, String dataForRollNo,
        String dataForName, String dataForDept, int dataForSubj1,
        int dataForSubj2, int dataForSubj3, int dataForSubj4,
        int dataForSubj5) throws IOException {
    XSSFWorkbook workbook = null;
    File file = new File("D:/workspace/ex/examples/src/Student_Sheet.xlsx");
    FileOutputStream out = null;
    XSSFSheet excelSheet = null;
    CellStyle style = null;
    XSSFFont font = null;
    Map<String, Object[]> excelData = new TreeMap<String, Object[]>();
    // verifying file is present or not
    if (file.exists()) {
        FileInputStream inputStream = new FileInputStream(file);
        workbook = new XSSFWorkbook(inputStream);
        // verifying the sheet is available or not
        if (workbook.getSheet(excelSheetName) != null) {
            excelSheet = workbook.getSheet(excelSheetName);
        } else {
            excelSheet = workbook.createSheet(excelSheetName);
            // Style details for heading in new sheet
            style = workbook.createCellStyle();
            style.setFillForegroundColor(HSSFColor.GREEN.index);
            style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
            font = workbook.createFont();
            font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
            font.setColor(HSSFColor.WHITE.index);
            style.setFont(font);
            excelData.put("0", new Object[] { "RollNo", "Name", "Dept",
                    "Subj1", "Subj2", "Subj3", "Subj4", "Subj5", "Total",
                    "Avg", "Result" });
            addIntoCell(excelData, excelSheet, "0", style);
        }
    } else {
        workbook = new XSSFWorkbook();
        if (workbook.getSheet(excelSheetName) != null) {
            excelSheet = workbook.getSheet(excelSheetName);
        } else {
            excelSheet = workbook.createSheet(excelSheetName);
            // Style details for heading in new sheet
            style = workbook.createCellStyle();
            style.setFillForegroundColor(HSSFColor.GREEN.index);
            style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
            font = workbook.createFont();
            font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
            font.setColor(HSSFColor.WHITE.index);
            style.setFont(font);
            excelData.put("0", new Object[] { "RollNo", "Name", "Dept",
                    "Subj1", "Subj2", "Subj3", "Subj4", "Subj5", "Total",
                    "Avg", "Pass/Fail" });
            addIntoCell(excelData, excelSheet, "0", style);
        }
    }
    // adding author name in excel sheet
    POIXMLProperties xmlProps = workbook.getProperties();
    POIXMLProperties.CoreProperties coreProps = xmlProps
            .getCoreProperties();
    coreProps.setCreator("Saminathan");
    // This data needs to be written (Object[])
    // Data calculation
    int dataForTotal = dataForSubj1 + dataForSubj2 + dataForSubj3
            + dataForSubj4 + dataForSubj5;
    double dataForAvg = dataForTotal / 5;
    String dataForResult = "Fail";
    if (dataForAvg > 55) {
        dataForResult = "Pass";
    }
    excelData.put(dataForRollNo,
            new Object[] { dataForRollNo, dataForName, dataForDept,
                    dataForSubj1, dataForSubj2, dataForSubj3, dataForSubj4,
                    dataForSubj5, dataForTotal,
                    Double.toString(dataForAvg), dataForResult });
    addIntoCell(excelData, excelSheet, dataForRollNo, style);
    try {
        // Write the workbook in file system
        out = new FileOutputStream(file);
        workbook.write(out);
        workbook.close();
        out.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

// Inserting values into cell
public void addIntoCell(Map<String, Object[]> data, XSSFSheet sheet,
        String excelID, CellStyle style) {
    Set<String> keyset = data.keySet();
    Cell cell = null;
    Row row = null;
    Object[] objArr = null;
    int rownum = 0;
    if (Integer.parseInt(excelID) >= 1) {
        rownum = Integer.parseInt(excelID);
    }
    for (String key : keyset) {
        row = sheet.createRow(rownum);
        objArr = data.get(key);
        int cellnum = 0;
        for (Object obj : objArr) {
            cell = row.createCell(cellnum++);
            if (obj instanceof String) {
                cell.setCellValue((String) obj);
            } else if (obj instanceof Integer) {
                cell.setCellValue((Integer) obj);
            }
            // applying style only for heading
            if (Integer.parseInt(excelID) < 1) {
                cell.setCellStyle(style);
                }
            }
        }
    }
}
package com.sam.test.excel;
/**
*@作者Saminathan
*
*/
导入java.io.File;
导入java.io.FileInputStream;
导入java.io.FileOutputStream;
导入java.io.IOException;
导入java.util.Map;
导入java.util.Set;
导入java.util.TreeMap;
导入org.apache.poi.POIXMLProperties;
导入org.apache.poi.hssf.usermodel.HSSFCellStyle;
导入org.apache.poi.hssf.usermodel.hssfont;
导入org.apache.poi.hssf.util.HSSFColor;
导入org.apache.poi.openxml4j.exceptions.InvalidFormatException;
导入org.apache.poi.ss.usermodel.Cell;
导入org.apache.poi.ss.usermodel.CellStyle;
导入org.apache.poi.ss.usermodel.Row;
导入org.apache.poi.xssf.usermodel.xssfont;
导入org.apache.poi.xssf.usermodel.xssfheet;
导入org.apache.poi.xssf.usermodel.xssf工作簿;
/**
*使用ApachePOI在Java中读取和写入Excel文件的示例Java程序
* 
*/
公共类最终格式ExcelWriting{
@抑制警告(“资源”)
公共静态void main(字符串[]args)引发IOException,
无效格式异常{
FinalFormattingExcelWriting exl=新的FinalFormattingExcelWriting();
//将学生信息添加到工作表中
例如打印(“学生”、“1”、“学生1”、“abc”、50、78、56、55、46);
例如打印(“学生”、“2”、“学生2”、“定义”,60、54、89、66、79);
例如打印(“学生”、“3”、“学生3”、“ghi”、7、96、75、88、19);
例如打印(“学生”、“4”、“学生4”、“jkl”、89、15、35、44、78);
例如打印(“学生”、“5”、“学生5”、“mno”、40、49、46、77、46);
例如打印(“学生”、“6”、“学生6”、“pqr”、56、45、57、44、44);
例如打印(“学生”、“7”、“学生7”、“学生”,78、61、99、66、88);
例如打印(“学生”、“8”、“学生8”、“vwx”、91、39、40、22、38);
例如打印(“学生”、“9”、“学生9”、“yz”、45、78、49、77、59);
例如打印(“学生”、“10”、“学生10”、“abc1”、77、65、77、95、46);
System.out.println(“任务完成”);
}
/*
*现有图纸和新图纸添加流程
*/
@抑制警告(“资源”)
公共作废打印(字符串excelSheetName、字符串dataForRollNo、,
字符串dataForName,字符串dataForDept,int dataForSubj1,
int dataForSubj2、int dataForSubj3、int dataForSubj4、,
int dataForSubj5)引发IOException{
XSSF工作簿=空;
File File=新文件(“D:/workspace/ex/examples/src/Student_Sheet.xlsx”);
FileOutputStream out=null;
XSSFSheet excelSheet=null;
CellStyle=null;
XSSFFont font=null;
Map excelData=new TreeMap();
//验证文件是否存在
if(file.exists()){
FileInputStream inputStream=新的FileInputStream(文件);
工作簿=新XSSF工作簿(inputStream);
//验证工作表是否可用
if(workbook.getSheet(excelSheetName)!=null){
excelSheet=workbook.getSheet(excelSheetName);
}否则{
excelSheet=workbook.createSheet(excelSheetName);
//新图纸中标题的样式详细信息
style=workbook.createCellStyle();
风格。setFillForegroundColor(HSSFColor.GREEN.index);
style.setFillPattern(HSSFCellStyle.SOLID\u前景);
font=workbook.createFont();
字体设置权重(hssfont.BOLDWEIGHT\u BOLD);
font.setColor(HSSFColor.WHITE.index);
style.setFont(字体);
excelData.put(“0”,新对象[]{“RollNo”,“名称”,“部门”,
“第1项”、“第2项”、“第3项”、“第4项”、“第5项”、“总计”,
“平均值”、“结果”});
addIntoCell(Excel数据,Excel表格,“0”,样式);
}
}否则{
工作簿=新XSSFWorkbook();
if(workbook.getSheet(excelSheetName)!=null){
excelSheet=workbook.getSheet(excelSheetName);
}否则{
excelSheet=workbook.createSheet(excelSheetName);
//新图纸中标题的样式详细信息
style=workbook.createCellStyle();
风格。setFillForegroundColor(HSSFColor.GREEN.index);
style.setFillPattern(HSSFCellStyle.SOLID\u前景);
font=workbook.createFont();
字体设置权重(hssfont.BOLDWEIGHT\u BOLD);
font.setColor(HSSFColor.WHITE.index);
style.setFont(字体);
excelData.put(“0”,新对象[]{“RollNo”,“名称”,“部门”,
“第1项”、“第2项”、“第3项”、“第4项”、“第5项”、“总计”,
“平均”、“通过/失败”});
addIntoCell(Excel数据,Excel表格,“0”,样式);
}
}
//在excel工作表中添加作者姓名
POIXMLProperties xmlProps=workbook.getProperties();
POIXMLProperties.CoreProperties coreProps=xmlProps
.getCoreProperties();
coreProps.setCreator(“Saminathan”);
//需要写入此数据(对象[])
//数据计算
int dataForTotal=dataForSubj1+dataForSubj2+dataForSubj3
+dataForSubj4+dataForSubj5;
双数据FORAVG=dataForTotal/5;
字符串dataForResult=“Fail”;
如果(dataForAvg>55){
dataForResult=“通过”;
}
excelData.put(dataForRollNo,
新对象[]{dataForRollNo,dataForName,dataForDept,
dataForSubj1、dataForSubj2、dataForSubj3、dataForSubj4、,
dataForSubj5,dataForTotal,