我必须阅读一个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。有可能吗?
答案 0 :(得分:2)
您可以尝试使用Date
或Calendar
- 对象来设置值而不是字符串。您可能必须创建一个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);
如果我将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();
}
}