mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-05-09 23:51:34 +08:00
commit
22667cb4c1
@ -4,6 +4,7 @@ import cn.hutool.core.date.DateUtil;
|
|||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.hutool.poi.excel.ExcelDateUtil;
|
import cn.hutool.poi.excel.ExcelDateUtil;
|
||||||
import cn.hutool.poi.excel.cell.CellValue;
|
import cn.hutool.poi.excel.cell.CellValue;
|
||||||
|
import java.util.Date;
|
||||||
import org.apache.poi.ss.usermodel.Cell;
|
import org.apache.poi.ss.usermodel.Cell;
|
||||||
import org.apache.poi.ss.usermodel.CellStyle;
|
import org.apache.poi.ss.usermodel.CellStyle;
|
||||||
import org.apache.poi.ss.util.NumberToTextConverter;
|
import org.apache.poi.ss.util.NumberToTextConverter;
|
||||||
@ -24,7 +25,7 @@ public class NumericCellValue implements CellValue<Object> {
|
|||||||
*
|
*
|
||||||
* @param cell {@link Cell}
|
* @param cell {@link Cell}
|
||||||
*/
|
*/
|
||||||
public NumericCellValue(Cell cell){
|
public NumericCellValue(Cell cell) {
|
||||||
this.cell = cell;
|
this.cell = cell;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -36,8 +37,13 @@ public class NumericCellValue implements CellValue<Object> {
|
|||||||
if (null != style) {
|
if (null != style) {
|
||||||
// 判断是否为日期
|
// 判断是否为日期
|
||||||
if (ExcelDateUtil.isDateFormat(cell)) {
|
if (ExcelDateUtil.isDateFormat(cell)) {
|
||||||
|
// 1899年写入会导致数据错乱,读取到1899年证明这个单元格的信息不关注年月日
|
||||||
|
Date dateCellValue = cell.getDateCellValue();
|
||||||
|
if ("1899".equals(DateUtil.format(dateCellValue, "yyyy"))) {
|
||||||
|
return DateUtil.format(dateCellValue, style.getDataFormatString());
|
||||||
|
}
|
||||||
// 使用Hutool的DateTime包装
|
// 使用Hutool的DateTime包装
|
||||||
return DateUtil.date(cell.getDateCellValue());
|
return DateUtil.date(dateCellValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
final String format = style.getDataFormatString();
|
final String format = style.getDataFormatString();
|
||||||
|
@ -0,0 +1,26 @@
|
|||||||
|
package cn.hutool.poi.excel;
|
||||||
|
|
||||||
|
import cn.hutool.poi.excel.cell.values.NumericCellValue;
|
||||||
|
import java.util.Date;
|
||||||
|
import org.apache.poi.ss.usermodel.Cell;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class NumericCellValueTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void writeTest() {
|
||||||
|
final ExcelReader reader = ExcelUtil.getReader("1899bug_demo.xlsx");
|
||||||
|
ExcelWriter writer = ExcelUtil.getWriter("1899bug_write.xlsx");
|
||||||
|
Cell cell = reader.getCell(0, 0);
|
||||||
|
// 直接取值
|
||||||
|
// 和CellUtil.getCellValue(org.apache.poi.ss.usermodel.Cell)方法的结果一样
|
||||||
|
// 1899-12-31 04:39:00
|
||||||
|
Date cellValue = cell.getDateCellValue();
|
||||||
|
// 将这个值写入EXCEL中自定义样式的单元格,结果会是-1
|
||||||
|
writer.writeCellValue(0, 0, cellValue);
|
||||||
|
// 修改后的写入,单元格内容正常
|
||||||
|
writer.writeCellValue(1, 0, new NumericCellValue(cell).getValue());
|
||||||
|
writer.close();
|
||||||
|
reader.close();
|
||||||
|
}
|
||||||
|
}
|
BIN
hutool-poi/src/test/resources/1899bug_demo.xlsx
Normal file
BIN
hutool-poi/src/test/resources/1899bug_demo.xlsx
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user