Excel文件写入数据时出现的问题

java.lang.IllegalArgumentException: The workbook already contains a sheet of this name

在使用HSSFSheet类设置Excel表的表头时出现的bug,该异常信息的意思是:该工作簿已包含此名称的工作表。也就是表名重复?贴出我的代码。

 HSSFSheet sheet = wb.createSheet((String) keywordMap.get("keyword") + "-" + (String) keywordMap.get("appName") + "-" +
                        keywordMap.get("appMarket"));

贴出一张图解释什么是sheet:
在这里插入图片描述

解决这个问题之前,我们首先要知道Excel中Sheet的命名规则:

  • sheet名称不能有重复
  • sheet的名称不能为空或空字符串(不能包含: 、/、?、*、[]等;能包含英文、汉字、| 、()等)都不可以
  • sheet名称不能超过31个,不然会自动切割字符串,导致sheet名可能重复

既然知道了可能会出错的原因,在看到我的代码,不难发现,唯一可能出现异常的原因就是sheet名称重复。

所以,先去检查要存入Excel中的数据是否存在相同的数据,果然,我在表格中找到了两条相同的数据。删除其中一条项目,再次点击导出表格按钮,成功导出。其他同学如果也是报这个错误,不妨参考我上述写的sheet命名规范去找是不是那里数据设置出现问题。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在C#中,可以使用NPOI库来实现对Excel文件写入操作。具体步骤如下: 1. 引入NPOI库,可以通过NuGet包管理器来安装。 2. 创建一个Workbook对象,表示一个Excel文件。 3. 创建一个Sheet对象,表示一个工作表。 4. 创建行和单元格对象,设置单元格的值。 5. 将行对象添加到工作表中。 6. 将工作表添加到Workbook对象中。 7. 将Workbook对象写入Excel文件中。 下面是一个示例代码,演示如何将数据写入Excel文件中: ``` using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using System.Collections.Generic; using System.IO; public class Supply { public string Value1 { get; set; } public string Value2 { get; set; } public string Value3 { get; set; } } public void WriteToExcel(List<Supply> data, string filePath) { // 创建一个Workbook对象,表示一个Excel文件 IWorkbook workbook = new HSSFWorkbook(); // 创建一个Sheet对象,表示一个工作表 ISheet sheet = workbook.CreateSheet("Sheet1"); // 创建行和单元格对象,设置单元格的值 int rowIndex = 0; foreach (Supply supply in data) { IRow row = sheet.CreateRow(rowIndex++); row.CreateCell(0).SetCellValue(supply.Value1); row.CreateCell(1).SetCellValue(supply.Value2); row.CreateCell(2).SetCellValue(supply.Value3); } // 将Workbook对象写入Excel文件中 using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write)) { workbook.Write(fs); } } ``` 在上面的代码中,我们首先创建了一个Workbook对象,然后创建了一个Sheet对象,表示一个工作表。接着,我们遍历数据列表,创建行和单元格对象,并设置单元格的值。最后,将Workbook对象写入Excel文件中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值