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

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

我创建了一个包含单元格名称及其值的 map ,但我不知道如何使用此 map 按名称访问单元格(例如: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();        
    } 
} 

请您参考如下方法:

获得条目后,获取单元格引用文本,例如“B2”,以及值。

创建一个 CellReference使用文本。然后你可以获得从0开始的行和列索引,你可以使用这些索引来获取Row,然后是Cell对象,你可以在其上调用setCellValue .

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()); 


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!