使用 POI 在 Excel 中设置时间

2024-01-03

我正在尝试使用 Java 中的 POI api 创建 Excel 工作表。在该 Excel 工作表中,我想要一个仅包含 TIME 的单元格。通过设置此值,我们可以将单元格包含在该特定列的求和中,就像我们在数字列中所做的那样。为此,我们需要将单元格格式设置为 Time >> 13:30:55。 (内部格式为 'h:mm:ss;@' )。我们需要从单元格中删除日期部分。

当我使用 POI 读取单元格值时,它返回为“Sun Dec 31 01:00:00 IST 1899”(当我将值设置为 1:00 时),单元格格式索引为 166,单元格格式字符串是“h:mm:ss;@”。

设置从 Excel 读取的格式和样式以及将单元格值设置为 1800 年 12 月 31 日和时间值后,新的 Excel 将单元格显示为“######”(错误),并且单元格值已设置作为“-1”。下面是我使用过的代码。我错过了什么吗?是否可以按照我的要求设置该值。

    InputStream is = new BufferedInputStream(new FileInputStream("<FileName>"));
    XSSFWorkbook wb = new XSSFWorkbook(is);
    is.close();

    XSSFSheet sheet = wb.getSheetAt(0);
    XSSFRow row = sheet.getRow(2);

    XSSFCell cell = row.getCell(18);
    System.out.println("ExcelFileReader main cell.getDateCellValue() : '" + cell.getDateCellValue() + "'");
    System.out.println("ExcelFileReader main cell.getCellStyle().getDataFormat() : '" + cell.getCellStyle().getDataFormat() + "'");
    System.out.println("ExcelFileReader main cell.getCellStyle().getDataFormat() : '" + cell.getCellStyle().getDataFormatString() + "'");

    XSSFRow row1 = sheet.createRow(21);
    XSSFCell cell1 = row1.createCell(2);

    cell1.setCellStyle(cell.getCellStyle());
    cell1.setCellValue(cell.getDateCellValue());

    Calendar dummy = Calendar.getInstance();
    dummy.setLenient(false);
    dummy.set(Calendar.YEAR, 1899);
    dummy.set(Calendar.MONTH, Calendar.DECEMBER);
    dummy.set(Calendar.DATE, 31);

    dummy.set(Calendar.HOUR, 00);
    dummy.set(Calendar.MINUTE, 00);
    dummy.set(Calendar.SECOND, 00);
    dummy.set(Calendar.MILLISECOND, 00);

    Calendar cc = Calendar.getInstance();
    XSSFRow row2 = sheet.createRow(25);
    XSSFCell cell2 = row2.createCell(2);

    dummy.set(Calendar.HOUR, cc.get(Calendar.HOUR));
    dummy.set(Calendar.MINUTE, cc.get(Calendar.MINUTE));
    dummy.set(Calendar.SECOND, cc.get(Calendar.SECOND));
    dummy.set(Calendar.MILLISECOND, cc.get(Calendar.MILLISECOND));

    System.out.println("ExcelFileReader main dummy : '" + dummy.getTime() + "'");
    cell2.setCellValue(dummy.getTime());

    CellStyle style = wb.createCellStyle();
    DataFormat df = wb.createDataFormat();
    style.setDataFormat(df.getFormat("[h]:mm:ss;@"));
    cell2.setCellStyle(style);

    FileOutputStream fos = new FileOutputStream(new File("<New Excel file>"));
    wb.write(fos);
    fos.close();
    System.out.println("ExcelFileReader DONE");

以下是程序的输出。

    ExcelFileReader main cell.getDateCellValue() : 'Sun Dec 31 00:15:00 IST 1899'
    ExcelFileReader main cell.getCellStyle().getDataFormat() : '166'
    ExcelFileReader main cell.getCellStyle().getDataFormat() : 'h:mm:ss;@'
    ExcelFileReader main dummy : 'Sun Dec 31 11:32:24 IST 1899'
    ExcelFileReader DONE

我使用以下代码在 Excel 中使用 POI 生成时间单元格。我可以使用该单元格

        XSSFRow row2 = sheet.createRow(25);
        XSSFCell cell1 = row2.createCell(4);
        XSSFCell cell2 = row2.createCell(5);

        CellStyle style = wb.createCellStyle();
        DataFormat df = wb.createDataFormat();
        style.setDataFormat(df.getFormat("[h]:mm:ss;@"));

        cell1.setCellFormula("TIME(0,15,00)"); // 00:15:00
        cell1.setCellType(Cell.CELL_TYPE_FORMULA);
        cell1.setCellStyle(style);
        evaluator.evaluateFormulaCell(cell1);

        cell2.setCellFormula("TIME(0,30,00)"); //00:30:00
        cell2.setCellType(Cell.CELL_TYPE_FORMULA);
        evaluator.evaluateFormulaCell(cell2);
        cell2.setCellStyle(style);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 POI 在 Excel 中设置时间 的相关文章

