poi IFERROR的使用记录

poi IFERROR的使用记录

使用poi导出excel使用了iferror,但是导出的excel中显示iferror公式处为#NAME?,双击编辑后公式生效

百度查找使用 sheet.setForceFormulaRecalculation(true); 但是并未生效

百般查找后终于找到了根源问题
Apache poi's HSSF produces *.xls files in binary BIFF format of Excel 97 - 2003. But the IFERROR function was introduced in Excel 2007. So HSSF cannot store IFERROR function properly. Only XSSF is able to do so since XSSF produces *.xlsx files in Office Open XML format of Excel 2007
项目使用了HSSF导出excel,HSSF支持的excel版本是03之前的,而iferror函数是07版本才有的,所以HSSF并不支持该函数。
要解决该问题,要么换成XSSF导出excel,要么就使用if手动判断而不是使用iferror

### 使用 Apache POI 填充 Excel 模板并导出文件 在 Java 中,Apache POI 是一种常用的库,用于处理 Microsoft Office 文件格式(如 Word 和 Excel)。以下是关于如何使用 Apache POI 填充 Excel 模板并将结果导出为文件的具体说明。 #### 1. 添加 Maven 依赖 为了使用 Apache POI,在项目的 `pom.xml` 文件中需添加以下依赖项: ```xml <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.2.3</version> </dependency> ``` 此版本号可以根据实际需求调整[^1]。 #### 2. 加载模板文件 通过加载现有的 Excel 模板文件,可以将其作为基础进行修改。下面是一个示例代码片段,展示如何读取模板文件: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class ExcelTemplateFiller { public static void main(String[] args) throws IOException { // 定义模板路径 String templatePath = "path/to/template.xlsx"; try (FileInputStream fis = new FileInputStream(templatePath); Workbook workbook = new XSSFWorkbook(fis)) { Sheet sheet = workbook.getSheetAt(0); // 获取第一个工作表 // 修改单元格内容 Row row = sheet.getRow(0); // 获取第1行 Cell cell = row.getCell(0); // 获取A列的单元格 if (cell == null) { cell = row.createCell(0); } cell.setCellValue("Filled Value"); // 设置新值 // 导出到目标文件 String outputPath = "path/to/output.xlsx"; try (FileOutputStream fos = new FileOutputStream(outputPath)) { workbook.write(fos); } } catch (IOException e) { System.out.println("Error occurred while processing the file."); throw e; } } } ``` 上述代码展示了如何打开一个 `.xlsx` 文件,并向其中写入新的数据[^2]。 #### 3. 动态设置模板路径 如果需要动态获取模板路径,可采用 Spring 的 `@Value` 注解来注入资源路径。例如: ```java import org.springframework.core.io.Resource; public class TemplateLoader { @Value("classpath:templates/excel/MyTemplate.xlsx") private Resource templateResource; public InputStream getTemplateInputStream() throws IOException { return templateResource.getInputStream(); } } ``` 这种方式特别适合在基于 Spring 的应用程序中使用[^3]。 #### 4. 处理大数据量场景 对于较大的数据集,推荐分批处理以减少内存占用。具体做法如下: - 将数据分割成若干个小批量; - 对每一批次单独生成一个新的工作簿或追加至现有工作簿中的不同工作表; - 或者将多个独立的工作簿压缩进 ZIP 归档文件中以便传输和存储。 当单个 Excel 文件内的记录数超过一定阈值时(通常建议不超过十万条),应考虑拆分为多份文档。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值