【问题标题】:java to excel date formattingjava到excel日期格式
【发布时间】:2012-06-16 01:00:09
【问题描述】:

问题是当我运行我的应用程序并且有一个网格(带有字符串和日期列)并将其保存为 Excel 文件时。

当我第一次保存它时,所有内容的格式都正确,但是当我再次尝试再次保存相同的精确网格时,日期格式消失了(它只是一个浮点值,当我右键单击并格式化为dateTime 对象有效)。当我重新启动我的应用程序时,它会第一次再次运行,然后再次丢失格式

代码如下所示:

Calendar calendar = Calendar.getInstance();

calendar.setTime((Date)data);
            Date gmtDate = new Date(((Date) data).getTime() + (calendar.get(Calendar.ZONE_OFFSET) + calendar.get(Calendar.DST_OFFSET)));

writableCell = new jxl.write.DateTime(sheetColumn, sheetRow, gmtDate, jxl.write.DateTime.GMT);

cellFormat = new jxl.write.WritableCellFormat (new jxl.write.DateFormat("m/d/yyyy h:mm");

writableCell.setCellFormat(cellFormat);

sheet.addCell(writableCell);

我一直在断点,一切正常(在进入工作表之前它一直知道它是dateTime 类型),所以我不认为它来自代码。

还有其他人遇到过这个问题吗?

【问题讨论】:

  • 你展示了格式的创建,你能展示你是如何保存文件的吗?
  • 很抱歉回复晚了(我已经离开了它进来的那一天)。所以我要做的是使用 JFileChooser 将其保存为 .xls,在我使用格式之前的代码我制作工作簿 jxl.write.WriteableWorkbook workbook = jxl.Workbook.createWorkbook(filename); sheet = workbook.createSheet("报告",0);然后在我做格式化之后我说:workbook.write;工作簿.close;
  • 我试过了,但无法重现您所看到的内容。可以提供 SSCCE 吗?
  • 我对代码进行了更深入的研究(我最初并没有编写它),它似乎在重用格式单元(jxl 不允许),但是当我拿出重用格式单元格的代码我得到了一个异常,因为 excel 文件真的很大,并且正在创建太多的格式单元格似乎
  • 查看代码以了解是否禁用“合理化”。通过设置系统属性“jxl.norat”或调用“setRationalization(false)”(在 WorkbookSettings 对象上)。启用后,jxl 将尝试消除重复的单元格格式。

标签: java excel datetime jxl


【解决方案1】:

试试这个:

cellFormat = new jxl.write.WritableCellFormat (new jxl.write.DateFormat("MM/dd/yyyy hh:mm");

【讨论】:

  • 不幸的是,我也试过了,结果还是一样
【解决方案2】:

尝试定义一个静态的WritableCellFormat 来处理日期格式。

// Required classes.
import java.util.TimeZone;
import jxl.write.DateFormat;
import jxl.write.DateTime;
import jxl.write.WritableCellFormat;

// Defined once.
public static final WritableCellFormat DATE_CELL_FRMT;
static {
    DateFormat df = new DateFormat("MM/dd/yyyy hh:mm");
    df.getDateFormat().setTimeZone(TimeZone.getTimeZone("GMT"))
    DATE_CELL_FRMT = new WritableCellFormat(df);
}

// Usage
writableCell = new DateTime(sheetColumn, sheetRow, gmtDate, DATE_CELL_FRMT);

【讨论】:

    【解决方案3】:

    您的问题似乎与"jExcelApi - cell date format reusing doesn't work" 类似。可能,该问题的答案可以帮助您解决问题。

    复述答案: 根据FAQ(问题:“我收到错误消息'太多不同的单元格格式'”)格式不能在不同的工作表中重复使用,因为它们不是为了以这种方式重复使用而设计的

    在你的情况下,代码可能是这样的:

    WritableCellFormat format = new jxl.write.WritableCellFormat(new jxl.write.DateFormat("m/d/yyyy h:mm"));
    for(java.util.Date date : someDateList){
      WritableCell cell = new jxl.write.DateTime(someColumn, someRow, date, format);
      sheet.addCell(cell);
    }
    

    【讨论】:

      猜你喜欢
      • 2016-11-23
      • 2013-03-17
      • 2015-08-22
      • 2013-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-17
      相关资源
      最近更新 更多