Excel导出单元格数值不能做计算

问题复现

项目中最开始导出Excel,都是以String类型调用创建单元格,这样导致的问题是:

使用函数计算求和或者平均值都会为0

image-20200508162808607

那么,如何能将这些改为可计算的呢?

方法

核心类 ExportExcelUtil, 下面是核心代码

public static void createCell(HSSFRow row, int j, String value, HSSFCellStyle styleTextCenter) {
        HSSFCell cell = row.createCell(j++);
        cell.setCellValue(value);
        cell.setCellStyle(styleTextCenter);
    }

    public static void createCell(HSSFRow row, int j, double value, HSSFCellStyle styleTextCenter) {
        HSSFCell cell = row.createCell(j++);
        cell.setCellValue(value);
        cell.setCellStyle(styleTextCenter);
    }

    public static void createCell(HSSFRow row, int j, Date value, HSSFCellStyle styleTextCenter) {
        HSSFCell cell = row.createCell(j++);
        cell.setCellValue(value);
        cell.setCellStyle(styleTextCenter);
    }

这是poi创建单元格的三种方法, 可以看出方法被重载了三次

  1. String
  2. double
  3. Date

而之前的导出,我将所有字段都设置为了String,包括数字。

再进一层,看下 HSSFCell这个类

在这里插入图片描述

可以看到,有5中原生类型,除了上面项目代码封装的3中,还有Calendar 和 RichTextString,即富文本类型,也就是如果是数值就用double,是日期用date,富文本用富文本,这样Excel对应的功能都可以用了

所以进行修改:将第三个参数改为数值类型就行

ExportExcelUtil.createCell(row, j++, 0, styleTextCenter);

看效果

image-20200508163326603

问题解决

### Java 导出 Excel 并给单元格赋值 为了实现在Java中向Excel文件的单元格赋值,可以使用Apache POI库。下面是一个完整的示例代码展示如何创建一个新的Excel文档并向其中写入数据。 #### 创建新的Excel工作簿并设置单元格值 ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.FileOutputStream; import java.io.IOException; public class WriteToExcel { public static void main(String[] args) throws IOException { try (Workbook workbook = new XSSFWorkbook()) { // 使用XSSFWorkbook表示.xlsx格式的工作簿 Sheet sheet = workbook.createSheet("Example"); // 创建名为 "Example" 的新表格 Row row = sheet.createRow(0); // 在第0行创建一行 Cell cell = row.createCell(0); // 在该行的第一列创建一个单元格 cell.setCellValue("Hello, world!"); // 设置单元格的内容为字符串 "Hello, world!" // 将工作簿写出到指定路径下的文件 String filePath = "./example.xlsx"; try (FileOutputStream fileOut = new FileOutputStream(filePath)) { workbook.write(fileOut); } System.out.println("成功写入:" + filePath); } catch (Exception e) { e.printStackTrace(); } } } ``` 这段程序展示了基本的操作流程:创建工作簿、添加表单、定义行列以及设定具体的数值[^1]。 对于更复杂的情况,比如需要处理特定位置的数据填充或是批量操作多个单元格时,可以根据实际需求调整上述模板中的逻辑结构。 当涉及到特殊字符输入(如打钩),可以通过插入Unicode编码对应的符号来完成: ```java // 假设要在一个单元格内放置一个对号✓作为标记 Cell checkMarkCell = row.createCell(1); checkMarkCell.setCellValue("\u2713"); ``` 这里利用了Unicode `\u2713` 来代表一个简单的对号符号[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值