diff --git a/inlong-manager/manager-common/pom.xml b/inlong-manager/manager-common/pom.xml
index d609001a9ad..66cf73923c0 100644
--- a/inlong-manager/manager-common/pom.xml
+++ b/inlong-manager/manager-common/pom.xml
@@ -110,6 +110,15 @@
junit-jupiter
test
+
+
+ org.apache.poi
+ poi
+
+
+ org.apache.poi
+ poi-ooxml
+
diff --git a/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/tool/excel/ExcelCellDataTransfer.java b/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/tool/excel/ExcelCellDataTransfer.java
new file mode 100644
index 00000000000..25c5028337a
--- /dev/null
+++ b/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/tool/excel/ExcelCellDataTransfer.java
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.manager.common.tool.excel;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+public enum ExcelCellDataTransfer {
+
+ DATE {
+
+ final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+ String parse2Text(Object o) {
+ if (o == null) {
+ return null;
+ } else if (o instanceof Date) {
+ Date date = (Date) o;
+ return this.simpleDateFormat.format(date);
+ } else {
+ return String.valueOf(o);
+ }
+ }
+
+ Object parseFromText(String so) {
+ if (so != null && so.length() > 0) {
+ String s = so;
+ Date date = null;
+
+ try {
+ date = this.simpleDateFormat.parse(s);
+ } catch (ParseException var5) {
+ var5.printStackTrace();
+ }
+
+ return date;
+ } else {
+ return so;
+ }
+ }
+ },
+ NONE {
+
+ String parse2Text(Object o) {
+ return String.valueOf(o);
+ }
+
+ Object parseFromText(String s) {
+ return s;
+ }
+ };
+
+ private ExcelCellDataTransfer() {
+ }
+ /**
+ * Parse the given object to text.
+ */
+
+ abstract String parse2Text(Object o);
+
+ /**
+ * Parse the given text to object.
+ */
+ abstract Object parseFromText(String s);
+}
diff --git a/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/tool/excel/ExcelTool.java b/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/tool/excel/ExcelTool.java
new file mode 100644
index 00000000000..4e45faeab36
--- /dev/null
+++ b/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/tool/excel/ExcelTool.java
@@ -0,0 +1,694 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.manager.common.tool.excel;
+
+import lombok.Data;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.tuple.Pair;
+import org.apache.commons.lang3.tuple.Triple;
+import org.apache.inlong.manager.common.consts.InlongConstants;
+import org.apache.inlong.manager.common.tool.excel.annotation.ExcelEntity;
+import org.apache.inlong.manager.common.tool.excel.annotation.ExcelField;
+import org.apache.inlong.manager.common.tool.excel.template.ExcelImportTemplate;
+import org.apache.inlong.manager.common.tool.excel.validator.ExcelBatchValidator;
+import org.apache.inlong.manager.common.tool.excel.validator.ExcelCellValidator;
+import org.apache.inlong.manager.common.tool.excel.validator.ExcelRowValidator;
+import org.apache.inlong.manager.common.util.Preconditions;
+import org.apache.poi.ss.usermodel.BorderStyle;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.CellStyle;
+import org.apache.poi.ss.usermodel.CellType;
+import org.apache.poi.ss.usermodel.FillPatternType;
+import org.apache.poi.ss.usermodel.IndexedColors;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Row.MissingCellPolicy;
+import org.apache.poi.ss.util.CellRangeAddressList;
+import org.apache.poi.xssf.usermodel.XSSFCell;
+import org.apache.poi.xssf.usermodel.XSSFCellStyle;
+import org.apache.poi.xssf.usermodel.XSSFDataValidation;
+import org.apache.poi.xssf.usermodel.XSSFDataValidationConstraint;
+import org.apache.poi.xssf.usermodel.XSSFDataValidationHelper;
+import org.apache.poi.xssf.usermodel.XSSFFont;
+import org.apache.poi.xssf.usermodel.XSSFRichTextString;
+import org.apache.poi.xssf.usermodel.XSSFRow;
+import org.apache.poi.xssf.usermodel.XSSFSheet;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.Serializable;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+
+import static org.apache.inlong.manager.common.util.Preconditions.expectTrue;
+
+/**
+ * Utility class for working with Excel files.
+ */
+public class ExcelTool {
+
+ private ExcelTool() {
+
+ }
+
+ private static final int CONSTRAINT_MAX_LENGTH = 255;
+ private static final int DEFAULT_ROW_COUNT = 30;
+ private static final Logger LOGGER = LoggerFactory.getLogger(ExcelTool.class);
+ private static final int DEFAULT_COLUMN_WIDTH = 10000;
+ private static final short DEFAULT_FONT_SIZE = 16;
+
+ /**
+ * Extracts the header row from a given class and returns it as a list of strings.
+ */
+ public static List extractHeader(Class e1Class) {
+ List list = new LinkedList<>();
+ Field[] fields = e1Class.getDeclaredFields();
+ if (fields.length > 0) {
+ for (Field field : fields) {
+ field.setAccessible(true);
+ ExcelField excel = field.getAnnotation(ExcelField.class);
+ if (excel != null) {
+ String excelName = excel.name();
+ list.add(excelName);
+ }
+ }
+ return !list.isEmpty() ? list : Collections.emptyList();
+ } else {
+ return Collections.emptyList();
+ }
+ }
+
+ /**
+ * Writes the given content to an excel document.
+ *
+ * @param contents the list of contents to write
+ * @param out the output stream to write to
+ * @throws IOException if there is an error writing to the output stream
+ */
+ public static void write(List contents, OutputStream out) throws IOException {
+ Preconditions.expectNotEmpty(contents, "Content can not be empty!");
+ Class> clazz = contents.get(0).getClass();
+ List