You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fesod.apache.org by de...@apache.org on 2026/10/10 01:46:50 UTC
(fesod) branch main updated: fix: prevent CSV multi-sheet data loss (#1148) (#1158)
This is an automated email from the ASF dual-hosted git repository.
delei pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/fesod.git
The following commit(s) were added to refs/heads/main by this push:
new 9b374942 fix: prevent CSV multi-sheet data loss (#1148) (#1158)
9b374942 is described below
commit 9b37494213dd430e3cb66288f9ff59d0709aed68
Author: aias00 <li...@apache.org>
AuthorDate: Fri Oct 9 18:46:46 2026 -0700
fix: prevent CSV multi-sheet data loss (#1148) (#1158)
Signed-off-by: liuhy <li...@apache.org>
Co-authored-by: DeleiGuo <de...@apache.org>
---
.../fesod/sheet/metadata/csv/CsvWorkbook.java | 16 +++++++++++--
.../apache/fesod/sheet/format/CsvFormatTest.java | 26 ++++++++++++++++++++++
2 files changed, 40 insertions(+), 2 deletions(-)
diff --git a/fesod-sheet/src/main/java/org/apache/fesod/sheet/metadata/csv/CsvWorkbook.java b/fesod-sheet/src/main/java/org/apache/fesod/sheet/metadata/csv/CsvWorkbook.java
index 7fcecb55..62876769 100644
--- a/fesod-sheet/src/main/java/org/apache/fesod/sheet/metadata/csv/CsvWorkbook.java
+++ b/fesod-sheet/src/main/java/org/apache/fesod/sheet/metadata/csv/CsvWorkbook.java
@@ -36,6 +36,7 @@ import lombok.Getter;
import lombok.Setter;
import org.apache.commons.compress.utils.Lists;
import org.apache.commons.csv.CSVFormat;
+import org.apache.fesod.sheet.exception.ExcelGenerateException;
import org.apache.poi.ss.SpreadsheetVersion;
import org.apache.poi.ss.formula.EvaluationWorkbook;
import org.apache.poi.ss.formula.udf.UDFFinder;
@@ -170,18 +171,29 @@ public class CsvWorkbook implements Workbook {
@Override
public Sheet createSheet() {
- assert csvSheet == null : "CSV repeat creation is not allowed.";
+ checkSheetNotCreated();
csvSheet = new CsvSheet(this, out);
return csvSheet;
}
@Override
public Sheet createSheet(String sheetname) {
- assert csvSheet == null : "CSV repeat creation is not allowed.";
+ checkSheetNotCreated();
csvSheet = new CsvSheet(this, out);
return csvSheet;
}
+ private void checkSheetNotCreated() {
+ if (csvSheet != null) {
+ try {
+ csvSheet.close();
+ } catch (IOException e) {
+ throw new ExcelGenerateException(e);
+ }
+ throw new ExcelGenerateException("CSV repeat creation is not allowed.");
+ }
+ }
+
@Override
public Sheet cloneSheet(int sheetNum) {
return null;
diff --git a/fesod-sheet/src/test/java/org/apache/fesod/sheet/format/CsvFormatTest.java b/fesod-sheet/src/test/java/org/apache/fesod/sheet/format/CsvFormatTest.java
index 4cd889ad..b3b2db4d 100644
--- a/fesod-sheet/src/test/java/org/apache/fesod/sheet/format/CsvFormatTest.java
+++ b/fesod-sheet/src/test/java/org/apache/fesod/sheet/format/CsvFormatTest.java
@@ -36,6 +36,7 @@ import org.apache.fesod.common.util.StringUtils;
import org.apache.fesod.sheet.ExcelReader;
import org.apache.fesod.sheet.ExcelWriter;
import org.apache.fesod.sheet.FesodSheet;
+import org.apache.fesod.sheet.exception.ExcelGenerateException;
import org.apache.fesod.sheet.metadata.csv.CsvConstant;
import org.apache.fesod.sheet.metadata.csv.CsvWorkbook;
import org.apache.fesod.sheet.read.metadata.ReadSheet;
@@ -226,6 +227,31 @@ public class CsvFormatTest extends AbstractExcelTest {
.doWrite(data);
}
+ @Test
+ public void writeSecondCsvSheetShouldFailWithoutLosingFirstSheetData() throws Exception {
+ File csvFile = createTempFile("csv-repeat-sheet", ExcelFormat.CSV);
+ List<CsvData> firstSheetData = dataList(3, "First");
+ List<CsvData> secondSheetData = dataList(3, "Second");
+
+ try (ExcelWriter excelWriter = FesodSheet.write(csvFile, CsvData.class)
+ .excelType(ExcelTypeEnum.CSV)
+ .build()) {
+ excelWriter.write(firstSheetData, FesodSheet.writerSheet(0).build());
+
+ ExcelGenerateException exception = Assertions.assertThrows(ExcelGenerateException.class, () -> {
+ excelWriter.write(secondSheetData, FesodSheet.writerSheet(1).build());
+ });
+ Assertions.assertEquals("CSV repeat creation is not allowed.", exception.getMessage());
+ }
+
+ List<CsvData> actualData = FesodSheet.read(csvFile, CsvData.class, new CsvDataListener())
+ .csv()
+ .doReadSync();
+ Assertions.assertEquals(3, actualData.size());
+ Assertions.assertEquals("First0", actualData.get(0).getString());
+ Assertions.assertEquals("First2", actualData.get(2).getString());
+ }
+
private void doTest(
boolean isCreate,
File csvFile,
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@fesod.apache.org
For additional commands, e-mail: commits-help@fesod.apache.org