gpt4 book ai didi

java - XSSFWorksheet 在关闭文件后复制输出

转载 作者:行者123 更新时间:2023-12-01 12:24:00 25 4
gpt4 key购买 nike

我最近才开始使用 Apache poi。我正在尝试做的事情:

我的方法接收一个 HashMap,键是一个长 Vendor(我创建的用于代表我公司客户的类)ID,值是 Vendor 对象本身。我的目标是在供应商对象中使用 boolean 属性“托管”,并将托管供应商列表(“托管”中具有“true”的供应商)输出到一个文件中,然后将另一个文件输出到非托管供应商。这是我的代码:

 public static void loadVendorsIntoFile(XSSFWorkbook workbook, HashMap<Long,Vendor> vendors, boolean managed){

XSSFSheet vendorsSheet = workbook.createSheet("Vendors");
int rowNum = 1;
Row row = vendorsSheet.createRow(0);
row.createCell(0).setCellValue("vendor_id");
row.createCell(1).setCellValue("num_items");
row.createCell(2).setCellValue("vendor_username");
row.createCell(3).setCellValue("Segment");
row.createCell(4).setCellValue("AM");
for (long vendor : vendors.keySet()){
if (vendors.get(vendor) != null && vendors.get(vendor).getIfManaged() == managed){
row = vendorsSheet.createRow(rowNum);
row.createCell(0).setCellValue(vendors.get(vendor).getVendorId());
row.createCell(1).setCellValue(vendors.get(vendor).getCountItems());
row.createCell(2).setCellValue(vendors.get(vendor).getVendorName());
row.createCell(3).setCellValue(vendors.get(vendor).getSegment());
row.createCell(4).setCellValue(vendors.get(vendor).getAccountManager());
rowNum++;
}
}
}

public static void topvendorsOutput (HashMap<Long,Vendor> vendors) throws ClassNotFoundException, SQLException, IOException{
XSSFWorkbook managedWorkbook = new XSSFWorkbook();
loadVendorsIntoFile(managedWorkbook,vendors,true);
OutputStream outManaged = new FileOutputStream("C:\\Users\\User\\managed_out.xlsx");
managedWorkbook.write(outManaged);
outManaged.close();

XSSFWorkbook nonManagedWorkbook = new XSSFWorkbook();
loadVendorsIntoFile(nonManagedWorkbook,vendors,false);

OutputStream outNonManaged = new FileOutputStream("C:\\Users\\User\\unmanaged_out.xlsx");
managedWorkbook.write(outNonManaged);
outNonManaged.close();

}

但是,由于某种原因,我得到了两个具有相同信息的文件 - 两个文件都仅显示托管供应商。我一直在测试(打印到控制台),我发现在第二次调用 loadVendorsIntoFile() 时,循环运行时确实打印了非托管供应商 - 但由于某种原因,写入第二个文件的内容是信息应该仅来自该方法的第一次调用(和第一个文件)。另外,第二次调用(创建第二个文件)出现损坏问题,Excel 警告我它“发现内容存在问题”并且需要恢复它。我想我在这里做错了什么。简而言之 - 第一个文件没问题,第二个文件不行。

如果有任何帮助,我们将不胜感激。谢谢。

最佳答案

查看您的代码,我们发现一些问题:

XSSFWorkbook managedWorkbook = new XSSFWorkbook();
loadVendorsIntoFile(managedWorkbook,vendors,true);
OutputStream outManaged = new FileOutputStream("C:\\Users\\User\\unmanaged_out.xlsx");
managedWorkbook.write(outManaged);
outManaged.close();

这会将managedWorkbook写入C:\\Users\\User\\unmanagement_out.xlsx

XSSFWorkbook nonManagedWorkbook = new XSSFWorkbook();
loadVendorsIntoFile(nonManagedWorkbook,vendors,false);

OutputStream outNonManaged = new FileOutputStream("C:\\Users\\User\\unmanaged_out.xlsx");
managedWorkbook.write(outNonManaged);
outNonManaged.close();

这还会将 managedWorkbook 写入 C:\\Users\\User\\unmanagement_out.xlsx !

我怀疑你的意思是最后一点是这样的:

OutputStream outNonManaged = new FileOutputStream("C:\\Users\\User\\unmanaged_out2.xlsx");
nonManagedWorkbook.write(outNonManaged);
outNonManaged.close();

请注意更改后的代码片段如何写入不同的文件,重要的是,写出您创建的第二个工作簿,而不是两次输出第一个工作簿!

关于java - XSSFWorksheet 在关闭文件后复制输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26485792/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com