【问题标题】:Applying specific cell data format using POI使用 POI 应用特定的单元格数据格式
【发布时间】:2012-06-05 05:45:42
【问题描述】:

我需要对单元格应用特定的数据格式。

XSSFCellStyle cellStyle  = workBook.createCellStyle();          
XSSFDataFormat format = workBook.createDataFormat();
cellStyle.setDataFormat(format.getFormat("m/d/yy h:mm"));
dataCell.setCellType(1); //String
dataCell.setCellStyle(cellStyle);

正在写入数据,但问题是该格式在我打开 excel 工作表(在 Excel 应用程序中)时应用,请在包含我的数据的单元格内单击。
然后按 Enter 键。 只有这样才会应用格式。

如何在不点击每个单元格的情况下应用格式?

【问题讨论】:

  • 您删除了将样式应用于单元格的 Java 代码。请将其添加到您的示例代码中。
  • 我添加了这一行(仅一行),但我认为这没有问题,因为格式是在单元格上设置的。但是只有在选择单元格末尾按Enter键时才能看到格式。

标签: java excel-2007 apache-poi


【解决方案1】:

您的问题是您将单元格设置为字符串。在大多数情况下,单元格格式规则仅适用于数字单元格。它们不适用于字符串单元格,那些没有格式化(因为它们已经格式化为字符串!)

XSSFCellStyle cellStyle  = workBook.createCellStyle();          
XSSFDataFormat format = workBook.createDataFormat();
cellStyle.setDataFormat(format.getFormat("m/d/yy h:mm"));
dataCell.setCellStyle(cellStyle);

// Set Cell Type not really needed, the setCellValue does it
dataCell.setCellType(Cell.CELL_TYPE_NUMERIC);
// Set a date value (2012-06-05 08:50)
dataCell.setCellValue(new Date(1338878999635));

当你在 Excel 中打开它时,它应该和预期的一样

【讨论】:

  • 我从文本文件中读取输入数据(2/5/2012 12:34),是否需要将数据转换为Date对象?
  • 为什么当我选择单元格并在 Excel 中按 Enter 时会被格式化?
  • 是的,如果您希望它在 Excel 中正确显示,那么您需要将其设置为日期而不是字符串
【解决方案2】:

这就是你如何将单元格格式更改为Date

 var workBook = new XSSFWorkbook();

 var sheet = workBook.CreateSheet("Sheet1");

 var dateStyle = workBook.CreateCellStyle();

 var dataFormat = workBook.CreateDataFormat();

 dateStyle.DataFormat = dataFormat.GetFormat("M/D/YYYY");

 row.CreateCell(0).SetCellValue(item.ModifiedDate.HasValue ?  
           item.ModifiedDate.Value.ToShortDateString(): "");
 row.Cells[0].CellStyle = dateStyle; // This will change your cell to date 
format.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    • 1970-01-01
    相关资源
    最近更新 更多