Excel POI API更改单元格值

时间:2012-03-15 09:29:42

标签: java apache excel apache-poi xls

我必须阅读一个excel文件并使用POI API为JAVA填充一些单元格。我将整个工作簿写入另一个工作簿。这实际上是有效的。

问题是那时(一旦单元格被填满)我必须打开文件并单击并输入我修改过的单元格,以刷新其他公式单元格的值。

代码就是这样:

cellHorasPrevistas.setCellValue("01:00:00")

当我输入xls文件时,它似乎是一个原始字符串而不是格式化为“[h]:mm:ss”,这是该单元格的初始格式。

我试图手动重写格式,但它不起作用:

    HSSFCellStyle cs = wb.createCellStyle();
    HSSFDataFormat df = wb.createDataFormat();
    cs.setDataFormat(df.getFormat("[h]:mm:ss"));
    cellHorasPrevistas.setCellStyle(cs);
    cellHorasPrevistas.setCellValue("01:00:00")

我也试过没有幸运的

HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb); 
fe.clearAllCachedResultValues()
fe.notifyUpdateCell(cellHorasPrevistas)
fe.evaluate(cellHorasPrevistas)

我必须非常容易,只是为了更改单元格值,如果我在xls中手动更改了单元格,那么该单元格会相同。

提前致谢, 劳尔

找到了部分解释....问题是de CellType正在从数字变为String,因此excel不能在公式中使用它。我想保留数字格式,将值设置为“12:00:00”而不是0.5。有可能吗?

2 个答案:

答案 0 :(得分:2)

您可以尝试使用DateCalendar - 对象来设置值而不是字符串。您可能必须创建一个Dummy-Object,它只有适当的时间设置。

我必须将YEAR设置为1970年,月份设置为1月份,将Day设置为1,以使其工作如下:

  HSSFWorkbook wb = new HSSFWorkbook();
  HSSFRow row = wb.createSheet().createRow(0);
  CellStyle cellStyle = wb.createCellStyle();
  cellStyle.setDataFormat(wb.getCreationHelper().createDataFormat().getFormat("HH:mm:ss"));
  HSSFCell cell = row.createCell(1);
  Calendar cal = Calendar.getInstance();
  cal.set(Calendar.YEAR, 1970);
  cal.set(Calendar.MONTH, 0);
  cal.set(Calendar.DATE, 1);
  //you can set the time you need here ...
  cell.setCellValue(cal);
  cell.setCellStyle(cellStyle);

结果:

enter image description here

如果我将YEAR / MONTH / DATE部分保持正常,则自1970年1月1日以来的所有小时数均为小时。

答案 1 :(得分:0)

首先更新你的公式,这样你就不必进入文件来继续点击输入:

用于.xlsx文件

XSSFWorkbook workbook= new XSSFWorkbook(FilePath);
XSSFFormulaEvaluator.evaluateAllFormulaCells(workbook);

用于.xls文件

HSSFWorkbook workbook= new HSSFWorkbook(FilePath);
HSSFFormulaEvaluator.evaluateAllFormulaCells(workbook);

为了将时间投入到Excel中,我创建了一个简单的类文件,因此您可以非常轻松地更改行和列的所有输入。然而,这适用于XSSF,但这不应成为更改为HSSF的问题。

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Calendar;

import org.apache.poi.xssf.usermodel.XSSFFormulaEvaluator;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class test {

    public static void main(String [] args) {
        System.out.println(Time());
    }

    public static String Time () {
        Calendar cal = Calendar.getInstance();
        SimpleDateFormat s = new SimpleDateFormat("HH:mm:ss"); //Changeable
        return s.format(cal.getTime()).toString();
    }

    public void addtoExcel() throws IOException {
        InputStream ExcelFileToRead = new FileInputStream(file_path);
        XSSFWorkbook  wb = new XSSFWorkbook(ExcelFileToRead);
        XSSFFormulaEvaluator.evaluateAllFormulaCells(wb);
        XSSFSheet sheet = wb.getSheetAt(0);

        sheet.createRow(rowIndex).createCell(columnIndex).setCellValue(Time());

        FileOutputStream out =  new FileOutputStream(new File(file_path));                
        wb.write(out);
        out.close();
    }
}