我目前在使用Apache POI时遇到一些问题。
我当前的项目是从xml文件中读取数据并将其写入excel文件。 excel-writing部分是用Apache POI完成的,但我遇到了问题。 当我尝试用数据格式(“mm:ss,sss; @”)写一些持续时间时,这意味着我用几分钟写出一个时间:秒,毫秒。
问题是,此数据格式不正确,您无法在Excel中使用它。 你可以在excel中看到它被左对齐写入单元格。 但是如果你点击excel中的单元格然后按回车键,它就会被右对齐,你可以使用它。
我使用以下代码创建工作表和工作簿。
Workbook workbook = new HSSFWorkbook();
sheet1 = workbook.createSheet("Daten");
style = workbook.createCellStyle();
CreationHelper creationHelper = workbook.getCreationHelper();
style.setDataFormat(creationHelper.createDataFormat().getFormat("mm:ss,sss;@"));
以下方法用于将数据写入单元格。 “minutes”,“seconds”和“millisecods”是收集所需信息的原始程序方法。 “cellcount”是行中的位置,应该写入数据。
public static void createCellTime(Row row, int cellcount, xmlInterface interface, Main main){
Cell cell = row.createCell(cellcount);
try {
String cellTimeStringTime = minutes + ":" + seconds + "," + milliseconds;
cell.setCellValue(cellTimeStringEchtzeit);
} catch (NullPointerException e) {
cell.setCellValue("-----");
}
cell.setCellStyle(main.style);
}
main.style Cellstyle是main方法中定义的样式,如第一个代码块所示。
如果您需要任何进一步的信息,请随时提出要求。
我希望有一个很好的解决方案,因为我当前的解决方法 - 一个点击每个单元格并按下输入的工具 - 是一种非常糟糕的方式:)
答案 0 :(得分:2)
格式代码中的s
是秒的代码,而不是毫秒。 Fractions of a second: h:mm:ss.00。
此外,存储的格式字符串始终位于en_US中。点(.
)是十进制分隔符,与您的语言环境无关。因此,您的格式代码应为.getFormat("mm:ss.000")
。
也不要把绳子插入牢房。使用DateUtil.convertTime从字符串中获取时间值,并将double
值放入单元格中。
...
String cellTimeStringTime = "00:" + minutes + ":" + seconds;
double timeValue = DateUtil.convertTime(cellTimeStringTime);
double millisecValue = Double.parseDouble(""+milliseconds);
millisecValue = millisecValue / 24 / 60 / 60 / 1000;
timeValue += millisecValue;
cell.setCellValue(timeValue);
...