java - 在 Excel 工作表的列末尾写入 excel 数据
问题描述
我想在列的末尾添加值,但是如果我运行该类,它会覆盖 excel
JAVA,阿帕奇POI:
// Blank workbook
XSSFWorkbook workbook = new XSSFWorkbook();
// Create a blank sheet
XSSFSheet sheet = workbook.createSheet("MyPolicies");
// Iterate over data and write to sheet
Set<Integer> keyset = data.keySet();
int rownum = 0;
for (Integer key : keyset) {
// this creates a new row in the sheet
Row row = sheet.createRow(rownum++);
Object[] objArr = data.get(key);
int cellnum = 0;
for (Object obj : objArr) {
// this line creates a cell in the next column of that row
Cell cell = row.createCell(cellnum++);
if (obj instanceof String) {
cell.setCellValue((String) obj);
}
else if (obj instanceof Integer)
cell.setCellValue((Integer) obj);
}
}
try {
// this Writes the workbook
FileOutputStream out = new FileOutputStream(new File("extract.xlsx"));
workbook.write(out);
out.close();
} catch (Exception e) {
e.printStackTrace();
}
Excel 每次都会覆盖,并且仅添加新数据。注意:如果两个ID相同,我们需要在同一行添加第二个地图数据
解决方案
每次都替换您的文档的原因是您的文档是workbook
空白的。workbook.write(out)
意味着您将工作簿中的所有内容写入一个位置(extract.xlsx),而不是您将工作簿的数据写入文件!
您应该做的是打开您要编辑的工作簿:
FileInputStream xlsFile = new FileInputStream("extract.xls");
XSSFWorkbook workbook = new XSSFWorkbook(xlsFile);
...获取最后一行或最后一列
XSSFSheet sheet = workbook.getSheetAt(0);
int lastRow = sheet.getLastRowNum();
...并从那里写入您的数据。然后,和以前一样,您可以使用workbook.write(out)
来保存您的工作簿。
推荐阅读
- c# - Serilog 文件名 UTC 日期格式
- python - 生成矩阵 NxN,其中行的平均值在行中,列的平均值在列中
- xcode - 在范围内找不到 SignInWithAppleButton (SwiftUI 2)
- reactjs - 如何根据 Tensorflow.js 中的边界框裁剪人脸?
- javascript - JS 构建错误,Lint 错误无常量条件
- javascript - 从 javascript ajax 在 django 中保存录制的音频文件
- python - AWS 未在部署在 heroku 上的 Django 网站上显示图像
- python - 返回给定列表中未出现的最小正整数
- linux - 如何创建一个脚本,该脚本将单词列表作为输入并仅打印仅出现一次的单词
- python - Python, discord.py - 使用用户输入搜索维基百科