在Apache POI中通过单元名称设置新的单元格值

我是Java和Apache POI的新手,但是我得到了这个任务,我必须从命令行读取Excel文件的名称以及需要修改的列的名称和值。

所以最后应用程序将会像这样运行:java test -f test.xls -i B2 = 10; B3 = 20; B4 = 30

我创build了一个包含单元格名称及其值的映射,但是我不知道如何使用这个映射来访问单元格的名称(例如:B2)并设置新的值(例如:10) 。

我的代码到目前为止是:

package test; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.util.CellReference; import org.apache.poi.ss.usermodel.*; public class ReadExcel { public static void main(String[] args) throws FileNotFoundException, IOException { // Will contain cell name / value pair for input cells and output cells Map<String, String> inputCellsMap = new HashMap<String, String>(); Map<String, String> outputCellsMap = new HashMap<String, String>(); // Open the Excel file FileInputStream file = new FileInputStream(new File(args[1])); // Get the current workbook HSSFWorkbook workbook = new HSSFWorkbook(file); // Get the first sheet of the workbook HSSFSheet sheet = workbook.getSheetAt(0); // Get the input cells that need to be modified and // store their name and value in the inputCellsMap for (String element : args[3].split(";")) { inputCellsMap.put(element.split("=")[0], element.split("=")[1]); } // Loop through the cells that need to be modified and // set the new value in the Excel document Iterator<Entry<String,String>> iterator = inputCellsMap.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry<String,String> entry = (Map.Entry<String,String>) iterator.next(); // TODO // Get cells by name and set their new value //System.out.println("Key : " + entry.getKey() + " Value :" + entry.getValue()); } workbook.close(); } } 

获得input后,获取单元格引用文本,例如"B2"和值。

使用文本创build一个CellReference 。 然后,您可以获得基于0的行和列索引,您可以使用该索引获取Row ,然后获取可以调用setCellValueCell对象。

 CellReference cr = new CellReference(entry.getKey()); int r = cr.getRow(); int c = cr.getCol(); Row row = sheet.getRow(r); if (row == null) row = sheet.createRow(r); Cell cell = row.getCell(c, Row.CREATE_NULL_AS_BLANK); cell.setCellValue(entry.getValue()); 

您可以使用这些方法访问行和列。 (例如E101)

 sheet.getRow(100).getCell(5)