From d364ef6e7b974a08a745223cd3ddf23a36e0d352 Mon Sep 17 00:00:00 2001 From: gvjoshi25 Date: Sun, 23 Nov 2025 17:51:43 -0500 Subject: [PATCH 1/4] DP-5320 - Read hyperlinks from Excel --- example/data/input/product_list.xlsx | Bin 0 -> 8913 bytes .../cookbook/ReaderHyperlinksFromExcel.java | 61 ++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 example/data/input/product_list.xlsx create mode 100644 src/main/java/com/northconcepts/datapipeline/examples/cookbook/ReaderHyperlinksFromExcel.java diff --git a/example/data/input/product_list.xlsx b/example/data/input/product_list.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..a8e746c2a0fb8b8ad5f0a7daeaa6b889845f2ccf GIT binary patch literal 8913 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 literal 0 HcmV?d00001 diff --git a/src/main/java/com/northconcepts/datapipeline/examples/cookbook/ReaderHyperlinksFromExcel.java b/src/main/java/com/northconcepts/datapipeline/examples/cookbook/ReaderHyperlinksFromExcel.java new file mode 100644 index 0000000..affd1b9 --- /dev/null +++ b/src/main/java/com/northconcepts/datapipeline/examples/cookbook/ReaderHyperlinksFromExcel.java @@ -0,0 +1,61 @@ +package com.northconcepts.datapipeline.examples.cookbook; + +import java.io.File; + +import com.northconcepts.datapipeline.core.DataReader; +import com.northconcepts.datapipeline.core.DataWriter; +import com.northconcepts.datapipeline.core.Field; +import com.northconcepts.datapipeline.core.ProxyWriter; +import com.northconcepts.datapipeline.core.Record; +import com.northconcepts.datapipeline.csv.CSVWriter; +import com.northconcepts.datapipeline.excel.ExcelDocument; +import com.northconcepts.datapipeline.excel.ExcelDocument.ProviderType; +import com.northconcepts.datapipeline.excel.ExcelFieldMetadata; +import com.northconcepts.datapipeline.excel.ExcelHyperlink; +import com.northconcepts.datapipeline.excel.ExcelReader; +import com.northconcepts.datapipeline.job.Job; + +public class ReaderHyperlinksFromExcel { + + private static File INPUT_FILE = new File("example/data/input", "product_list.xlsx"); + private static File OUTPUT_FILE = new File("example/data/output", "product_list.csv"); + + public static void main(String[] args) { + ExcelDocument document = new ExcelDocument(ProviderType.POI_XSSF_SAX) + .open(INPUT_FILE); + DataReader reader = new ExcelReader(document) + .setFieldNamesInFirstRow(true) + .setAutoCloseDocument(true) + .setReadMetadata(true); + + DataWriter writer = new CSVWriter(OUTPUT_FILE); + writer = new CsvProxyWriter(writer); + + Job.run(reader, writer); + } +} + +class CsvProxyWriter extends ProxyWriter { + + private ExcelFieldMetadata metadata = new ExcelFieldMetadata(); + + public CsvProxyWriter(DataWriter nestedDataWriter) { + super(nestedDataWriter); + } + + @Override + protected Record interceptRecord(Record record) throws Throwable { + for (int i = 0; i < record.getFields().size(); i++) { + Field field = record.getFields().get(i); + metadata.setField(field); + + ExcelHyperlink excelHyperlink = metadata.getExcelHyperlink(); + + if (excelHyperlink != null) { + record.addField("product_link", excelHyperlink.getLocation()); + } + } + return super.interceptRecord(record); + } + +} From 41065a0ffe9cbbc161952efa34656f8ea7255ea2 Mon Sep 17 00:00:00 2001 From: gvjoshi25 Date: Mon, 24 Nov 2025 16:14:12 -0500 Subject: [PATCH 2/4] changes as per review comments --- .../cookbook/ReaderHyperlinksFromExcel.java | 22 +++++++------------ 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/northconcepts/datapipeline/examples/cookbook/ReaderHyperlinksFromExcel.java b/src/main/java/com/northconcepts/datapipeline/examples/cookbook/ReaderHyperlinksFromExcel.java index affd1b9..532e4c2 100644 --- a/src/main/java/com/northconcepts/datapipeline/examples/cookbook/ReaderHyperlinksFromExcel.java +++ b/src/main/java/com/northconcepts/datapipeline/examples/cookbook/ReaderHyperlinksFromExcel.java @@ -5,13 +5,12 @@ import com.northconcepts.datapipeline.core.DataReader; import com.northconcepts.datapipeline.core.DataWriter; import com.northconcepts.datapipeline.core.Field; -import com.northconcepts.datapipeline.core.ProxyWriter; +import com.northconcepts.datapipeline.core.ProxyReader; import com.northconcepts.datapipeline.core.Record; import com.northconcepts.datapipeline.csv.CSVWriter; import com.northconcepts.datapipeline.excel.ExcelDocument; import com.northconcepts.datapipeline.excel.ExcelDocument.ProviderType; import com.northconcepts.datapipeline.excel.ExcelFieldMetadata; -import com.northconcepts.datapipeline.excel.ExcelHyperlink; import com.northconcepts.datapipeline.excel.ExcelReader; import com.northconcepts.datapipeline.job.Job; @@ -28,32 +27,27 @@ public static void main(String[] args) { .setAutoCloseDocument(true) .setReadMetadata(true); + reader = new ExcelHyperlinkReader(reader); + DataWriter writer = new CSVWriter(OUTPUT_FILE); - writer = new CsvProxyWriter(writer); Job.run(reader, writer); } } -class CsvProxyWriter extends ProxyWriter { +class ExcelHyperlinkReader extends ProxyReader { private ExcelFieldMetadata metadata = new ExcelFieldMetadata(); - public CsvProxyWriter(DataWriter nestedDataWriter) { - super(nestedDataWriter); + public ExcelHyperlinkReader(DataReader dataReader) { + super(dataReader); } @Override protected Record interceptRecord(Record record) throws Throwable { - for (int i = 0; i < record.getFields().size(); i++) { - Field field = record.getFields().get(i); + for (Field field: record) { metadata.setField(field); - - ExcelHyperlink excelHyperlink = metadata.getExcelHyperlink(); - - if (excelHyperlink != null) { - record.addField("product_link", excelHyperlink.getLocation()); - } + record.addField("product_link", metadata.getExcelHyperlink() == null ? null : metadata.getExcelHyperlink()); } return super.interceptRecord(record); } From 62e6d7c75f54ab7edfa3355673e688ccce887441 Mon Sep 17 00:00:00 2001 From: gvjoshi25 Date: Mon, 24 Nov 2025 18:18:50 -0500 Subject: [PATCH 3/4] fixed issues --- .../examples/cookbook/ReaderHyperlinksFromExcel.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/northconcepts/datapipeline/examples/cookbook/ReaderHyperlinksFromExcel.java b/src/main/java/com/northconcepts/datapipeline/examples/cookbook/ReaderHyperlinksFromExcel.java index 532e4c2..d9e36a7 100644 --- a/src/main/java/com/northconcepts/datapipeline/examples/cookbook/ReaderHyperlinksFromExcel.java +++ b/src/main/java/com/northconcepts/datapipeline/examples/cookbook/ReaderHyperlinksFromExcel.java @@ -45,10 +45,11 @@ public ExcelHyperlinkReader(DataReader dataReader) { @Override protected Record interceptRecord(Record record) throws Throwable { - for (Field field: record) { - metadata.setField(field); - record.addField("product_link", metadata.getExcelHyperlink() == null ? null : metadata.getExcelHyperlink()); - } + Field field = record.getField("product_name"); + metadata.setField(field); + + record.addField("product_link", metadata.getExcelHyperlink() == null ? null : metadata.getExcelHyperlink().getLocation()); + return super.interceptRecord(record); } From 594ffd73d52a295959d6bd9cda1490ff92b10e8f Mon Sep 17 00:00:00 2001 From: gvjoshi25 Date: Mon, 24 Nov 2025 21:16:39 -0500 Subject: [PATCH 4/4] changes as per review comment --- ...yperlinksFromExcel.java => ReadHyperlinksFromExcel.java} | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) rename src/main/java/com/northconcepts/datapipeline/examples/cookbook/{ReaderHyperlinksFromExcel.java => ReadHyperlinksFromExcel.java} (87%) diff --git a/src/main/java/com/northconcepts/datapipeline/examples/cookbook/ReaderHyperlinksFromExcel.java b/src/main/java/com/northconcepts/datapipeline/examples/cookbook/ReadHyperlinksFromExcel.java similarity index 87% rename from src/main/java/com/northconcepts/datapipeline/examples/cookbook/ReaderHyperlinksFromExcel.java rename to src/main/java/com/northconcepts/datapipeline/examples/cookbook/ReadHyperlinksFromExcel.java index d9e36a7..df1fa05 100644 --- a/src/main/java/com/northconcepts/datapipeline/examples/cookbook/ReaderHyperlinksFromExcel.java +++ b/src/main/java/com/northconcepts/datapipeline/examples/cookbook/ReadHyperlinksFromExcel.java @@ -11,10 +11,11 @@ import com.northconcepts.datapipeline.excel.ExcelDocument; import com.northconcepts.datapipeline.excel.ExcelDocument.ProviderType; import com.northconcepts.datapipeline.excel.ExcelFieldMetadata; +import com.northconcepts.datapipeline.excel.ExcelHyperlink; import com.northconcepts.datapipeline.excel.ExcelReader; import com.northconcepts.datapipeline.job.Job; -public class ReaderHyperlinksFromExcel { +public class ReadHyperlinksFromExcel { private static File INPUT_FILE = new File("example/data/input", "product_list.xlsx"); private static File OUTPUT_FILE = new File("example/data/output", "product_list.csv"); @@ -48,7 +49,8 @@ protected Record interceptRecord(Record record) throws Throwable { Field field = record.getField("product_name"); metadata.setField(field); - record.addField("product_link", metadata.getExcelHyperlink() == null ? null : metadata.getExcelHyperlink().getLocation()); + ExcelHyperlink excelHyperlink = metadata.getExcelHyperlink(); + record.addField("product_link", excelHyperlink == null ? null : excelHyperlink.getLocation()); return super.interceptRecord(record); }