随机推荐

  • 如何加密cookie中的会话id?

    当我阅读有关会话劫持的文章时 我了解到对存储在 cookie 中的会话 ID 值进行加密会很好 据我所知 当我通过调用开始会话时session start PHP 不会加密 cookie 中的会话 id 值 如何加密会话 ID 值 然后用它
  • 添加和删​​除类不同的元素

    所以我目前正在学习 jquery 和一点动画的 tweenlite 我想保持基本 所以我目前正在构建一个投资组合网格 但我想添加一个元素的点击 另一个元素正在淡入 从右侧滑动并不重要 但是我找不到一种方法来使其工作 即 1 个元素有 1 个
  • 设置使用 anaconda 与 VS Code 和集成 Git 终端时卡住

    我想学习数据科学 所以使用了一些非常流行的 Python 模块 如 Pandas Matplotlib Numpy 等 所以我清理安装了 Anaconda 现在使用它作为我的默认 Python 解释器 还使用 Conda 来安装包和创建虚拟
  • Httpclient multipart/form-data 同时发布图像和 json

    我正在尝试使用 C 代码在一个请求中上传图像和 json 但服务器总是返回 400 错误请求 使用 fiddler 执行相同的请求返回状态代码 200 帮助 这是我的小提琴手代码 WebKitFormBoundary7MA4YWxkTrZu
  • OkHTTP Websocket:连接上的蒸汽意外终止

    我正在尝试连接到 Stack Exchange 聊天 Websocket websocket 用于接收聊天中的新事件 例如新消息 以下是用于创建 Websocket 的代码 String wsUrl getWsUrl Request wsR
  • 重用字符串流而不需要重新分配

    我试图弄清楚如何重用 stringstream 对象 而无需每次在流中放入某些内容时都需要重新分配底层字符串 我已经发现这个答案 https stackoverflow com questions 624260 how to reuse a
  • JNI-多线程

    我有一个从 C 调用的 Java 函数的 JNI 包装器 我试图从不同的线程调用一些方法 但在尝试获取 JNIEnv 指针的新副本时出现错误 代码我 m 使用如下并在每个方法中调用 JNIEnv GetJniEnvHandle Thread
  • 为什么 WAMP 中的 Apache 2.1.7 不将 PHP 错误记录到 PHP 错误日志中?

    我已经安装了WAMP 并决定在最新版本的WAMP中使用默认的Apache 2 1 7 原因是我的网站所在的主机服务器也使用 2 1 7 之前 我在 WAMP 中使用 Apache 2 2 11 因为我的上一个主机也使用该版本 我现在遇到的问
  • 使用 golang 打印可读变量

    如何以可读的方式打印地图 结构或其他内容 使用 PHP 您可以做到这一点 echo pre print r var echo pre or header content type text plain print r var 使用Gofmt
  • 如何从不同文件夹中的另一个.py调用def

    我有以下结构 utils dir 有generator py 文件 其中有3 个def 我在 inline dir 中有 test py 我正在尝试在 test py 中使用生成器 py 中的 defs inline dir 和 utils
  • 方法产量如何运作?

    在javadoc中有说yield方法 导致当前正在执行的线程对象暂时暂停并允许其他线程执行 凯瑟琳 塞拉 Katherine Sierra 和伯特 贝茨 Bert Bates SCJP 书中说 Yield 应该做的是 使当前正在运行的线程头
  • 标准形式 matplotlib -- 将 e 更改为 \times 10

    在 matplotlib 中 轴有时以标准形式显示 数字由刻度显示 类似 1e 7 的内容由轴显示 有没有办法将其更改为写出的 times 10 7 我不想更改每个刻度上的标签 我希望更改出现在轴底部的 1e 7 文本 最简单的答案 使用乳
  • 如何验证或验证 JWT 签名?

    我正在尝试在 Java 中验证 JWT 令牌 如何验证或验证 JWT 令牌的 JWT 签名 您可以使用 Spring Security 中的 JWT 库 网址为https github com spring projects spring
  • Android 短信发送状态

    我需要在我的 Android 应用程序中实现一个功能来发送短信 我找到了许多与此相关的教程 但无法获得交付状态 失败或正常 以下是我的短信方法 private void sendSmsMessageWithStatus String pho
  • SWT Shell 根据子项调整大小

    我正在研究这个Composite画布上还有其他Composite可以添加和删除 我对整个布局概念的理解仍然很模糊 当孩子被添加到容器中时 考虑到容器有一个GridData它填充了父级 父级不应该也知道子级调整了大小吗 由于外壳 顶部父级 的
  • Google 可视化 API 示例中的“无效 JSON 字符串”

    我大致如下这个例子 http code google com apis chart interactive docs dev gviz api lib html tojsonexample 但一定是在做一些愚蠢的事情 服务器端Django视
  • C# winform 应用程序未获取 Machine.Config 中的 maxTimeout 值

    我一直在开发一个带有 Oracle 10g 数据库的 winform 应用程序 该应用程序正在使用TransactionScope并想修改maxTimeOut指定的值机器配置文件 我的机器配置文件位于以下位置 我为此应用程序使用 net 4
  • 改进 malloc() 算法的下一步是什么? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我自己写的简单malloc 函数 我想创建更快 更高效的变体 我编写的函数使用线性搜索并在内存中顺序连续分配 改进该算法的下一步是什么
  • 如何保存拟合的 R 模型以供以后使用

    很抱歉这个新手问题 如果我适合lm 型号或loess 模型 并将模型保存在文件或数据库中的某个位置 以供第三方以后使用predict 方法 我是否必须保存整个模型对象 由于返回的模型对象包含原始的原始数据 因此返回的对象可能会很大 如果您包
  • 使用 POI 在 Excel 中设置时间

    我正在尝试使用 Java 中的 POI api 创建 Excel 工作表 在该 Excel 工作表中 我想要一个仅包含 TIME 的单元格 通过设置此值 我们可以将单元格包含在该特定列的求和中 就像我们在数字列中所做的那样 为此 我们需要将