我使用的版本是:
<groupId>com.aspose</groupId>
<artifactId>aspose-cells</artifactId>
<version>23.6</version>
代码如下:
LoadOptions loadOptions = new LoadOptions();
workbook = new Workbook(inputStream, loadOptions);
int sheetCount = workbook.getWorksheets().getCount();
for (int i = 1; i < sheetCount; i++) {
workbook.getWorksheets().get(i).setVisible(false);
}
for (int j = 0; j < sheetCount; j++) {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
workbook.getWorksheets().setActiveSheetIndex(j);
workbook.save(outputStream, SaveFormat.CSV);
csvOutputStreamList.add(outputStream);
if (j < sheetCount - 1) {
workbook.getWorksheets().get(j + 1).setVisible(true);
workbook.getWorksheets().get(j).setVisible(false);
}
}
我希望把不同sheet的数据,输出到不同的outputStream中,经过测试,我发现每个outputStream都只有第一个sheet的数据,请问下这是没有设置license导致的吗?
@Endergarten
在将XLSX文件转换为CSV时,如果您发现只能转换第一个工作表的数据,可能是由于代码中的逻辑问题,而不是许可证设置导致的。根据您提供的代码,您在循环中设置了工作表的可见性,但在保存CSV时,您没有正确处理每个工作表的内容。
以下是一个改进的代码示例,确保每个工作表的数据都能正确保存到不同的输出流中:
LoadOptions loadOptions = new LoadOptions();
Workbook workbook = new Workbook(inputStream, loadOptions);
int sheetCount = workbook.getWorksheets().getCount();
for (int j = 0; j < sheetCount; j++) {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
workbook.getWorksheets().setActiveSheetIndex(j);
workbook.save(outputStream, SaveFormat.CSV);
csvOutputStreamList.add(outputStream);
}
在这个示例中,我们不再隐藏其他工作表,而是直接将每个工作表设置为活动工作表并保存为CSV。这样可以确保每个工作表的数据都被正确处理。
如果您仍然遇到问题,请确保您的Aspose.Cells库是最新版本,并检查是否有任何其他代码逻辑可能影响输出。接下来,您可以尝试运行改进后的代码,并查看是否能够成功转换所有工作表的数据。
希望这能帮助到您!如果还有其他问题,请随时告诉我!
我使用你的新代码,问题仍然没有改善,只能转换第一个sheet的数据
@Endergarten
请参考以下样例代码并查看附件。csv.zip (7.0 KB)
License license = new License();
license.setLicense("license path");
LoadOptions loadOptions = new LoadOptions();
Workbook workbook = new Workbook(filePath + "sample.xlsx", loadOptions);
WorksheetCollection sheets = workbook.getWorksheets();
int sheetCount = sheets.getCount();
TxtSaveOptions options = new TxtSaveOptions(SaveFormat.CSV);
options.setExportAllSheets(false);
for (int i = 0; i < sheetCount; i++) {
sheets.setActiveSheetIndex(i);
workbook.save(filePath + "out_" + i + ".csv", options);
}
1 Like
@Endergarten,
请注意,如果您在评估模式下使用 Aspose.Cells for Java(即在程序或代码开头未使用或设置有效的许可证代码),您将无法更改活动工作表索引。在代码中实例化并设置许可证后,您可以相应地更改活动工作表索引。这是使用 Aspose.Cells 而未设置有效许可证的限制。如果您希望测试没有评估版本限制的 Aspose.Cells,可以申请一个30天的临时许可证。有关更多信息,请参考如何获取临时许可证?
1 Like