Full Code of zhangdaiscott/autopoi for AI

master bcac4e081df9 cached
161 files
641.4 KB
192.1k tokens
1072 symbols
1 requests
Download .txt
Showing preview only (751K chars total). Download the full file or copy to clipboard to get everything.
Repository: zhangdaiscott/autopoi
Branch: master
Commit: bcac4e081df9
Files: 161
Total size: 641.4 KB

Directory structure:
gitextract_0g1d_hnq/

├── .gitattributes
├── .gitignore
├── LICENSE
├── POI_5升级说明.md
├── README.md
├── README.zh-CN.md
├── autopoi/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── org/
│       │           └── jeecgframework/
│       │               ├── core/
│       │               │   └── util/
│       │               │       └── ApplicationContextUtil.java
│       │               ├── dict/
│       │               │   └── service/
│       │               │       └── AutoPoiDictServiceI.java
│       │               └── poi/
│       │                   ├── cache/
│       │                   │   ├── ExcelCache.java
│       │                   │   ├── ImageCache.java
│       │                   │   ├── WordCache.java
│       │                   │   ├── manager/
│       │                   │   │   ├── FileLoade.java
│       │                   │   │   └── POICacheManager.java
│       │                   │   └── package-info.java
│       │                   ├── consts/
│       │                   │   └── ImageScaleMode.java
│       │                   ├── entity/
│       │                   │   └── ImageEntity.java
│       │                   ├── excel/
│       │                   │   ├── ExcelExportUtil.java
│       │                   │   ├── ExcelImportCheckUtil.java
│       │                   │   ├── ExcelImportUtil.java
│       │                   │   ├── ExcelToHtmlUtil.java
│       │                   │   ├── annotation/
│       │                   │   │   ├── Excel.java
│       │                   │   │   ├── ExcelCollection.java
│       │                   │   │   ├── ExcelEntity.java
│       │                   │   │   ├── ExcelIgnore.java
│       │                   │   │   ├── ExcelTarget.java
│       │                   │   │   └── ExcelVerify.java
│       │                   │   ├── entity/
│       │                   │   │   ├── ExcelBaseParams.java
│       │                   │   │   ├── ExportParams.java
│       │                   │   │   ├── ImportParams.java
│       │                   │   │   ├── TemplateExportParams.java
│       │                   │   │   ├── enmus/
│       │                   │   │   │   ├── CellValueType.java
│       │                   │   │   │   ├── ExcelStyleType.java
│       │                   │   │   │   └── ExcelType.java
│       │                   │   │   ├── params/
│       │                   │   │   │   ├── ExcelBaseEntity.java
│       │                   │   │   │   ├── ExcelCollectionParams.java
│       │                   │   │   │   ├── ExcelExportEntity.java
│       │                   │   │   │   ├── ExcelForEachParams.java
│       │                   │   │   │   ├── ExcelImportEntity.java
│       │                   │   │   │   ├── ExcelTemplateParams.java
│       │                   │   │   │   ├── ExcelVerifyEntity.java
│       │                   │   │   │   └── MergeEntity.java
│       │                   │   │   ├── result/
│       │                   │   │   │   ├── ExcelImportResult.java
│       │                   │   │   │   └── ExcelVerifyHanlderResult.java
│       │                   │   │   ├── sax/
│       │                   │   │   │   └── SaxReadCellEntity.java
│       │                   │   │   └── vo/
│       │                   │   │       └── PoiBaseConstants.java
│       │                   │   ├── export/
│       │                   │   │   ├── ExcelBatchExportServer.java
│       │                   │   │   ├── ExcelExportServer.java
│       │                   │   │   ├── base/
│       │                   │   │   │   ├── ExcelExportBase.java
│       │                   │   │   │   └── ExportBase.java
│       │                   │   │   ├── styler/
│       │                   │   │   │   ├── AbstractExcelExportStyler.java
│       │                   │   │   │   ├── ExcelExportStylerBorderImpl.java
│       │                   │   │   │   ├── ExcelExportStylerColorImpl.java
│       │                   │   │   │   ├── ExcelExportStylerDefaultImpl.java
│       │                   │   │   │   └── IExcelExportStyler.java
│       │                   │   │   └── template/
│       │                   │   │       └── ExcelExportOfTemplateUtil.java
│       │                   │   ├── graph/
│       │                   │   │   ├── builder/
│       │                   │   │   │   └── ExcelChartBuildService.java
│       │                   │   │   ├── constant/
│       │                   │   │   │   ├── ExcelGraphElementType.java
│       │                   │   │   │   └── ExcelGraphType.java
│       │                   │   │   ├── entity/
│       │                   │   │   │   ├── ExcelGraph.java
│       │                   │   │   │   ├── ExcelGraphDefined.java
│       │                   │   │   │   ├── ExcelGraphElement.java
│       │                   │   │   │   └── ExcelTitleCell.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── html/
│       │                   │   │   ├── ExcelToHtmlServer.java
│       │                   │   │   └── helper/
│       │                   │   │       ├── CellValueHelper.java
│       │                   │   │       ├── MergedRegionHelper.java
│       │                   │   │       ├── StylerHelper.java
│       │                   │   │       └── excelStyle.css
│       │                   │   └── imports/
│       │                   │       ├── CellValueServer.java
│       │                   │       ├── ExcelImportServer.java
│       │                   │       ├── base/
│       │                   │       │   ├── ImportBaseService.java
│       │                   │       │   └── ImportFileServiceI.java
│       │                   │       ├── package-info.java
│       │                   │       ├── sax/
│       │                   │       │   ├── SaxReadExcel.java
│       │                   │       │   ├── SheetHandler.java
│       │                   │       │   └── parse/
│       │                   │       │       ├── ISaxRowRead.java
│       │                   │       │       └── SaxRowRead.java
│       │                   │       └── verifys/
│       │                   │           ├── BaseVerifyHandler.java
│       │                   │           └── VerifyHandlerServer.java
│       │                   ├── exception/
│       │                   │   ├── excel/
│       │                   │   │   ├── ExcelExportException.java
│       │                   │   │   ├── ExcelImportException.java
│       │                   │   │   └── enums/
│       │                   │   │       ├── ExcelExportEnum.java
│       │                   │   │       └── ExcelImportEnum.java
│       │                   │   └── word/
│       │                   │       ├── WordExportException.java
│       │                   │       └── enmus/
│       │                   │           └── WordExportEnum.java
│       │                   ├── handler/
│       │                   │   ├── impl/
│       │                   │   │   ├── ExcelDataHandlerDefaultImpl.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── inter/
│       │                   │   │   ├── IExcelDataHandler.java
│       │                   │   │   ├── IExcelDictHandler.java
│       │                   │   │   ├── IExcelExportServer.java
│       │                   │   │   ├── IExcelExportServerEnhanced.java
│       │                   │   │   ├── IExcelReadRowHanlder.java
│       │                   │   │   ├── IExcelVerifyHandler.java
│       │                   │   │   └── IWriter.java
│       │                   │   └── package-info.java
│       │                   ├── package-info.java
│       │                   ├── util/
│       │                   │   ├── ExcelUtil.java
│       │                   │   ├── JsonParser.java
│       │                   │   ├── MyX509TrustManager.java
│       │                   │   ├── PoiCellUtil.java
│       │                   │   ├── PoiElUtil.java
│       │                   │   ├── PoiExcelGraphDataUtil.java
│       │                   │   ├── PoiExcelTempUtil.java
│       │                   │   ├── PoiFunctionUtil.java
│       │                   │   ├── PoiMergeCellUtil.java
│       │                   │   ├── PoiPublicUtil.java
│       │                   │   ├── PoiReflectorUtil.java
│       │                   │   └── PoiSheetUtility.java
│       │                   └── word/
│       │                       ├── WordExportUtil.java
│       │                       ├── entity/
│       │                       │   ├── MyXWPFDocument.java
│       │                       │   ├── WordImageEntity.java
│       │                       │   └── params/
│       │                       │       ├── ExcelListEntity.java
│       │                       │       └── ListParamEntity.java
│       │                       └── parse/
│       │                           ├── ParseWord07.java
│       │                           └── excel/
│       │                               ├── ExcelEntityParse.java
│       │                               └── ExcelMapParse.java
│       └── test/
│           ├── java/
│           │   ├── DaoChuBigDataTest.java
│           │   ├── DaoChuSheetTest.java
│           │   ├── DaoChuTest.java
│           │   ├── DaoChuWordTest.java
│           │   ├── ExcelToHtmlTest.java
│           │   ├── ImportExcelTest.java
│           │   ├── Poi541ApiCompatibilityTest.java
│           │   ├── Poi541ComprehensiveTest.java
│           │   ├── TestImageScale.java
│           │   └── vo/
│           │       ├── TestDateEntity.java
│           │       └── TestEntity.java
│           └── resources/
│               └── templates/
│                   ├── ExcelImportDateTest.xlsx
│                   ├── test.xlsx
│                   ├── testImageScale.xlsx
│                   ├── testNextMarge.xlsx
│                   ├── 专项支出用款申请书.xls
│                   └── 纳税信息.docx
├── autopoi-spring-boot-2-starter/
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               └── org/
│                   └── jeecgframework/
│                       └── poi/
│                           └── excel/
│                               ├── def/
│                               │   ├── BasePOIConstants.java
│                               │   ├── MapExcelConstants.java
│                               │   ├── NormalExcelConstants.java
│                               │   ├── TemplateExcelConstants.java
│                               │   └── TemplateWordConstants.java
│                               └── view/
│                                   ├── JeecgEntityExcelView.java
│                                   ├── JeecgMapExcelView.java
│                                   ├── JeecgTemplateExcelView.java
│                                   ├── JeecgTemplateWordView.java
│                                   └── MiniAbstractExcelView.java
├── autopoi-spring-boot-3-starter/
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               └── org/
│                   └── jeecgframework/
│                       └── poi/
│                           └── excel/
│                               ├── def/
│                               │   ├── BasePOIConstants.java
│                               │   ├── MapExcelConstants.java
│                               │   ├── NormalExcelConstants.java
│                               │   ├── TemplateExcelConstants.java
│                               │   └── TemplateWordConstants.java
│                               └── view/
│                                   ├── JeecgEntityExcelView.java
│                                   ├── JeecgMapExcelView.java
│                                   ├── JeecgTemplateExcelView.java
│                                   ├── JeecgTemplateWordView.java
│                                   └── MiniAbstractExcelView.java
├── deploy.bat
├── docs/
│   └── 修改日志.log
├── install.bat
├── pom.xml
└── 打包构建.md

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitattributes
================================================
*.js linguist-language=Java
*.css linguist-language=Java
*.html linguist-language=Java
*.vue linguist-language=Java
*.sql linguist-language=Java


================================================
FILE: .gitignore
================================================
## ide
**/.idea
*.iml

## backend
**/target
**/logs

## front
**/*.lock


================================================
FILE: LICENSE
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

"License" shall mean the terms and conditions for use, reproduction, and
distribution as defined by Sections 1 through 9 of this document.

"Licensor" shall mean the copyright owner or entity authorized by the copyright
owner that is granting the License.

"Legal Entity" shall mean the union of the acting entity and all other entities
that control, are controlled by, or are under common control with that entity.
For the purposes of this definition, "control" means (i) the power, direct or
indirect, to cause the direction or management of such entity, whether by
contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.

"You" (or "Your") shall mean an individual or Legal Entity exercising
permissions granted by this License.

"Source" form shall mean the preferred form for making modifications, including
but not limited to software source code, documentation source, and configuration
files.

"Object" form shall mean any form resulting from mechanical transformation or
translation of a Source form, including but not limited to compiled object code,
generated documentation, and conversions to other media types.

"Work" shall mean the work of authorship, whether in Source or Object form, made
available under the License, as indicated by a copyright notice that is included
in or attached to the work (an example is provided in the Appendix below).

"Derivative Works" shall mean any work, whether in Source or Object form, that
is based on (or derived from) the Work and for which the editorial revisions,
annotations, elaborations, or other modifications represent, as a whole, an
original work of authorship. For the purposes of this License, Derivative Works
shall not include works that remain separable from, or merely link (or bind by
name) to the interfaces of, the Work and Derivative Works thereof.

"Contribution" shall mean any work of authorship, including the original version
of the Work and any modifications or additions to that Work or Derivative Works
thereof, that is intentionally submitted to Licensor for inclusion in the Work
by the copyright owner or by an individual or Legal Entity authorized to submit
on behalf of the copyright owner. For the purposes of this definition,
"submitted" means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems, and
issue tracking systems that are managed by, or on behalf of, the Licensor for
the purpose of discussing and improving the Work, but excluding communication
that is conspicuously marked or otherwise designated in writing by the copyright
owner as "Not a Contribution."

"Contributor" shall mean Licensor and any individual or Legal Entity on behalf
of whom a Contribution has been received by Licensor and subsequently
incorporated within the Work.

2. Grant of Copyright License.

Subject to the terms and conditions of this License, each Contributor hereby
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
irrevocable copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the Work and such
Derivative Works in Source or Object form.

3. Grant of Patent License.

Subject to the terms and conditions of this License, each Contributor hereby
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
irrevocable (except as stated in this section) patent license to make, have
made, use, offer to sell, sell, import, and otherwise transfer the Work, where
such license applies only to those patent claims licensable by such Contributor
that are necessarily infringed by their Contribution(s) alone or by combination
of their Contribution(s) with the Work to which such Contribution(s) was
submitted. If You institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work or a
Contribution incorporated within the Work constitutes direct or contributory
patent infringement, then any patent licenses granted to You under this License
for that Work shall terminate as of the date such litigation is filed.

4. Redistribution.

You may reproduce and distribute copies of the Work or Derivative Works thereof
in any medium, with or without modifications, and in Source or Object form,
provided that You meet the following conditions:

You must give any other recipients of the Work or Derivative Works a copy of
this License; and
You must cause any modified files to carry prominent notices stating that You
changed the files; and
You must retain, in the Source form of any Derivative Works that You distribute,
all copyright, patent, trademark, and attribution notices from the Source form
of the Work, excluding those notices that do not pertain to any part of the
Derivative Works; and
If the Work includes a "NOTICE" text file as part of its distribution, then any
Derivative Works that You distribute must include a readable copy of the
attribution notices contained within such NOTICE file, excluding those notices
that do not pertain to any part of the Derivative Works, in at least one of the
following places: within a NOTICE text file distributed as part of the
Derivative Works; within the Source form or documentation, if provided along
with the Derivative Works; or, within a display generated by the Derivative
Works, if and wherever such third-party notices normally appear. The contents of
the NOTICE file are for informational purposes only and do not modify the
License. You may add Your own attribution notices within Derivative Works that
You distribute, alongside or as an addendum to the NOTICE text from the Work,
provided that such additional attribution notices cannot be construed as
modifying the License.
You may add Your own copyright statement to Your modifications and may provide
additional or different license terms and conditions for use, reproduction, or
distribution of Your modifications, or for any such Derivative Works as a whole,
provided Your use, reproduction, and distribution of the Work otherwise complies
with the conditions stated in this License.

5. Submission of Contributions.

Unless You explicitly state otherwise, any Contribution intentionally submitted
for inclusion in the Work by You to the Licensor shall be under the terms and
conditions of this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify the terms of
any separate license agreement you may have executed with Licensor regarding
such Contributions.

6. Trademarks.

This License does not grant permission to use the trade names, trademarks,
service marks, or product names of the Licensor, except as required for
reasonable and customary use in describing the origin of the Work and
reproducing the content of the NOTICE file.

7. Disclaimer of Warranty.

Unless required by applicable law or agreed to in writing, Licensor provides the
Work (and each Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
including, without limitation, any warranties or conditions of TITLE,
NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are
solely responsible for determining the appropriateness of using or
redistributing the Work and assume any risks associated with Your exercise of
permissions under this License.

8. Limitation of Liability.

In no event and under no legal theory, whether in tort (including negligence),
contract, or otherwise, unless required by applicable law (such as deliberate
and grossly negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special, incidental,
or consequential damages of any character arising as a result of this License or
out of the use or inability to use the Work (including but not limited to
damages for loss of goodwill, work stoppage, computer failure or malfunction, or
any and all other commercial damages or losses), even if such Contributor has
been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability.

While redistributing the Work or Derivative Works thereof, You may choose to
offer, and charge a fee for, acceptance of support, warranty, indemnity, or
other liability obligations and/or rights consistent with this License. However,
in accepting such obligations, You may act only on Your own behalf and on Your
sole responsibility, not on behalf of any other Contributor, and only if You
agree to indemnify, defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason of your
accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

APPENDIX: How to apply the Apache License to your work

To apply the Apache License to your work, attach the following boilerplate
notice, with the fields enclosed by brackets "{}" replaced with your own
identifying information. (Don't include the brackets!) The text should be
enclosed in the appropriate comment syntax for the file format. We also
recommend that a file or class name and description of purpose be included on
the same "printed page" as the copyright notice for easier identification within
third-party archives.

   Copyright 2019 scott

   Licensed 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.

================================================
FILE: POI_5升级说明.md
================================================
# AutoPOI v2.0.0 升级指南

## 版本信息

- **当前版本**: 2.0.0
- **发布日期**: 2025-10-22
- **POI 版本**: 5.4.1(从 4.1.2 升级)

## 🎯 重大更新

### 1. POI 升级到 5.4.1
- ✅ 性能提升 20-30%
- ✅ 大数据导出优化(10万行 < 1秒)
- ✅ 更好的内存管理
- ✅ 修复多个已知问题

### 2. Spring Boot 多版本支持
- ✅ Spring Boot 2.x(`autopoi-spring-boot-2-starter`)
- ✅ Spring Boot 3.x(`autopoi-spring-boot-3-starter`)
- ✅ Jakarta EE 完整适配

### 3. 依赖更新
- Apache POI: 4.1.2 → 5.4.1
- Commons IO: 2.11.0 → 2.20.0
- Log4j: 升级到 2.24.3

## 📦 Maven 依赖更新

### Spring Boot 2.x 项目

```xml
<!-- 移除旧版本 -->
<dependency>
 <groupId>org.jeecgframework</groupId>
 <artifactId>autopoi-web</artifactId>
 <version>1.4.18</version>
</dependency>

<!-- 使用新版本 -->
<dependency>
 <groupId>org.jeecgframework</groupId>
 <artifactId>autopoi-spring-boot-2-starter</artifactId>
 <version>2.0.0</version>
</dependency>
```

### Spring Boot 3.x 项目

```xml
<dependency>
 <groupId>org.jeecgframework</groupId>
 <artifactId>autopoi-spring-boot-3-starter</artifactId>
 <version>2.0.0</version>
</dependency>
```

**注意**: Spring Boot 3.x 需要修改 Servlet 导入:
```java
// 修改前
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

// 修改后
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
```

### 纯 Java 项目

```xml
<dependency>
 <groupId>org.jeecgframework</groupId>
 <artifactId>autopoi</artifactId>
 <version>2.0.0</version>
</dependency>
```

## ⚠️ 重要变更

### 1. 模块重命名
- `autopoi-web` → `autopoi-spring-boot-2-starter`

### 2. 依赖变更

#### ❌ 已删除的依赖
**`poi-ooxml-schemas` 依赖已移除**

```xml
<!-- ❌ POI 4.x 需要显式引入 -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml-schemas</artifactId>
    <version>1.4</version>
</dependency>
```

**删除原因:**
1. **POI 5.x 架构改进** - 从 POI 5.0 开始,`poi-ooxml` 依赖已经内置了必要的 schema 定义
2. **依赖简化** - POI 5.x 使用了更轻量的 `poi-ooxml-lite` 替代方案,减少了包体积
3. **避免冲突** - 旧版本的 `poi-ooxml-schemas` 包体积达 15MB+,容易与其他依赖冲突
4. **自动传递** - `poi-ooxml` 5.x 会自动引入所需的 schema 类,无需手动添加

**迁移操作:**
- ✅ 直接删除 `poi-ooxml-schemas` 依赖即可
- ✅ 只保留 `poi` 和 `poi-ooxml` 依赖
- ✅ 无需任何代码修改

```xml
<!-- ✅ POI 5.x 只需这两个依赖 -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>5.4.1</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.4.1</version>
</dependency>
```

**验证方法:**
```bash
# 检查依赖树,确认没有 poi-ooxml-schemas
mvn dependency:tree | grep poi
```

### 3. 不兼容的 API(已废弃)
- ❌ **图表生成功能暂不可用**(`ExcelChartBuildService`)
  - 原因:POI 5.x 的图表 API 完全重构
  - 影响:如果使用了图表生成功能,需要暂时移除或使用其他方案

### 4. API 变更(内部已适配,无需修改代码)
以下变更已在内部处理,用户代码无需修改:
- `cell.getCellTypeEnum()` → `cell.getCellType()`
- `HSSFDateUtil` → `DateUtil`
- `SharedStringsTable` → `SharedStrings`

## 📝 迁移步骤

### 步骤 1: 更新依赖
根据你的项目类型,更新 `pom.xml` 中的依赖(参考上面的配置)。

### 步骤 2: 修改导入(仅 Spring Boot 3.x)
如果升级到 Spring Boot 3.x,将 `javax.servlet` 改为 `jakarta.servlet`。

### 步骤 3: 检查图表功能
如果使用了 `ExcelChartBuildService`,需要暂时移除或寻找替代方案。

### 步骤 4: 测试验证
```bash
mvn clean compile
mvn test
```

### 步骤 5: 修复 Workbook 关闭问题
POI 5.x 要求显式关闭 Workbook:

```java
// 推荐写法
try (FileOutputStream fos = new FileOutputStream("output.xlsx")) {
    workbook.write(fos);
} finally {
    if (workbook != null) {
        workbook.close(); // 必须显式关闭
    }
}
```

## ✅ 功能支持对照表

| 功能 | v1.4.x | v2.0.0 | 说明 |
|------|--------|--------|------|
| Excel 导入导出 | ✅ | ✅ | 性能提升 |
| 注解驱动 | ✅ | ✅ | 完全兼容 |
| 多表头 | ✅ | ✅ | 完全兼容 |
| 多 Sheet | ✅ | ✅ | 完全兼容 |
| 模板导出 | ✅ | ✅ | 完全兼容 |
| 大数据导出 | ✅ | ✅ | 性能优化 |
| Word 导出 | ✅ | ✅ | 完全兼容 |
| 图表生成 | ⚠️ | ❌ | 暂不支持 |
| Spring Boot 2.x | ✅ | ✅ | 完全兼容 |
| Spring Boot 3.x | ❌ | ✅ | 新增支持 |

## 🐛 已修复问题

1. ✅ 大数据导出性能问题
2. ✅ Workbook 资源泄漏问题
3. ✅ 依赖冲突问题(commons-io、log4j)
4. ✅ 生成的 Excel 文件无法打开问题

## 📚 相关资源

- [完整使用文档](./README.md)
- [GitHub Issues](https://github.com/zhangdaiscott/autopoi/issues)
- [示例代码](./autopoi/src/test/java/)

## 💡 常见问题

### Q1: 升级后编译失败?
检查是否正确更新了依赖名称:`autopoi-web` → `autopoi-spring-boot-2-starter`

### Q2: Spring Boot 3 项目报错?
确保已将 `javax.servlet` 改为 `jakarta.servlet`

### Q3: 生成的 Excel 无法打开?
确保在写入后显式关闭 Workbook 对象(参考步骤5)

### Q4: 图表功能不可用?
POI 5.x 的图表 API 已重构,该功能暂未适配,建议使用其他图表库

### Q5: 性能有提升吗?
是的!测试显示性能提升 20-30%,大数据导出速度显著优化

## 🎉 升级建议

- ✅ **推荐升级**: 如果不使用图表功能
- ⚠️ **谨慎升级**: 如果依赖图表生成功能
- ✅ **强烈推荐**: Spring Boot 3.x 新项目


================================================
FILE: README.md
================================================
[中文](./README.zh-CN.md) | English


AutoPOI (Excel and Word Easy Utility)
===========================
AutoPOI, as its name suggests "auto", pursues automation. It enables anyone without POI experience to quickly implement Excel import/export and Word template export in a foolproof manner. You can complete Excel import/export with just 5 lines of code.

Current Version: 2.0.4 (Released: 2025-12-21)

---------------------------
Key Features of AutoPOI
--------------------------
1. Elegant design, easy to use
2. Rich interfaces, easy to extend
3. Many default values, write less do more
4. AbstractView support, web export made simple

---------------------------
Main Utility Classes
---------------------------

1. ExcelExportUtil - Excel export (normal export, template export)
2. ExcelImportUtil - Excel import
3. WordExportUtil - Word export (only supports docx, doc version has image bugs in POI, not supported yet)

---------------------------
Difference Between XLS and XLSX Export
---------------------------

1. Export time: XLS is 2-3x faster than XLSX
2. Export size: XLS is 2-3x larger than XLSX or more
3. Need to consider both network speed and local processing speed

---------------------------
Project Modules
---------------------------
1. autopoi-parent - Parent POM
2. autopoi - Core utility package for Excel export/import and Word export
3. autopoi-spring-boot-2-starter - Spring Boot 2.x support (compatible with javax.servlet)
4. autopoi-spring-boot-3-starter - Spring Boot 3.x support (compatible with jakarta.servlet)
5. SAX import uses xercesImpl package (may cause unexpected issues), Word export uses poi-scratchpad, all as optional dependencies

--------------------------
Maven Dependencies
--------------------------

**For Spring Boot 2.x projects:**
```xml
<dependency>
 <groupId>org.jeecgframework</groupId>
 <artifactId>autopoi-spring-boot-2-starter</artifactId>
 <version>2.0.4</version>
</dependency>
```

**For Spring Boot 3.x projects:**
```xml
<dependency>
 <groupId>org.jeecgframework</groupId>
 <artifactId>autopoi-spring-boot-3-starter</artifactId>
 <version>2.0.4</version>
</dependency>
```

**For pure Java projects (without Spring):**
```xml
<dependency>
 <groupId>org.jeecgframework</groupId>
 <artifactId>autopoi</artifactId>
 <version>2.0.4</version>
</dependency>
```

--------------------------
Template Expression Support
--------------------------
- Space separation
- Ternary operator: {{test ? obj:obj2}}
- n: Indicates numeric cell type {{n:}}
- le: Represents length {{le:()}} used in if/else {{le:() > 8 ? obj1 : obj2}}
- fd: Format date {{fd:(obj;yyyy-MM-dd)}}
- fn: Format number {{fn:(obj;###.00)}}
- fe: Iterate data, create row
- !fe: Iterate data without creating row
- $fe: Insert by moving down, move current and below rows down by .size() rows, then insert
- !if: Delete current column {{!if:(test)}}
- Single quotes for constant values '', e.g., '1' outputs 1


---------------------------
Export Examples
---------------------------
1. Annotations - Both import and export are annotation-based. Add annotations to entities to mark export objects and perform operations.

```Java
@ExcelTarget("courseEntity")
public class CourseEntity implements java.io.Serializable {
    /** Primary Key */
    private String id;
    /** Course Name */
    @Excel(name = "Course Name", orderNum = "1", needMerge = true)
    private String name;
    /** Teacher */
    @ExcelEntity(id = "yuwen")
    @ExcelVerify()
    private TeacherEntity teacher;
    /** Math Teacher */
    @ExcelEntity(id = "shuxue")
    private TeacherEntity shuxueteacher;

    @ExcelCollection(name = "Students", orderNum = "4")
    private List<StudentEntity> students;
}
```

2. Basic Export
Pass export parameters, export object, and object list to complete the export.

```Java
HSSFWorkbook workbook = ExcelExportUtil.exportExcel(new ExportParams(
    "2412312", "Test", "Test"), CourseEntity.class, list);
```

3. Export with Index
Set a parameter value to add an index column in the export.

```Java
ExportParams params = new ExportParams("2412312", "Test", "Test");
params.setAddIndex(true);
HSSFWorkbook workbook = ExcelExportUtil.exportExcel(params,
    TeacherEntity.class, telist);
```

4. Export Map
Create annotation-like collections to complete Map export.

```Java
List<ExcelExportEntity> entity = new ArrayList<ExcelExportEntity>();
entity.add(new ExcelExportEntity("Name", "name"));
entity.add(new ExcelExportEntity("Gender", "sex"));

List<Map<String, String>> list = new ArrayList<Map<String, String>>();
Map<String, String> map;
for (int i = 0; i < 10; i++) {
    map = new HashMap<String, String>();
    map.put("name", "1" + i);
    map.put("sex", "2" + i);
    list.add(map);
}

HSSFWorkbook workbook = ExcelExportUtil.exportExcel(new ExportParams(
    "Test", "Test"), entity, list);
```

5. Template Export
Complete export based on template configuration.

```Java
TemplateExportParams params = new TemplateExportParams();
params.setHeadingRows(2);
params.setHeadingStartRow(2);
Map<String,Object> map = new HashMap<String, Object>();
map.put("year", "2013");
map.put("sunCourses", list.size());
Map<String,Object> obj = new HashMap<String, Object>();
map.put("obj", obj);
obj.put("name", list.size());
params.setTemplateUrl("org/jeecgframework/poi/excel/doc/exportTemp.xls");
Workbook book = ExcelExportUtil.exportExcel(params, CourseEntity.class, list, map);
```

6. Import
Set import parameters, pass file or stream to get the corresponding list.

```Java
ImportParams params = new ImportParams();
params.setTitleRows(2);
params.setHeadRows(2);
//params.setSheetNum(9);
params.setNeedSave(true);
long start = new Date().getTime();
List<CourseEntity> list = ExcelImportUtil.importExcel(new File(
    "d:/tt.xls"), CourseEntity.class, params);
```

7. Seamless Spring MVC Integration
Excel export done with just a few lines.

```Java
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
    ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
    List<JeecgDemo> pageList = jeecgDemoService.list();
    // Export file name
    mv.addObject(NormalExcelConstants.FILE_NAME, "Export Excel File Name");
    // Annotated object Class
    mv.addObject(NormalExcelConstants.CLASS, JeecgDemo.class);
    // Custom table parameters
    mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("Custom Export Excel Title", "Custom Sheet Name"));
    // Export data list
    mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
    return mv;
}
```

| Custom View | Purpose | Description |
| ------ | ------ | ------ |
| JeecgEntityExcelView | Entity object export view | e.g., List&lt;JeecgDemo&gt; |
| JeecgMapExcelView | Map object export view | List&lt;Map&lt;String, String&gt;&gt; list |
| JeecgTemplateExcelView | Excel template export view | - |
| JeecgTemplateWordView | Word template export view | - |

8. Excel Import Validation
Filter data that doesn't meet rules, append error messages to Excel. Provides common validation rules and generic validation interface.

```Java
/**
 * Email validation
 */
@Excel(name = "Email", width = 25)
@ExcelVerify(isEmail = true, notNull = true)
private String email;

/**
 * Mobile phone validation
 */
@Excel(name = "Mobile", width = 20)
@ExcelVerify(isMobile = true, notNull = true)
private String mobile;

ExcelImportResult<ExcelVerifyEntity> result = ExcelImportUtil.importExcelVerify(
    new File("d:/tt.xls"), ExcelVerifyEntity.class, params);
for (int i = 0; i < result.getList().size(); i++) {
    System.out.println(ReflectionToStringBuilder.toString(result.getList().get(i)));
}
```

9. Import Map
Set import parameters, pass file or stream to get the corresponding list. Custom Key requires implementing IExcelDataHandler interface.

```Java
ImportParams params = new ImportParams();
List<Map<String,Object>> list = ExcelImportUtil.importExcel(new File(
    "d:/tt.xls"), Map.class, params);
```

10. Dictionary Usage
Add dicCode="" in the entity property Excel annotation, where dicCode is the Code of the data dictionary in the jeecg system.

```Java
@Excel(name="Gender", width=15, dicCode="sex")
private java.lang.String sex;
```

11. Dictionary Table Usage
dictTable is the database table name, dicCode is the associated field name, dicText is the field corresponding to the content displayed in Excel.

```Java
@Excel(name="Department", dictTable="t_s_depart", dicCode="id", dicText="departname")
private java.lang.String depart;
```

12. Replace Usage
If database stores 0/1, Excel cells display Female/Male.

```Java
@Excel(name="Test Replace", width=15, replace={"Male_1","Female_0"})
private java.lang.String fdReplace;
```

13. Advanced Field Conversion
- exportConvert: Set to true to replace values during export, add a method with "convert" prefix before the original get method name.
- importConvert: Set to true to replace values during import, add a method with "convert" prefix before the original set method name.

```Java
@Excel(name="Test Convert", width=15, exportConvert=true, importConvert=true)
private java.lang.String fdConvert;

/**
 * Conversion example: Add suffix to the field value
 * @return
 */
public String convertgetFdConvert(){
    return this.fdConvert + " Yuan";
}

/**
 * Conversion example: Replace "Yuan" in Excel cell
 * @return
 */
public void convertsetFdConvert(String fdConvert){
    this.fdConvert = fdConvert.replace(" Yuan", "");
}
```

---------------------------
Excel Annotation Reference
---------------------------

**@Excel**

| Property | Type | Default | Description |
|----------------|----------|------------------|------------------------------------------------------------------------|
| name | String | null | Column name, supports name_id |
| needMerge | boolean | false | Whether to merge cells vertically (for single cells in a list, merge multiple rows created by list) |
| orderNum | String | "0" | Column order, supports name_id |
| replace | String[] | {} | Value replacement, export {a_id,b_id}, import reversed |
| savePath | String | "upload" | Import file save path, can be filled for images, default is upload/className/ |
| type | int | 1 | Export type: 1=text, 2=image, 3=function, 10=number, default is text |
| width | double | 10 | Column width |
| height | double | 10 | Column height (will be deprecated, use @ExcelTarget height instead) |
| isStatistics | boolean | false | Auto statistics, append a statistics row with all data summed |
| isHyperlink | boolean | FALSE | Hyperlink, need to implement interface to return object |
| isImportField | boolean | TRUE | Validate field exists in imported Excel, supports name_id |
| exportFormat | String | "" | Export date format |
| importFormat | String | "" | Import date format |
| format | String | "" | Date format, equivalent to setting both exportFormat and importFormat |
| databaseFormat | String | "yyyyMMddHHmmss" | Database format for string type date fields |
| numFormat | String | "" | Number format, Pattern parameter, uses DecimalFormat |
| imageType | int | 1 | Image type: 1=from file, 2=from database, default is file |
| suffix | String | "" | Text suffix, e.g., % makes 90 become 90% |
| isWrap | boolean | TRUE | Whether to wrap, supports \n |
| mergeRely | int[] | {} | Merge cell dependencies, e.g., {0} for second column based on first |
| mergeVertical | boolean | false | Vertically merge cells with same content |
| fixedIndex | int | -1 | Corresponds to Excel column, ignore name |
| isColumnHidden | boolean | FALSE | Export hidden column |

**@ExcelCollection**

| Property | Type | Default | Description |
|----------|----------|-----------------|------------------|
| id | String | null | Define ID |
| name | String | null | Define collection column name, supports name_id |
| orderNum | int | 0 | Order, supports name_id |
| type | Class<?> | ArrayList.class | Used to create objects during import |

**Single Table Export Entity Example**

```Java
public class SysUser implements Serializable {

    /** id */
    private String id;

    /** Login Account */
    @Excel(name = "Login Account", width = 15)
    private String username;

    /** Real Name */
    @Excel(name = "Real Name", width = 15)
    private String realname;

    /** Avatar */
    @Excel(name = "Avatar", width = 15)
    private String avatar;

    /** Birthday */
    @Excel(name = "Birthday", width = 15, format = "yyyy-MM-dd")
    private Date birthday;

    /** Gender (1: Male 2: Female) */
    @Excel(name = "Gender", width = 15, dicCode="sex")
    private Integer sex;

    /** Email */
    @Excel(name = "Email", width = 15)
    private String email;

    /** Phone */
    @Excel(name = "Phone", width = 15)
    private String phone;

    /** Status (1: Normal 2: Frozen) */
    @Excel(name = "Status", width = 15, replace={"Normal_1","Frozen_0"})
    private Integer status;
}
```

**One-to-Many Export Entity Example**

```Java
@Data
public class JeecgOrderMainPage {
    
    /** Primary Key */
    private java.lang.String id;
    
    /** Order Number */
    @Excel(name="Order Number", width=15)
    private java.lang.String orderCode;
    
    /** Order Type */
    private java.lang.String ctype;
    
    /** Order Date */
    @Excel(name="Order Date", width=15, format = "yyyy-MM-dd")
    private java.util.Date orderDate;
    
    /** Order Amount */
    @Excel(name="Order Amount", width=15)
    private java.lang.Double orderMoney;
    
    /** Order Note */
    private java.lang.String content;
    
    /** Created By */
    private java.lang.String createBy;
    
    /** Create Time */
    private java.util.Date createTime;
    
    /** Updated By */
    private java.lang.String updateBy;
    
    /** Update Time */
    private java.util.Date updateTime;
    
    @ExcelCollection(name="Customer")
    private List<JeecgOrderCustomer> jeecgOrderCustomerList;
    
    @ExcelCollection(name="Ticket")
    private List<JeecgOrderTicket> jeecgOrderTicketList;
}
```

---------------------------
Example Code
---------------------------
- [Example Code](./autopoi-spring-boot-2-starter/src/test/java/) - Unit test code location

---------------------------
License
---------------------------
Apache License 2.0



================================================
FILE: README.zh-CN.md
================================================
中文 | [English](./README.md)


AutoPOI (Excel和 Word简易工具类)
===========================
 AutoPOI 功能如同名字auto,追求的就是自动化,让一个没接触过poi的人员,可以傻瓜化的快速实现Excel导入导出、Word模板导出、可以仅仅5行代码就可以完成Excel的导入导出。
 
 当前最新版本: 2.0.4(发布日期:2025-12-21)
 
---------------------------
AutoPOI的主要特点
--------------------------
	1.设计精巧,使用简单
	2.接口丰富,扩展简单
	3.默认值多,write less do more
	4.AbstractView 支持,web导出可以简单明了

---------------------------
AutoPOI的几个入口工具类
---------------------------

	1.ExcelExportUtil Excel导出(普通导出,模板导出)
	2.ExcelImportUtil Excel导入
	3.WordExportUtil  Word导出(只支持docx ,doc版本poi存在图片的bug,暂不支持)
	
---------------------------
关于Excel导出XLS和XLSX区别
---------------------------

	1.导出时间XLS比XLSX快2-3倍
	2.导出大小XLS是XLSX的2-3倍或者更多
	3.导出需要综合网速和本地速度做考虑^~^
	
---------------------------
几个工程的说明
---------------------------
	1.autopoi-parent 父包--作用大家都懂得
	2.autopoi 导入导出的工具包,可以完成Excel导出,导入,Word的导出,Excel的导出功能
	3.autopoi-spring-boot-2-starter  Spring Boot 2.x 支持(兼容 javax.servlet)
	4.autopoi-spring-boot-3-starter  Spring Boot 3.x 支持(兼容 jakarta.servlet)
	5.sax 导入使用xercesImpl这个包(这个包可能造成奇怪的问题哈),word导出使用poi-scratchpad,都作为可选包了
	
--------------------------
Maven 依赖配置
--------------------------

**Spring Boot 2.x 项目:**
```xml
<dependency>
 <groupId>org.jeecgframework</groupId>
 <artifactId>autopoi-spring-boot-2-starter</artifactId>
 <version>2.0.4</version>
</dependency>
```

**Spring Boot 3.x 项目:**
```xml
<dependency>
 <groupId>org.jeecgframework</groupId>
 <artifactId>autopoi-spring-boot-3-starter</artifactId>
 <version>2.0.4</version>
</dependency>
```

**纯 Java 项目(无 Spring):**
```xml
<dependency>
 <groupId>org.jeecgframework</groupId>
 <artifactId>autopoi</artifactId>
 <version>2.0.4</version>
</dependency>
```

--------------------------
AutoPoi 模板 表达式支持
--------------------------
- 空格分割
- 三目运算  {{test ? obj:obj2}}
- n: 表示 这个cell是数值类型 {{n:}}
- le: 代表长度{{le:()}} 在if/else 运用{{le:() > 8 ? obj1 :  obj2}}
- fd: 格式化时间 {{fd:(obj;yyyy-MM-dd)}}
- fn: 格式化数字 {{fn:(obj;###.00)}}
- fe: 遍历数据,创建row
- !fe: 遍历数据不创建row 
- $fe: 下移插入,把当前行,下面的行全部下移.size()行,然后插入
- !if: 删除当前列 {{!if:(test)}}
- 单引号表示常量值 ''  比如'1' 那么输出的就是 1


---------------------------
AutoPoi导出实例
---------------------------
1.注解,导入导出都是基于注解的,实体上做上注解,标示导出对象,同时可以做一些操作

```Java
	@ExcelTarget("courseEntity")
	public class CourseEntity implements java.io.Serializable {
	/** 主键 */
	private String id;
	/** 课程名称 */
	@Excel(name = "课程名称", orderNum = "1", needMerge = true)
	private String name;
	/** 老师主键 */
	@ExcelEntity(id = "yuwen")
	@ExcelVerify()
	private TeacherEntity teacher;
	/** 老师主键 */
	@ExcelEntity(id = "shuxue")
	private TeacherEntity shuxueteacher;

	@ExcelCollection(name = "选课学生", orderNum = "4")
	private List<StudentEntity> students;
```

2.基础导出
	传入导出参数,导出对象,以及对象列表即可完成导出
	
```Java
	HSSFWorkbook workbook = ExcelExportUtil.exportExcel(new ExportParams(
				"2412312", "测试", "测试"), CourseEntity.class, list);
```

3.基础导出,带有索引
	在到处参数设置一个值,就可以在导出列增加索引
	
```Java
	ExportParams params = new ExportParams("2412312", "测试", "测试");
	params.setAddIndex(true);
	HSSFWorkbook workbook = ExcelExportUtil.exportExcel(params,
			TeacherEntity.class, telist);
```			

4.导出Map
	创建类似注解的集合,即可完成Map的导出,略有麻烦
	
```Java
	List<ExcelExportEntity> entity = new ArrayList<ExcelExportEntity>();
	entity.add(new ExcelExportEntity("姓名", "name"));
	entity.add(new ExcelExportEntity("性别", "sex"));

	List<Map<String, String>> list = new ArrayList<Map<String, String>>();
	Map<String, String> map;
	for (int i = 0; i < 10; i++) {
		map = new HashMap<String, String>();
		map.put("name", "1" + i);
		map.put("sex", "2" + i);
		list.add(map);
	}

	HSSFWorkbook workbook = ExcelExportUtil.exportExcel(new ExportParams(
			"测试", "测试"), entity, list);	
```		
	
5.模板导出
	根据模板配置,完成对应导出
	
```Java
	TemplateExportParams params = new TemplateExportParams();
	params.setHeadingRows(2);
	params.setHeadingStartRow(2);
	Map<String,Object> map = new HashMap<String, Object>();
    map.put("year", "2013");
    map.put("sunCourses", list.size());
    Map<String,Object> obj = new HashMap<String, Object>();
    map.put("obj", obj);
    obj.put("name", list.size());
	 params.setTemplateUrl("org/jeecgframework/poi/excel/doc/exportTemp.xls");
	Workbook book = ExcelExportUtil.exportExcel(params, CourseEntity.class, list,
			map);
```			

6.导入
	设置导入参数,传入文件或者流,即可获得相应的list
	
```Java
	ImportParams params = new ImportParams();
	params.setTitleRows(2);
	params.setHeadRows(2);
	//params.setSheetNum(9);
	params.setNeedSave(true);
	long start = new Date().getTime();
	List<CourseEntity> list = ExcelImportUtil.importExcel(new File(
			"d:/tt.xls"), CourseEntity.class, params);
```	

7.SpringMvc的无缝融合
	简单几句话,Excel导出搞定
	
```Java
	@RequestMapping(value = "/exportXls")
	public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
		ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
		List<JeecgDemo> pageList = jeecgDemoService.list();
		//导出文件名称
		mv.addObject(NormalExcelConstants.FILE_NAME,"导出Excel文件名字");
		//注解对象Class
		mv.addObject(NormalExcelConstants.CLASS,JeecgDemo.class);
		//自定义表格参数
		mv.addObject(NormalExcelConstants.PARAMS,new ExportParams("自定义导出Excel模板内容标题", "自定义Sheet名字"));
		//导出数据列表
		mv.addObject(NormalExcelConstants.DATA_LIST,pageList);
		return mv;
	}
```


| 自定义视图 | 用途 |  描述 |
| ------ | ------ | ------ |
| JeecgMapExcelView | 实体对象导出视图 | 例如:List<JeecgDemo> |
| JeecgEntityExcelView | Map对象导出视图 | List<Map<String, String>> list |
| JeecgTemplateExcelView | Excel模板导出视图 | - | 
| JeecgTemplateWordView | Word模板导出视图 | - |


8.Excel导入校验,过滤不符合规则的数据,追加错误信息到Excel,提供常用的校验规则,已经通用的校验接口

```Java
	/**
     * Email校验
     */
    @Excel(name = "Email", width = 25)
    @ExcelVerify(isEmail = true, notNull = true)
    private String email;
    /**
     * 手机号校验
     */
    @Excel(name = "Mobile", width = 20)
    @ExcelVerify(isMobile = true, notNull = true)
    private String mobile;
    
    ExcelImportResult<ExcelVerifyEntity> result = ExcelImportUtil.importExcelVerify(new File(
            "d:/tt.xls"), ExcelVerifyEntity.class, params);
    for (int i = 0; i < result.getList().size(); i++) {
        System.out.println(ReflectionToStringBuilder.toString(result.getList().get(i)));
    }
```

9.导入Map
	设置导入参数,传入文件或者流,即可获得相应的list,自定义Key,需要实现IExcelDataHandler接口
	
```Java
	ImportParams params = new ImportParams();
	List<Map<String,Object>> list = ExcelImportUtil.importExcel(new File(
			"d:/tt.xls"), Map.class, params);
```

10.字典用法
        在实体属性注解excel中添加dicCode="",此处dicCode即为jeecg系统中数据字典的Code
	
```Java
   @Excel(name="性别",width=15,dicCode="sex")
   private java.lang.String sex;
```

11.字典表用法
       此处dictTable为数据库表名,dicCode为关联字段名,dicText为excel中显示的内容对应的字段
	
```Java
	@Excel(name="部门",dictTable="t_s_depart",dicCode="id",dicText="departname")
    private java.lang.String depart;
```

12.Replace用法
       若数据库中存储的是0/1 ,则导出/导入的excel单元格中显示的是女/男
	
```Java
	@Excel(name="测试替换",width=15,replace={"男_1","女_0"})
	private java.lang.String fdReplace;
```

13.高级字段转换用法
- exportConvert:在导出的时候需要替换值则配置该值为true,同时增加一个方法,方法名为原get方法名前加convert。
- importConvert:在导入的时候需要替换值则配置该值为true,同时增加一个方法,方法名为原set方法名前加convert。

```Java
	@Excel(name="测试转换",width=15,exportConvert=true,importConvert=true)
	private java.lang.String fdConvert;
	
	/**
	  * 转换值示例: 在该字段值的后面加上元
	  * @return
	  */
	public String convertgetFdConvert(){
	  return this.fdConvert+"元";
	}
	  
	/**
	 * 转换值示例: 替换掉excel单元格中的"元"
	 * @return
	 */
	public void convertsetFdConvert(String fdConvert){
	  this.fdConvert = fdConvert.replace("元","");
	}
```

---------------------------
 Excel 注解说明
---------------------------

@Excel

| 属性             | 类型       | 默认值              | 功能                                                                     |
|----------------|----------|------------------|------------------------------------------------------------------------|
| name           | String   | null             | 列名,支持name_id                                                           |
| needMerge      | boolean  | fasle            | 是否需要纵向合并单元格(用于含有list中,单个的单元格,合并list创建的多个row)                           |
| orderNum       | String   | "0"              | 列的排序,支持name_id                                                         |
| replace        | String[] | {}               | 值得替换 导出是{a_id,b_id} 导入反过来                                              |
| savePath       | String   | "upload"         | 导入文件保存路径,如果是图片可以填写,默认是upload/className/ IconEntity这个类对应的就是upload/Icon/ |
| type           | int      | 1                | 导出类型 1 是文本 2 是图片,3 是函数,10 是数字 默认是文本                                    |
| width          | double   | 10               | 列宽                                                                     |
| height         | double   | 10               | 列高,后期打算统一使用@ExcelTarget的height,这个会被废弃,注意                               |
| isStatistics   | boolean  | fasle            | 自动统计数据,在追加一行统计,把所有数据都和输出 这个处理会吞没异常,请注意这一点                              |
| isHyperlink    | boolean  | FALSE            | 超链接,如果是需要实现接口返回对象                                                      |
| isImportField  | boolean  | TRUE             | 校验字段,看看这个字段是不是导入的Excel中有,如果没有说明是错误的Excel,读取失败,支持name_id                |
| exportFormat   | String   | ""               | 导出的时间格式,以这个是否为空来判断是否需要格式化日期                                            |
| importFormat   | String   | ""               | 导入的时间格式,以这个是否为空来判断是否需要格式化日期                                            |
| format         | String   | ""               | 时间格式,相当于同时设置了exportFormat 和 importFormat                               |
| databaseFormat | String   | "yyyyMMddHHmmss" | 导出时间设置,如果字段是Date类型则不需要设置 数据库如果是string 类型,这个需要设置这个数据库格式,用以转换时间格式输出      |
| numFormat      | String   | ""               | 数字格式化,参数是Pattern,使用的对象是DecimalFormat                                   |
| imageType      | int      | 1                | 导出类型 1 从file读取 2 是从数据库中读取 默认是文件 同样导入也是一样的                              |
| suffix         | String   | ""               | 文字后缀,如% 90 变成90%                                                       |
| isWrap         | boolean  | TRUE             | 是否换行 即支持\n                                                             |
| mergeRely      | int[]    | {}               | 合并单元格依赖关系,比如第二列合并是基于第一列 则{0}就可以了                                       |
| mergeVertical  | boolean  | fasle            | 纵向合并内容相同的单元格                                                           |
| fixedIndex     | int      | -1               | 对应excel的列,忽略名字                                                         |
| isColumnHidden | boolean  | FALSE            | 导出隐藏列                                                                  |


@ExcelCollection

| 属性       | 类型       | 默认值             | 功能               |
|----------|----------|-----------------|------------------|
| id       | String   | null            | 定义ID             |
| name     | String   | null            | 定义集合列名,支持nanm_id |
| orderNum | int      | 0               | 排序,支持name_id     |
| type     | Class<?> | ArrayList.class | 导入时创建对象使用        |



单表导出实体注解源码

```Java
public class SysUser implements Serializable {

    /**id*/
    private String id;

    /**登录账号 */
    @Excel(name = "登录账号", width = 15)
    private String username;

    /**真实姓名*/
    @Excel(name = "真实姓名", width = 15)
    private String realname;

    /**头像*/
    @Excel(name = "头像", width = 15)
    private String avatar;

    /**生日*/
    @Excel(name = "生日", width = 15, format = "yyyy-MM-dd")
    private Date birthday;

    /**性别(1:男 2:女)*/
    @Excel(name = "性别", width = 15,dicCode="sex")
    private Integer sex;

    /**电子邮件*/
    @Excel(name = "电子邮件", width = 15)
    private String email;

    /**电话*/
    @Excel(name = "电话", width = 15)
    private String phone;

    /**状态(1:正常  2:冻结 )*/
    @Excel(name = "状态", width = 15,replace={"正常_1","冻结_0"})
    private Integer status;
```

一对多导出实体注解源码

```Java
@Data
public class JeecgOrderMainPage {
	
	/**主键*/
	private java.lang.String id;
	/**订单号*/
	@Excel(name="订单号",width=15)
	private java.lang.String orderCode;
	/**订单类型*/
	private java.lang.String ctype;
	/**订单日期*/
	@Excel(name="订单日期",width=15,format = "yyyy-MM-dd")
	private java.util.Date orderDate;
	/**订单金额*/
	@Excel(name="订单金额",width=15)
	private java.lang.Double orderMoney;
	/**订单备注*/
	private java.lang.String content;
	/**创建人*/
	private java.lang.String createBy;
	/**创建时间*/
	private java.util.Date createTime;
	/**修改人*/
	private java.lang.String updateBy;
	/**修改时间*/
	private java.util.Date updateTime;
	
	@ExcelCollection(name="客户")
	private List<JeecgOrderCustomer> jeecgOrderCustomerList;
	@ExcelCollection(name="机票")
	private List<JeecgOrderTicket> jeecgOrderTicketList;
}
```

================================================
FILE: autopoi/pom.xml
================================================
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.jeecgframework</groupId>
		<artifactId>autopoi-parent</artifactId>
		<version>2.0.4</version>
	</parent>
	<artifactId>autopoi</artifactId>
	<name>autopoi</name>

	<properties>
		<!-- autopoi core requires JDK 8+ -->
		<maven.compiler.source>1.8</maven.compiler.source>
		<maven.compiler.target>1.8</maven.compiler.target>
		<java.version>1.8</java.version>
	</properties>
	
	<dependencies>
		<!-- poi -->
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi</artifactId>
		</dependency>
	<dependency>
		<groupId>org.apache.poi</groupId>
		<artifactId>poi-ooxml</artifactId>
		<exclusions>
			<exclusion>
				<groupId>commons-io</groupId>
				<artifactId>commons-io</artifactId>
			</exclusion>
			<exclusion>
				<artifactId>xml-apis</artifactId>
				<groupId>xml-apis</groupId>
			</exclusion>
			<exclusion>
				<artifactId>commons-codec</artifactId>
				<groupId>commons-codec</groupId>
			</exclusion>
		</exclusions>
	</dependency>
	<!-- Sax 读入的时候使用 -->
		<dependency>
			<groupId>xerces</groupId>
			<artifactId>xercesImpl</artifactId>
			<optional>true</optional>
		</dependency>
		<!-- Word 时候用到 -->
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi-scratchpad</artifactId>
		</dependency>

		<!-- google 工具类 -->
		<dependency>
			<groupId>com.google.guava</groupId>
			<artifactId>guava</artifactId>
		</dependency>

		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-lang3</artifactId>
		</dependency>

		<!-- commons -->
		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
		</dependency>


		<!--日志 -->
		<!-- slf4j -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<optional>true</optional>
		</dependency>

		<!--spring -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<optional>true</optional>
		</dependency>
	
		<!-- 测试依赖 -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.13.2</version>
			<scope>test</scope>
		</dependency>
	
		<dependency>
			<groupId>org.apache.logging.log4j</groupId>
			<artifactId>log4j-to-slf4j</artifactId>
			<version>2.24.3</version>
			<scope>test</scope>
		</dependency>
	
		<dependency>
			<groupId>org.apache.logging.log4j</groupId>
			<artifactId>log4j-api</artifactId>
			<version>2.24.3</version>
			<scope>test</scope>
		</dependency>
	
	</dependencies>

<build>
	<plugins>
		<!-- JDK 8 编译配置 - 关键:release 参数确保只使用 JDK 8 API -->
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-compiler-plugin</artifactId>
			<version>3.11.0</version>
			<configuration>
				<source>1.8</source>
				<target>1.8</target>
				<release>8</release>
				<encoding>UTF-8</encoding>
			</configuration>
		</plugin>
		<!-- Maven Surefire Plugin:允许运行测试 -->
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-surefire-plugin</artifactId>
			<version>3.0.0-M5</version>
			<configuration>
				<!-- autopoi 模块允许运行测试,覆盖父 pom 的配置 -->
				<skipTests>false</skipTests>
			</configuration>
		</plugin>
	</plugins>
</build>
</project>

================================================
FILE: autopoi/src/main/java/org/jeecgframework/core/util/ApplicationContextUtil.java
================================================
package org.jeecgframework.core.util;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;

/**
 * 
 * @author  张代浩
 *
 */
@Lazy(false)
@Component
public class ApplicationContextUtil implements ApplicationContextAware {

	private static ApplicationContext context;


	@Override
	public void setApplicationContext(ApplicationContext context) throws BeansException {
		ApplicationContextUtil.context = context;
	}


	public static ApplicationContext getContext() {
		return context;
	}
}


================================================
FILE: autopoi/src/main/java/org/jeecgframework/dict/service/AutoPoiDictServiceI.java
================================================
package org.jeecgframework.dict.service;


/**
 * 描述:
 * @author:scott
 * @since:2017-4-12 下午04:58:15
 * @version:1.0
 */
public interface AutoPoiDictServiceI{
	/**
 	 * 方法描述:  查询数据字典
 	 * 作    者: yiming.zhang
 	 * 日    期: 2014年5月11日-下午4:22:42
 	 * @param dicTable
 	 * @param dicCode
 	 * @param dicText
 	 * @return 
 	 * 返回类型: List<DictEntity>
 	 */
 	public String[] queryDict(String dicTable,String dicCode, String dicText);

}


================================================
FILE: autopoi/src/main/java/org/jeecgframework/poi/cache/ExcelCache.java
================================================
/**
 * Copyright 2013-2015 JEECG (jeecgos@163.com)
 *   
 *  Licensed 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.jeecgframework.poi.cache;

import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.jeecgframework.poi.cache.manager.POICacheManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Arrays;
import java.util.List;

/**
 * Excel类型的缓存
 * 
 * @author JEECG
 * @date 2014年2月11日
 * @version 1.0
 */
public final class ExcelCache {

	private static final Logger LOGGER = LoggerFactory.getLogger(ExcelCache.class);

	public static Workbook getWorkbook(String url, Integer[] sheetNums, boolean needAll) {
		InputStream is = null;
		List<Integer> sheetList = Arrays.asList(sheetNums);
		try {
			is = POICacheManager.getFile(url);
			Workbook wb = WorkbookFactory.create(is);
			// 删除其他的sheet
			if (!needAll) {
				for (int i = wb.getNumberOfSheets() - 1; i >= 0; i--) {
					if (!sheetList.contains(i)) {
						wb.removeSheetAt(i);
					}
				}
			}
			return wb;
		} catch (Exception e) {
			LOGGER.error(e.getMessage(), e);
		} finally {
			try {
				is.close();
			} catch (Exception e) {
				LOGGER.error(e.getMessage(), e);
			}
		}
		return null;
	}
	//update-begin-author:wangshuai date:20200730 for:jar 包上传到服务器后 autopoi 读取不到excel模版文件 #1505
	public static Workbook getWorkbookByTemplate(String url, Integer[] sheetNums, boolean needAll) {
		List<Integer> sheetList = Arrays.asList(sheetNums);
		InputStream fis = null;
		try {
			//update-begin----author:liusq------date:20210129-----for:-------poi3升级到4兼容改造工作--------
			//ClassPathResource  resource = new ClassPathResource(url);
			fis = new FileInputStream(url);
			LOGGER.info("  >>>  poi3升级到4兼容改造工作, url="+url);
			//fis = resource.getInputStream();
			//update-end-----author:liusq------date:20210129-----for:-------poi3升级到4兼容改造工作--------
			Workbook wb = WorkbookFactory.create(fis);
			// 删除其他的sheet
			if (!needAll) {
				for (int i = wb.getNumberOfSheets() - 1; i >= 0; i--) {
					if (!sheetList.contains(i)) {
						wb.removeSheetAt(i);
					}
				}
			}
			return wb;
		} catch (Exception e) {
			LOGGER.error(e.getMessage(), e);
		} finally {
			try {
				fis.close();
			} catch (Exception e) {
				LOGGER.error(e.getMessage(), e);
			}
		}
		return null;
	}
    //update-end-author:wangshuai date:20200730 for:jar 包上传到服务器后 autopoi 读取不到excel模版文件 #1505
}


================================================
FILE: autopoi/src/main/java/org/jeecgframework/poi/cache/ImageCache.java
================================================
/**
 * Copyright 2013-2015 JueYue (qrb.jueyue@gmail.com)
 * <p>
 * Licensed 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
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * 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.jeecgframework.poi.cache;

import org.apache.poi.util.IOUtils;
import org.jeecgframework.poi.cache.manager.POICacheManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;

/**
 * 图片缓存处理
 *
 * @author liusq
 * 2022-05-27 下午4:16:32
 */
public class ImageCache {

    private static final Logger LOGGER = LoggerFactory
            .getLogger(ImageCache.class);

    public static byte[] getImage(String imagePath) {
        InputStream                 is           = POICacheManager.getFile(imagePath);
        ByteArrayOutputStream       byteArrayOut = new ByteArrayOutputStream();
        final ByteArrayOutputStream swapStream   = new ByteArrayOutputStream();
        try {
            int ch;
            while ((ch = is.read()) != -1) {
                swapStream.write(ch);
            }
            Image         image     = Toolkit.getDefaultToolkit().createImage(swapStream.toByteArray());
            BufferedImage bufferImg = toBufferedImage(image);
            ImageIO.write(bufferImg,
                    imagePath.substring(imagePath.lastIndexOf(".") + 1, imagePath.length()),
                    byteArrayOut);
            return byteArrayOut.toByteArray();
        } catch (Exception e) {
            LOGGER.error(e.getMessage(), e);
            return null;
        } finally {
            IOUtils.closeQuietly(is);
            IOUtils.closeQuietly(swapStream);
            IOUtils.closeQuietly(byteArrayOut);
        }

    }


    public static BufferedImage toBufferedImage(Image image) {
        if (image instanceof BufferedImage) {
            return (BufferedImage) image;
        }
        // This code ensures that all the pixels in the image are loaded
        image = new ImageIcon(image).getImage();
        BufferedImage bimage = null;
        GraphicsEnvironment ge = GraphicsEnvironment
                .getLocalGraphicsEnvironment();
        try {
            int                   transparency = Transparency.OPAQUE;
            GraphicsDevice        gs           = ge.getDefaultScreenDevice();
            GraphicsConfiguration gc           = gs.getDefaultConfiguration();
            bimage = gc.createCompatibleImage(image.getWidth(null),
                    image.getHeight(null), transparency);
        } catch (HeadlessException e) {
            // The system does not have a screen
        }
        if (bimage == null) {
            // Create a buffered image using the default color model
            int type = BufferedImage.TYPE_INT_RGB;
            bimage = new BufferedImage(image.getWidth(null),
                    image.getHeight(null), type);
        }
        // Copy image to buffered image
        Graphics g = bimage.createGraphics();
        // Paint the image onto the buffered image
        g.drawImage(image, 0, 0, null);
        g.dispose();
        return bimage;
    }
}


================================================
FILE: autopoi/src/main/java/org/jeecgframework/poi/cache/WordCache.java
================================================
/**
 * Copyright 2013-2015 JEECG (jeecgos@163.com)
 *   
 *  Licensed 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.jeecgframework.poi.cache;

import java.io.InputStream;

import org.jeecgframework.poi.cache.manager.POICacheManager;
import org.jeecgframework.poi.word.entity.MyXWPFDocument;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * word 缓存中心
 * 
 * @author JEECG
 * @date 2014年7月24日 下午10:54:31
 */
public class WordCache {

	private static final Logger LOGGER = LoggerFactory.getLogger(WordCache.class);

	public static MyXWPFDocument getXWPFDocumen(String url) {
		InputStream is = null;
		try {
			is = POICacheManager.getFile(url);
			MyXWPFDocument doc = new MyXWPFDocument(is);
			return doc;
		} catch (Exception e) {
			LOGGER.error(e.getMessage(), e);
		} finally {
			try {
				is.close();
			} catch (Exception e) {
				LOGGER.error(e.getMessage(), e);
			}
		}
		return null;
	}

}


================================================
FILE: autopoi/src/main/java/org/jeecgframework/poi/cache/manager/FileLoade.java
================================================
/**
 * Copyright 2013-2015 JEECG (jeecgos@163.com)
 *   
 *  Licensed 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.jeecgframework.poi.cache.manager;

import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import org.jeecgframework.poi.util.PoiPublicUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 文件加载类,根据路径加载指定文件
 * 
 * @author JEECG
 * @date 2014年2月10日
 * @version 1.0
 */
class FileLoade {

	private static final Logger LOGGER = LoggerFactory.getLogger(FileLoade.class);

	public byte[] getFile(String url) {
		FileInputStream fileis = null;
		ByteArrayOutputStream baos = null;
		try {
			// 先用绝对路径查询,再查询相对路径
			try {
				fileis = new FileInputStream(url);
			} catch (FileNotFoundException e) {
				String path = PoiPublicUtil.getWebRootPath(url);
				fileis = new FileInputStream(path);
			}
			baos = new ByteArrayOutputStream();
			byte[] buffer = new byte[1024];
			int len;
			while ((len = fileis.read(buffer)) > -1) {
				baos.write(buffer, 0, len);
			}
			baos.flush();
			return baos.toByteArray();
		} catch (FileNotFoundException e) {
			LOGGER.error(e.getMessage(), e);
		} catch (IOException e) {
			LOGGER.error(e.getMessage(), e);
		} finally {
			try {
				if (fileis != null)
					fileis.close();
				if (fileis != null)
					baos.close();
			} catch (IOException e) {
				LOGGER.error(e.getMessage(), e);
			}
		}
		LOGGER.error(fileis + "这个路径文件没有找到,请查询");
		return null;
	}

}


================================================
FILE: autopoi/src/main/java/org/jeecgframework/poi/cache/manager/POICacheManager.java
================================================
/**
 * Copyright 2013-2015 JEECG (jeecgos@163.com)
 *   
 *  Licensed 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.jeecgframework.poi.cache.manager;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.Arrays;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;

/**
 * 缓存管理
 * 
 * @author JEECG
 * @date 2014年2月10日
 * @version 1.0
 */
public final class POICacheManager {

	private static final Logger LOGGER = LoggerFactory.getLogger(POICacheManager.class);

	private static LoadingCache<String, byte[]> loadingCache;

	static {
		loadingCache = CacheBuilder.newBuilder().expireAfterWrite(7, TimeUnit.DAYS).maximumSize(50).build(new CacheLoader<String, byte[]>() {
			@Override
			public byte[] load(String url) throws Exception {
				return new FileLoade().getFile(url);
			}
		});
	}

	public static InputStream getFile(String id) {
		try {
			// 复杂数据,防止操作原数据
			byte[] result = Arrays.copyOf(loadingCache.get(id), loadingCache.get(id).length);
			return new ByteArrayInputStream(result);
		} catch (ExecutionException e) {
			LOGGER.error(e.getMessage(), e);
		}
		return null;
	}

	//update-begin---author:chenrui ---date:20240403  for:[issue/#5933]增加清除缓存方法------------
    /**
     * 清除所有缓存
     *
     * @author chenrui
     * @date 2024/4/3 11:46
     */
    public static void cleanAll() {
        loadingCache.invalidateAll();
    }

    /**
     * 清除缓存
     *
     * @param id 缓存key
     * @author chenrui
     * @date 2024/4/3 11:46
     */
    public static void clean(String id) {
        loadingCache.invalidate(id);
    }
	//update-end---author:chenrui ---date:20240403  for:[issue/#5933]增加清除缓存方法------------

}


================================================
FILE: autopoi/src/main/java/org/jeecgframework/poi/cache/package-info.java
================================================
/**
 * 对POI用到的模板进行缓存,进行统一管理,缓存工具暂时使用guava(脱离配置文件)
 * 缓存方式统一为byte[] 屏蔽文件类型的差异
 * 缓存获取方式,URL或者URL+index(EXcel的)
 */
/**
 * @author JEECG
 * @date 2014年2月10日
 * @version 1.0
 */
package org.jeecgframework.poi.cache;

================================================
FILE: autopoi/src/main/java/org/jeecgframework/poi/consts/ImageScaleMode.java
================================================
package org.jeecgframework.poi.consts;

/**
 * 图片缩放模式枚举
 * for [issues/8892] AutoPoi ImageEntity建议添加scale属性,控制图片导出缩放模式
 * 
 * @author chenrui
 * @date 2025-10-29
 */
public enum ImageScaleMode {
    
    /**
     * 拉伸填充
     */
    STRETCH(0, "拉伸填充"),
    
    /**
     * 等比例缩放适应
     */
    FIT(1, "等比例缩放适应"),
    
    /**
     * 不缩放(原始大小)
     */
    ORIGINAL(2, "不缩放(原始大小)");
    
    private final int code;
    private final String description;
    
    ImageScaleMode(int code, String description) {
        this.code = code;
        this.description = description;
    }
    
    public int getCode() {
        return code;
    }
    
    public String getDescription() {
        return description;
    }
    
    /**
     * 根据code获取枚举
     * 
     * @param code 代码值
     * @return 对应的枚举值,如果找不到则返回STRETCH
     */
    public static ImageScaleMode valueOf(int code) {
        for (ImageScaleMode mode : values()) {
            if (mode.code == code) {
                return mode;
            }
        }
        return STRETCH;
    }
}



================================================
FILE: autopoi/src/main/java/org/jeecgframework/poi/entity/ImageEntity.java
================================================
package org.jeecgframework.poi.entity;

import org.jeecgframework.poi.consts.ImageScaleMode;

/**
 * word导出,图片设置和图片信息
 * 
 * @author liusq
 * @date  2022-5-27
 */
public class ImageEntity {

    public static String URL  = "url";
    public static String Data = "data"; 
    
    /**
     * 图片输入方式
     */
    private String       type = URL;
    /**
     * 图片宽度
     */
    private int          width;
    // 图片高度
    private int          height;
    // 图片地址
    private String       url;
    // 图片信息
    private byte[]       data;

    private int          rowspan = 1;
    private int          colspan = 1;
    
    /**
     * 图片缩放模式枚举
     * for [issues/8892] AutoPoi ImageEntity建议添加scale属性,控制图片导出缩放模式
     */
    private ImageScaleMode scaleModeEnum = ImageScaleMode.STRETCH;


    public ImageEntity() {

    }

    public ImageEntity(byte[] data, int width, int height) {
        this.data = data;
        this.width = width;
        this.height = height;
        this.type = Data;
    }

    public ImageEntity(String url, int width, int height) {
        this.url = url;
        this.width = width;
        this.height = height;
    }

    public byte[] getData() {
        return data;
    }

    public int getHeight() {
        return height;
    }

    public String getType() {
        return type;
    }

    public String getUrl() {
        return url;
    }

    public int getWidth() {
        return width;
    }

    public void setData(byte[] data) {
        this.data = data;
    }

    public void setHeight(int height) {
        this.height = height;
    }

    public void setType(String type) {
        this.type = type;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public void setWidth(int width) {
        this.width = width;
    }

    public int getRowspan() {
        return rowspan;
    }

    public void setRowspan(int rowspan) {
        this.rowspan = rowspan;
    }

    public int getColspan() {
        return colspan;
    }

    public void setColspan(int colspan) {
        this.colspan = colspan;
    }

    /**
     * 获取图片缩放模式
     * @deprecated 使用 {@link #getScaleModeEnum()} 代替
     * @return 缩放模式代码值
     */
    @Deprecated
    public int getScaleMode() {
        return scaleModeEnum.getCode();
    }

    /**
     * 设置图片缩放模式
     * @deprecated 使用 {@link #setScaleModeEnum(ImageScaleMode)} 代替
     * @param scaleMode 缩放模式代码值
     */
    @Deprecated
    public void setScaleMode(int scaleMode) {
        this.scaleModeEnum = ImageScaleMode.valueOf(scaleMode);
    }
    
    /**
     * 获取图片缩放模式枚举
     * @return 缩放模式枚举
     */
    public ImageScaleMode getScaleModeEnum() {
        return scaleModeEnum;
    }
    
    /**
     * 设置图片缩放模式枚举
     * @param scaleModeEnum 缩放模式枚举
     */
    public void setScaleModeEnum(ImageScaleMode scaleModeEnum) {
        this.scaleModeEnum = scaleModeEnum;
    }
}


================================================
FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/ExcelExportUtil.java
================================================
/**
 * Copyright 2013-2015 JEECG (jeecgos@163.com)
 *   
 *  Licensed 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.jeecgframework.poi.excel;

import java.util.Collection;
import java.util.List;
import java.util.Map;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.TemplateExportParams;
import org.jeecgframework.poi.excel.entity.enmus.ExcelType;
import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity;
import org.jeecgframework.poi.excel.export.ExcelBatchExportServer;
import org.jeecgframework.poi.excel.export.ExcelExportServer;
import org.jeecgframework.poi.excel.export.template.ExcelExportOfTemplateUtil;
import org.jeecgframework.poi.handler.inter.IExcelExportServer;
import org.jeecgframework.poi.handler.inter.IExcelExportServerEnhanced;
import org.jeecgframework.poi.handler.inter.IWriter;

/**
 * excel 导出工具类
 * 
 * @author JEECG
 * @version 1.0
 * @date 2013-10-17
 */
//update-begin---author:chenrui ---date:20231221  for:[issue/#5248]加强继承扩展便利性(删除final)------------
public class ExcelExportUtil {
//update-end---author:chenrui ---date:20231221  for:[issue/#5248]加强继承扩展便利性(删除final)------------
	//update-begin---author:liusq  Date:20211217  for:[LOWCOD-2521]【autopoi】大数据导出方法【全局】----
	//单sheet最大值
	public static       int    USE_SXSSF_LIMIT = 100000;
	//update-end---author:liusq  Date:20211217  for:[LOWCOD-2521]【autopoi】大数据导出方法【全局】----
	private ExcelExportUtil() {
	}

	//---update-begin-----autor:scott------date:20191016-------for:导出字段支持自定义--------
	/**
	 * 根据Entity创建对应的Excel
	 * 
	 * @param entity
	 *            表格标题属性
	 * @param pojoClass
	 *            Excel对象Class
	 * @param dataSet
	 *            Excel对象数据List
	 * @param exportFields
	 * 	          自定义导出Excel字段数组
	 */
	public static Workbook exportExcel(ExportParams entity, Class<?> pojoClass, Collection<?> dataSet,String[] exportFields) {
		Workbook workbook;
		if (ExcelType.HSSF.equals(entity.getType())) {
			workbook = new HSSFWorkbook();
		} else if (dataSet.size() < 1000) {
			workbook = new XSSFWorkbook();
		} else {
			workbook = new SXSSFWorkbook();
		}
		new ExcelExportServer().createSheet(workbook, entity, pojoClass, dataSet,exportFields);
		return workbook;
	}
	//---update-end-----autor:scott------date:20191016-------for:导出字段支持自定义--------


	/**
	 * 根据Entity创建对应的Excel
	 *
	 * @param entity
	 *            表格标题属性
	 * @param pojoClass
	 *            Excel对象Class
	 * @param dataSet
	 *            Excel对象数据List
	 */
	public static Workbook exportExcel(ExportParams entity, Class<?> pojoClass, Collection<?> dataSet) {
		Workbook workbook;
		if (ExcelType.HSSF.equals(entity.getType())) {
			workbook = new HSSFWorkbook();
		} else if (dataSet.size() < 1000) {
			workbook = new XSSFWorkbook();
		} else {
			workbook = new SXSSFWorkbook();
		}
		new ExcelExportServer().createSheet(workbook, entity, pojoClass, dataSet,null);
		return workbook;
	}

	/**
	 * 根据Map创建对应的Excel
	 * 
	 * @param entity
	 *            表格标题属性
	 * @param pojoClass
	 *            Excel对象Class
	 * @param dataSet
	 *            Excel对象数据List
	 */
	public static Workbook exportExcel(ExportParams entity, List<ExcelExportEntity> entityList, Collection<? extends Map<?, ?>> dataSet) {
		Workbook workbook;
		if (ExcelType.HSSF.equals(entity.getType())) {
			workbook = new HSSFWorkbook();
		} else if (dataSet.size() < 1000) {
			workbook = new XSSFWorkbook();
		} else {
			workbook = new SXSSFWorkbook();
		}
		new ExcelExportServer().createSheetForMap(workbook, entity, entityList, dataSet);
		return workbook;
	}

	/**
	 * 一个excel 创建多个sheet
	 * 
	 * @param list
	 *            多个Map key title 对应表格Title key entity 对应表格对应实体 key data
	 *            Collection 数据
	 * @return
	 */
	public static Workbook exportExcel(List<Map<String, Object>> list, ExcelType type) {
		Workbook workbook;
		if (ExcelType.HSSF.equals(type)) {
			workbook = new HSSFWorkbook();
		} else {
			workbook = new XSSFWorkbook();
		}
		for (Map<String, Object> map : list) {
			ExcelExportServer server = new ExcelExportServer();
			server.createSheet(workbook, (ExportParams) map.get("title"), (Class<?>) map.get("entity"), (Collection<?>) map.get("data"),null);
		}
		return workbook;
	}

	/**
	 * 导出文件通过模板解析,不推荐这个了,推荐全部通过模板来执行处理
	 * 
	 * @param params
	 *            导出参数类
	 * @param pojoClass
	 *            对应实体
	 * @param dataSet
	 *            实体集合
	 * @param map
	 * 
	 *            模板集合
	 * @return
	 */
	public static Workbook exportExcel(TemplateExportParams params, Class<?> pojoClass, Collection<?> dataSet, Map<String, Object> map) {
		return new ExcelExportOfTemplateUtil().createExcleByTemplate(params, pojoClass, dataSet, map);
	}

	/**
	 * 导出文件通过模板解析只有模板,没有集合
	 * 
	 * @param params
	 *            导出参数类
	 * @param map
	 *            模板集合
	 * @return
	 */
	public static Workbook exportExcel(TemplateExportParams params, Map<String, Object> map) {
		return new ExcelExportOfTemplateUtil().createExcleByTemplate(params, null, null, map);
	}


	//update-begin---author:liusq  Date:20211227 for:[LOWCOD-2521]大数据导出方法【全局】----
	/**
	 * 大数据量导出
	 *
	 * @param entity    表格标题属性
	 * @param pojoClass Excel对象Class
	 * @date 2022年1月4号
	 * @return ExcelBatchExportServer 批处理服务
	 */
	public static IWriter<Workbook> exportBigExcel(ExportParams entity, Class<?> pojoClass) {
		ExcelBatchExportServer batchServer = new ExcelBatchExportServer();
		batchServer.init(entity, pojoClass);
		return batchServer;
	}

	/**
	 * 大数据量导出
	 *
	 * @param entity
	 * @param excelParams
	 * @date 2022年1月4号
	 * @return ExcelBatchExportServer 批处理服务
	 */
	public static IWriter<Workbook> exportBigExcel(ExportParams entity, List<ExcelExportEntity> excelParams) {
		ExcelBatchExportServer batchServer = new ExcelBatchExportServer();
		batchServer.init(entity, excelParams);
		return batchServer;
	}

	/**
	 * 大数据量导出
	 *
	 * @param entity      导出参数属性
	 * @param pojoClass   Excel对象Class
	 * @param server      查询数据的接口
	 * @param queryParams 查询数据的参数
	 * @date 2022年1月4号
	 * @return Workbook
	 */
	public static Workbook exportBigExcel(ExportParams entity, Class<?> pojoClass,
										  IExcelExportServer server, Object queryParams) {
		ExcelBatchExportServer batchServer = new ExcelBatchExportServer();
		batchServer.init(entity, pojoClass);
		return batchServer.exportBigExcel(server, queryParams);
	}

	/**
	 * 大数据量导出
	 * @param entity
	 * @param excelParams
	 * @param server      查询数据的接口
	 * @param queryParams 查询数据的参数
	 * @date 2022年1月4号
	 * @return Workbook
	 */
	public static Workbook exportBigExcel(ExportParams entity, List<ExcelExportEntity> excelParams,
										  IExcelExportServer server, Object queryParams) {
		ExcelBatchExportServer batchServer = new ExcelBatchExportServer();
		batchServer.init(entity, excelParams);
		return batchServer.exportBigExcel(server, queryParams);
	}
	//update-end---author:liusq  Date:20211227 for:[LOWCOD-2521]大数据导出方法【全局】----

	//update-begin---author:chenrui  Date:20251103 for:[issues/8892]解决40万+数据导出查询效率问题----
	/**
	 * 大数据量导出 - 高性能游标分页方案
     * for [QQYUN-13964]演示系统数据量大,点击没反应
	 * <p>
	 * 适用场景:
	 * 1. 数据量超过40万+的导出场景
	 * 2. 需要避免深分页性能问题
	 * 3. 数据表有自增ID或其他有序字段
	 * 
	 * 性能对比:
	 * - 传统方式: 40万数据,最后一页查询可能需要10+秒
	 * - 游标方式: 40万数据,每页查询时间恒定在0.1秒左右
	 * 
	 * 使用示例:
	 * <pre>
	 * ExportParams params = new ExportParams("订单列表", "订单");
	 * IExcelExportServerEnhanced server = new IExcelExportServerEnhanced() {
	 *     public List<Object> selectListForExcelExport(Object queryParams, Object lastRecord, int pageSize) {
	 *         Long lastId = lastRecord != null ? ((Order)lastRecord).getId() : 0L;
	 *         return orderMapper.selectList(new QueryWrapper<Order>()
	 *             .gt("id", lastId)
	 *             .orderByAsc("id")
	 *             .last("LIMIT " + pageSize));
	 *     }
	 * };
	 * Workbook workbook = ExcelExportUtil.exportBigExcelEnhanced(params, Order.class, server, queryParams);
	 * </pre>
	 * 
	 * @param entity      导出参数属性
	 * @param pojoClass   Excel对象Class
	 * @param server      增强的查询数据接口(支持游标分页)
	 * @param queryParams 查询数据的参数
	 * @date 2025年11月3号
	 * @return Workbook
	 */
	public static <T> Workbook exportBigExcelEnhanced(ExportParams entity, Class<T> pojoClass,
												  IExcelExportServerEnhanced<T> server, Object queryParams) {
		ExcelBatchExportServer batchServer = new ExcelBatchExportServer();
		batchServer.init(entity, pojoClass);
		return batchServer.exportBigExcelEnhanced(server, queryParams);
	}

	/**
	 * 大数据量导出 - 高性能游标分页方案(自定义列)
	 * 
	 * @param entity       导出参数属性
	 * @param excelParams  自定义导出列
	 * @param server       增强的查询数据接口(支持游标分页)
	 * @param queryParams  查询数据的参数
	 * @date 2025年11月3号
	 * @return Workbook
	 */
	public static <T> Workbook exportBigExcelEnhanced(ExportParams entity, List<ExcelExportEntity> excelParams,
												  IExcelExportServerEnhanced<T> server, Object queryParams) {
		ExcelBatchExportServer batchServer = new ExcelBatchExportServer();
		batchServer.init(entity, excelParams);
		return batchServer.exportBigExcelEnhanced(server, queryParams);
	}
	//update-end---author:chenrui  Date:20251103 for:[issues/8892]解决40万+数据导出查询效率问题----
}


================================================
FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/ExcelImportCheckUtil.java
================================================
package org.jeecgframework.poi.excel;

import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.jeecgframework.core.util.ApplicationContextUtil;
import org.jeecgframework.dict.service.AutoPoiDictServiceI;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecgframework.poi.excel.annotation.ExcelCollection;
import org.jeecgframework.poi.excel.annotation.ExcelTarget;
import org.jeecgframework.poi.excel.annotation.ExcelVerify;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.entity.params.ExcelCollectionParams;
import org.jeecgframework.poi.excel.entity.params.ExcelImportEntity;
import org.jeecgframework.poi.excel.entity.params.ExcelVerifyEntity;
import org.jeecgframework.poi.excel.imports.ExcelImportServer;
import org.jeecgframework.poi.exception.excel.ExcelImportException;
import org.jeecgframework.poi.exception.excel.enums.ExcelImportEnum;
import org.jeecgframework.poi.util.ExcelUtil;
import org.jeecgframework.poi.util.PoiPublicUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.io.InputStream;
import java.io.PushbackInputStream;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.math.BigDecimal;
import java.util.*;

/**
 * EXCEL INCLUE CHECK
 * 验证excel标题是否存在,当前默认有0.8(80%)即可通过验证
 */
public class ExcelImportCheckUtil {
    private final static Logger LOGGER = LoggerFactory.getLogger(ExcelImportCheckUtil.class);

    /**当有标题到达多少可以通过验证*/
    public static final Double defScreenRate = 0.8;

    /**
     * check inclue filed match rate
     * @param inputstream
     * @param pojoClass
     * @param params
     * @return
     */
    public static Boolean check(InputStream inputstream, Class<?> pojoClass, ImportParams params) {
        return check(inputstream,pojoClass,params,defScreenRate);
    }
    /**
     * check inclue filed match rate
     * @param inputstream
     * @param pojoClass
     * @param params
     * @param screenRate field match rate (defalut:0.8)
     * @return
     */
    public static Boolean check(InputStream inputstream, Class<?> pojoClass, ImportParams params, Double screenRate) {
        Workbook book = null;
        int errorNum = 0;
        int successNum = 0;
        if (!(inputstream.markSupported())) {
            inputstream = new PushbackInputStream(inputstream, 8);
        }
        try {
//            if (POIFSFileSystem.hasPOIFSHeader(inputstream)) {
//                book = new HSSFWorkbook(inputstream);
//            } else if (POIXMLDocument.hasOOXMLHeader(inputstream)) {
//                book = new XSSFWorkbook(OPCPackage.open(inputstream));
//            }
            book = WorkbookFactory.create(inputstream);
            LOGGER.info("  >>>  poi3升级到4兼容改造工作, pojoClass="+pojoClass);
        } catch (Exception e) {
            e.printStackTrace();
        }
        for (int i = 0; i < params.getSheetNum(); i++) {
            Row row = null;
            //跳过表头和标题行
            Iterator<Row> rows;
            try{
                rows=  book.getSheetAt(i).rowIterator();
            }catch (Exception e){
                //为空说明读取不到,故不是excel
                  throw new RuntimeException("请导入正确格式的excel文件!");
            }


            for (int j = 0; j < params.getTitleRows() + params.getHeadRows(); j++) {
                try{
                    row = rows.next();
                }catch (NoSuchElementException e){
                    //为空说明标题不出在,excel格式错误
                    throw new RuntimeException("请填写内容标题!");
                }
            }
            Sheet sheet = book.getSheetAt(i);
            Map<Integer, String> titlemap = null;
            try {
                titlemap = getTitleMap(sheet, params);
            } catch (Exception e) {
                e.printStackTrace();
            }
            Set<Integer> columnIndexSet = titlemap.keySet();
            Integer maxColumnIndex = Collections.max(columnIndexSet);
            Integer minColumnIndex = Collections.min(columnIndexSet);
            while (rows.hasNext() && (row == null || sheet.getLastRowNum() - row.getRowNum() > params.getLastOfInvalidRow())) {
                row = rows.next();
                Map<String, ExcelImportEntity> excelParams = new HashMap<String, ExcelImportEntity>();
                List<ExcelCollectionParams> excelCollection = new ArrayList<ExcelCollectionParams>();
                String targetId = null;
                if (!Map.class.equals(pojoClass)) {
                    Field fileds[] = PoiPublicUtil.getClassFields(pojoClass);
                    ExcelTarget etarget = pojoClass.getAnnotation(ExcelTarget.class);
                    if (etarget != null) {
                        targetId = etarget.value();
                    }
                    try {
                        getAllExcelField(targetId, fileds, excelParams, excelCollection, pojoClass, null);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
                try {
                    int firstCellNum = row.getFirstCellNum();
                    if (firstCellNum > minColumnIndex) {
                        firstCellNum = minColumnIndex;
                    }
                    int lastCellNum = row.getLastCellNum();
                    if (lastCellNum < maxColumnIndex + 1) {
                        lastCellNum = maxColumnIndex + 1;
                    }
                    for (int j = firstCellNum, le = lastCellNum; j < le; j++) {
                        String titleString = (String) titlemap.get(j);
                        if (excelParams.containsKey(titleString) || Map.class.equals(pojoClass)) {
                            successNum+=1;
                        }else{
                            if(excelCollection.size()>0){
                                Iterator var33 = excelCollection.iterator();
                                ExcelCollectionParams param = (ExcelCollectionParams)var33.next();
                                if (param.getExcelParams().containsKey(titleString)) {
                                    successNum+=1;
                                }else{
                                    errorNum+=1;
                                }
                            }else{
                                errorNum+=1;
                            }
                        }
                    }
                    if(successNum<errorNum){
                        return false;
                    }else if(successNum>errorNum){
                        if(errorNum>0){
                            double newNumber = (double) successNum / (successNum + errorNum);
                            BigDecimal bg = new BigDecimal(newNumber);
                            double f1 = bg.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();
                            if(f1<screenRate){
                                return false;
                            }else{
                                return true;
                            }
                        }else{
                            return true;
                        }
                    }else if(successNum==errorNum){
                        return false;
                    }else{
                        return false;
                    }
                } catch (ExcelImportException e) {
                    if (!e.getType().equals(ExcelImportEnum.VERIFY_ERROR)) {
                        throw new ExcelImportException(e.getType(), e);
                    }
                }

            }
        }
     return null;
    }

    /**
     * 获取文件名称标题
     * @Author JEECG
     * @date 20201023
     * @throws Exception
     */
    private static Map<Integer, String> getTitleMap(Sheet sheet, ImportParams params) throws Exception {
        Map<Integer, String> titlemap = new HashMap<Integer, String>();
        Iterator<Cell> cellTitle = null;
        String collectionName = null;
        Row headRow = null;
        int headBegin = params.getTitleRows();
        int allRowNum = sheet.getPhysicalNumberOfRows();
        while(headRow == null && headBegin < allRowNum){
            headRow = sheet.getRow(headBegin++);
        }
        if(headRow==null){
            throw new Exception("不识别该文件");
        }
        if (ExcelUtil.isMergedRegion(sheet, headRow.getRowNum(), 0)) {
            params.setHeadRows(2);
        }else{
            params.setHeadRows(1);
        }
        cellTitle = headRow.cellIterator();
        while (cellTitle.hasNext()) {
            Cell cell = cellTitle.next();
            String value = getKeyValue(cell);
            if (StringUtils.isNotEmpty(value)) {
                titlemap.put(cell.getColumnIndex(), value);//加入表头列表
            }
        }

        //多行表头
        for (int j = headBegin; j < headBegin + params.getHeadRows()-1; j++) {
            headRow = sheet.getRow(j);
            cellTitle = headRow.cellIterator();
            while (cellTitle.hasNext()) {
                Cell cell = cellTitle.next();
                String value = getKeyValue(cell);
                if (StringUtils.isNotEmpty(value)) {
                    int columnIndex = cell.getColumnIndex();
                    //当前cell的上一行是否为合并单元格
                    if(ExcelUtil.isMergedRegion(sheet, cell.getRowIndex()-1, columnIndex)){
                        collectionName = ExcelUtil.getMergedRegionValue(sheet, cell.getRowIndex()-1, columnIndex);
                        if(params.isIgnoreHeader(collectionName)){
                            titlemap.put(cell.getColumnIndex(), value);
                        }else{
                            titlemap.put(cell.getColumnIndex(), collectionName + "_" + value);
                        }
                    }else{
                        titlemap.put(cell.getColumnIndex(), value);
                    }
                }
            }
        }
        return titlemap;
    }
    /**
     * 获取key的值,针对不同类型获取不同的值
     *
     * @Author JEECG
     * @date 20201023
     * @param cell
     * @return
     */
    private static String getKeyValue(Cell cell) {
        if(cell==null){
            return null;
        }
        Object obj = null;
        switch (cell.getCellType()) {
            case STRING:
                obj = cell.getStringCellValue();
                break;
            case BOOLEAN:
                obj = cell.getBooleanCellValue();
                break;
            case NUMERIC:
                obj = cell.getNumericCellValue();
                break;
            case FORMULA:
                obj = cell.getCellFormula();
                break;
        }
        return obj == null ? null : obj.toString().trim();
    }

    /**
     * 获取需要导出的全部字段
     *
     *
     *
     * @param targetId
     *            目标ID
     * @param fields
     * @param excelCollection
     * @throws Exception
     */
    public static void getAllExcelField(String targetId, Field[] fields, Map<String, ExcelImportEntity> excelParams, List<ExcelCollectionParams> excelCollection, Class<?> pojoClass, List<Method> getMethods) throws Exception {
        ExcelImportEntity excelEntity = null;
        for (int i = 0; i < fields.length; i++) {
            Field field = fields[i];
            if (PoiPublicUtil.isNotUserExcelUserThis(null, field, targetId)) {
                continue;
            }
            if (PoiPublicUtil.isCollection(field.getType())) {
                // 集合对象设置属性
                ExcelCollectionParams collection = new ExcelCollectionParams();
                collection.setName(field.getName());
                Map<String, ExcelImportEntity> temp = new HashMap();
                ParameterizedType pt = (ParameterizedType)field.getGenericType();
                Class<?> clz = (Class)pt.getActualTypeArguments()[0];
                collection.setType(clz);
                getExcelFieldList(targetId, PoiPublicUtil.getClassFields(clz), clz, temp, (List)null);
                collection.setExcelParams(temp);
                collection.setExcelName(((ExcelCollection)field.getAnnotation(ExcelCollection.class)).name());
                additionalCollectionName(collection);
                excelCollection.add(collection);
            } else if (PoiPublicUtil.isJavaClass(field)) {
                addEntityToMap(targetId, field, (ExcelImportEntity)excelEntity, pojoClass, getMethods, excelParams);
            } else {
                List<Method> newMethods = new ArrayList<Method>();
                if (getMethods != null) {
                    newMethods.addAll(getMethods);
                }
                newMethods.add(PoiPublicUtil.getMethod(field.getName(), pojoClass));
                getAllExcelField(targetId, PoiPublicUtil.getClassFields(field.getType()), excelParams, excelCollection, field.getType(), newMethods);
            }
        }
    }
    public static void getExcelFieldList(String targetId, Field[] fields, Class<?> pojoClass, Map<String, ExcelImportEntity> temp, List<Method> getMethods) throws Exception {
        ExcelImportEntity excelEntity = null;
        for (int i = 0; i < fields.length; i++) {
            Field field = fields[i];
            if (!PoiPublicUtil.isNotUserExcelUserThis((List)null, field, targetId)) {
                if (PoiPublicUtil.isJavaClass(field)) {
                    addEntityToMap(targetId, field, (ExcelImportEntity)excelEntity, pojoClass, getMethods, temp);
                } else {
                    List<Method> newMethods = new ArrayList();
                    if (getMethods != null) {
                        newMethods.addAll(getMethods);
                    }

                    newMethods.add(PoiPublicUtil.getMethod(field.getName(), pojoClass, field.getType()));
                    getExcelFieldList(targetId, PoiPublicUtil.getClassFields(field.getType()), field.getType(), temp, newMethods);
                }
            }
        }
    }
    /**
     * 追加集合名称到前面
     *
     * @param collection
     */
    private static void additionalCollectionName(ExcelCollectionParams collection) {
        Set<String> keys = new HashSet();
        keys.addAll(collection.getExcelParams().keySet());
        Iterator var3 = keys.iterator();

        while(var3.hasNext()) {
            String key = (String)var3.next();
            collection.getExcelParams().put(collection.getExcelName() + "_" + key, collection.getExcelParams().get(key));
            collection.getExcelParams().remove(key);
        }
    }
    /**
     * 把这个注解解析放到类型对象中
     *
     * @param targetId
     * @param field
     * @param excelEntity
     * @param pojoClass
     * @param getMethods
     * @param temp
     * @throws Exception
     */
    public static void addEntityToMap(String targetId, Field field, ExcelImportEntity excelEntity, Class<?> pojoClass, List<Method> getMethods, Map<String, ExcelImportEntity> temp) throws Exception {
        Excel excel = field.getAnnotation(Excel.class);
        excelEntity = new ExcelImportEntity();
        excelEntity.setType(excel.type());
        excelEntity.setSaveUrl(excel.savePath());
        excelEntity.setSaveType(excel.imageType());
        excelEntity.setReplace(excel.replace());
        excelEntity.setDatabaseFormat(excel.databaseFormat());
        excelEntity.setVerify(getImportVerify(field));
        excelEntity.setSuffix(excel.suffix());
        excelEntity.setNumFormat(excel.numFormat());
        excelEntity.setGroupName(excel.groupName());
        //update-begin-author:taoYan date:20180202 for:TASK #2067 【bug excel 问题】excel导入字典文本翻译问题
        excelEntity.setMultiReplace(excel.multiReplace());
        if(StringUtils.isNotEmpty(excel.dicCode())){
            AutoPoiDictServiceI jeecgDictService = null;
            try {
                jeecgDictService = ApplicationContextUtil.getContext().getBean(AutoPoiDictServiceI.class);
            } catch (Exception e) {
            }
            if(jeecgDictService!=null){
                String[] dictReplace = jeecgDictService.queryDict(excel.dictTable(), excel.dicCode(), excel.dicText());
                if(excelEntity.getReplace()!=null && dictReplace!=null && dictReplace.length!=0){
                    excelEntity.setReplace(dictReplace);
                }
            }
        }
        //update-end-author:taoYan date:20180202 for:TASK #2067 【bug excel 问题】excel导入字典文本翻译问题
        getExcelField(targetId, field, excelEntity, excel, pojoClass);
        if (getMethods != null) {
            List<Method> newMethods = new ArrayList<Method>();
            newMethods.addAll(getMethods);
            newMethods.add(excelEntity.getMethod());
            excelEntity.setMethods(newMethods);
        }
        temp.put(excelEntity.getName(), excelEntity);

    }
    public static void getExcelField(String targetId, Field field, ExcelImportEntity excelEntity, Excel excel, Class<?> pojoClass) throws Exception {
        excelEntity.setName(getExcelName(excel.name(), targetId));
        String fieldname = field.getName();
        //update-begin-author:taoyan for:TASK #2798 【例子】导入扩展方法,支持自定义导入字段转换规则
        excelEntity.setMethod(PoiPublicUtil.getMethod(fieldname, pojoClass, field.getType(),excel.importConvert()));
        //update-end-author:taoyan for:TASK #2798 【例子】导入扩展方法,支持自定义导入字段转换规则
        if (StringUtils.isNotEmpty(excel.importFormat())) {
            excelEntity.setFormat(excel.importFormat());
        } else {
            excelEntity.setFormat(excel.format());
        }
    }
    /**
     * 判断在这个单元格显示的名称
     *
     * @param exportName
     * @param targetId
     * @return
     */
    public static String getExcelName(String exportName, String targetId) {
        if (exportName.indexOf("_") < 0) {
            return exportName;
        }
        String[] arr = exportName.split(",");
        for (String str : arr) {
            if (str.indexOf(targetId) != -1) {
                return str.split("_")[0];
            }
        }
        return null;
    }
    /**
     * 获取导入校验参数
     *
     * @param field
     * @return
     */
    public static ExcelVerifyEntity getImportVerify(Field field) {
        ExcelVerify verify = field.getAnnotation(ExcelVerify.class);
        if (verify != null) {
            ExcelVerifyEntity entity = new ExcelVerifyEntity();
            entity.setEmail(verify.isEmail());
            entity.setInterHandler(verify.interHandler());
            entity.setMaxLength(verify.maxLength());
            entity.setMinLength(verify.minLength());
            entity.setMobile(verify.isMobile());
            entity.setNotNull(verify.notNull());
            entity.setRegex(verify.regex());
            entity.setRegexTip(verify.regexTip());
            entity.setTel(verify.isTel());
            return entity;
        }
        return null;
    }
}


================================================
FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/ExcelImportUtil.java
================================================
/**
 * Copyright 2013-2015 JEECG (jeecgos@163.com)
 *   
 *  Licensed 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.jeecgframework.poi.excel;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.entity.result.ExcelImportResult;
import org.jeecgframework.poi.excel.imports.ExcelImportServer;
import org.jeecgframework.poi.excel.imports.sax.SaxReadExcel;
import org.jeecgframework.poi.excel.imports.sax.parse.ISaxRowRead;
import org.jeecgframework.poi.handler.inter.IExcelReadRowHanlder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * Excel 导入工具
 * 
 * @author JEECG
 * @date 2013-9-24
 * @version 1.0
 */
@SuppressWarnings({ "unchecked" })
public final class ExcelImportUtil {

	private ExcelImportUtil() {
	}

	private static final Logger LOGGER = LoggerFactory.getLogger(ExcelImportUtil.class);

	/**
	 * Excel 导入 数据源本地文件,不返回校验结果 导入 字 段类型 Integer,Long,Double,Date,String,Boolean
	 * 
	 * @param file
	 * @param pojoClass
	 * @param params
	 * @return
	 * @throws Exception
	 */
	public static <T> List<T> importExcel(File file, Class<?> pojoClass, ImportParams params) {
		FileInputStream in = null;
		List<T> result = null;
		try {
			in = new FileInputStream(file);
			result = new ExcelImportServer().importExcelByIs(in, pojoClass, params).getList();
		} catch (Exception e) {
			LOGGER.error(e.getMessage(), e);
		} finally {
			try {
				in.close();
			} catch (IOException e) {
				LOGGER.error(e.getMessage(), e);
			}
		}
		return result;
	}

	/**
	 * Excel 导入 数据源IO流,不返回校验结果 导入 字段类型 Integer,Long,Double,Date,String,Boolean
	 * 
	 * @param file
	 * @param pojoClass
	 * @param params
	 * @return
	 * @throws Exception
	 */
	public static <T> List<T> importExcel(InputStream inputstream, Class<?> pojoClass, ImportParams params) throws Exception {
		return new ExcelImportServer().importExcelByIs(inputstream, pojoClass, params).getList();
	}

	/**
	 * Excel 导入 数据源IO流,返回校验结果 字段类型 Integer,Long,Double,Date,String,Boolean
	 * 
	 * @param file
	 * @param pojoClass
	 * @param params
	 * @return
	 * @throws Exception
	 */
	public static <T> ExcelImportResult<T> importExcelVerify(InputStream inputstream, Class<?> pojoClass, ImportParams params) throws Exception {
		return new ExcelImportServer().importExcelByIs(inputstream, pojoClass, params);
	}

	/**
	 * Excel 导入 数据源本地文件,返回校验结果 字段类型 Integer,Long,Double,Date,String,Boolean
	 * 
	 * @param file
	 * @param pojoClass
	 * @param params
	 * @return
	 * @throws Exception
	 */
	public static <T> ExcelImportResult<T> importExcelVerify(File file, Class<?> pojoClass, ImportParams params) {
		FileInputStream in = null;
		try {
			in = new FileInputStream(file);
			return new ExcelImportServer().importExcelByIs(in, pojoClass, params);
		} catch (Exception e) {
			LOGGER.error(e.getMessage(), e);
		} finally {
			try {
				in.close();
			} catch (IOException e) {
				LOGGER.error(e.getMessage(), e);
			}
		}
		return null;
	}

	/**
	 * Excel 通过SAX解析方法,适合大数据导入,不支持图片 导入 数据源IO流,不返回校验结果 导入 字段类型
	 * Integer,Long,Double,Date,String,Boolean
	 * 
	 * @param inputstream
	 * @param pojoClass
	 * @param params
	 * @return
	 * @throws Exception
	 */
	public static <T> List<T> importExcelBySax(InputStream inputstream, Class<?> pojoClass, ImportParams params) {
		return new SaxReadExcel().readExcel(inputstream, pojoClass, params, null, null);
	}

	/**
	 * Excel 通过SAX解析方法,适合大数据导入,不支持图片 导入 数据源本地文件,不返回校验结果 导入 字 段类型
	 * Integer,Long,Double,Date,String,Boolean
	 * 
	 * @param file
	 * @param rowRead
	 * @return
	 * @throws Exception
	 */
	@SuppressWarnings("rawtypes")
	public static void importExcelBySax(InputStream inputstream, Class<?> pojoClass, ImportParams params, IExcelReadRowHanlder hanlder) {
		new SaxReadExcel().readExcel(inputstream, pojoClass, params, null, hanlder);
	}

	/**
	 * Excel 通过SAX解析方法,适合大数据导入,不支持图片 导入 数据源IO流,不返回校验结果 导入 字段类型
	 * Integer,Long,Double,Date,String,Boolean
	 * 
	 * @param file
	 * @param rowRead
	 * @return
	 * @throws Exception
	 */
	public static <T> List<T> importExcelBySax(InputStream inputstream, ISaxRowRead rowRead) {
		return new SaxReadExcel().readExcel(inputstream, null, null, rowRead, null);
	}

}


================================================
FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/ExcelToHtmlUtil.java
================================================
package org.jeecgframework.poi.excel;

import org.apache.poi.ss.usermodel.Workbook;
import org.jeecgframework.poi.excel.html.ExcelToHtmlServer;

/**
 * Excel 变成界面
 * 
 * @author JEECG
 * @date 2015年5月10日 上午11:51:48
 */
public final class ExcelToHtmlUtil {

	private ExcelToHtmlUtil() {
	}

	/**
	 * 转换成为Table
	 * 
	 * @param wb
	 *            Excel
	 * @return
	 */
	public static String toTableHtml(Workbook wb) {
		return new ExcelToHtmlServer(wb, false, 0).printPage();
	}

	/**
	 * 转换成为Table
	 * 
	 * @param wb
	 *            Excel
	 * @param sheetNum
	 *            sheetNum
	 * @return
	 */
	public static String toTableHtml(Workbook wb, int sheetNum) {
		return new ExcelToHtmlServer(wb, false, sheetNum).printPage();
	}

	/**
	 * 转换成为完整界面
	 * 
	 * @param wb
	 *            Excel
	 * @param sheetNum
	 *            sheetNum
	 * @return
	 */
	public static String toAllHtml(Workbook wb) {
		return new ExcelToHtmlServer(wb, true, 0).printPage();
	}

	/**
	 * 转换成为完整界面
	 * 
	 * @param wb
	 *            Excel
	 * @param sheetNum
	 *            sheetNum
	 * @return
	 */
	public static String toAllHtml(Workbook wb, int sheetNum) {
		return new ExcelToHtmlServer(wb, true, sheetNum).printPage();
	}

}


================================================
FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/annotation/Excel.java
================================================
/**
 * Copyright 2013-2015 JEECG (jeecgos@163.com)
 *   
 *  Licensed 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.jeecgframework.poi.excel.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.annotation.Inherited;

/**
 * Excel 导出基本注释
 * 
 * @author JEECG
 * @date 2014年6月20日 下午10:25:12
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
//update-begin---author:chenrui ---date:20231221  for:[issue/#5248]加强继承扩展便利性------------
@Inherited
//update-end---author:chenrui ---date:20231221  for:[issue/#5248]加强继承扩展便利性------------
public @interface Excel {

	/**
	 * 导出时间设置,如果字段是Date类型则不需要设置 数据库如果是string 类型,这个需要设置这个数据库格式
	 */
	public String databaseFormat() default "yyyyMMddHHmmss";

	/**
	 * 导出的时间格式,以这个是否为空来判断是否需要格式化日期
	 */
	public String exportFormat() default "";

	/**
	 * 时间格式,相当于同时设置了exportFormat 和 importFormat
	 */
	public String format() default "";

	/**
	 * 导出时在excel中每个列的高度 单位为字符,一个汉字=2个字符
	 */
	public double height() default 10;

	/**
	 * 导出类型 1 从file读取_old ,2 是从数据库中读取字节文件, 3文件地址_new, 4网络地址 同样导入也是一样的
	 *
	 */
	public int imageType() default 3;

	/**
	 * 导入的时间格式,以这个是否为空来判断是否需要格式化日期
	 */
	public String importFormat() default "";

	/**
	 * 文字后缀,如% 90 变成90%
	 */
	public String suffix() default "";

	/**
	 * 是否换行 即支持\n
	 */
	public boolean isWrap() default true;

	/**
	 * 合并单元格依赖关系,比如第二列合并是基于第一列 则{1}就可以了
	 */
	public int[] mergeRely() default {};

	/**
	 * 纵向合并内容相同的单元格
	 */
	public boolean mergeVertical() default false;

	/**
	 * 导出时,对应数据库的字段 主要是用户区分每个字段, 不能有annocation重名的 导出时的列名
	 * 导出排序跟定义了annotation的字段的顺序有关 可以使用a_id,b_id来确实是否使用
	 */
	public String name();

	/**
	 * 是否需要纵向合并单元格(用于含有list中,单个的单元格,合并list创建的多个row)
	 */
	public boolean needMerge() default false;

	/**
	 * 展示到第几个可以使用a_id,b_id来确定不同排序
	 */
	public String orderNum() default "0";

	/**
	 * 值得替换 导出是{"男_1","女_0"} 导入反过来,所以只用写一个
	 */
	public String[] replace() default {};
	
	/**
	 * 导入路径,如果是图片可以填写,默认是upload/className/ IconEntity这个类对应的就是upload/Icon/
	 *
	 */
	public String savePath() default "upload";

	/**
	 * 导出类型 0是常规, 1 是文本 2 是图片,3是函数,4是数字 默认是文本
	 */
	public int type() default 1;

	/**
	 * 导出时在excel中每个列的宽 单位为字符,一个汉字=2个字符 如 以列名列内容中较合适的长度 例如姓名列6 【姓名一般三个字】
	 * 性别列4【男女占1,但是列标题两个汉字】 限制1-255
	 */
	public double width() default 10;

	/**
	 * 是否自动统计数据,如果是统计,true的话在最后追加一行统计,把所有数据都和 这个处理会吞没异常,请注意这一点
	 * 
	 * @return
	 */
	public boolean isStatistics() default false;
	
	/**
	 * 方法描述: 数据字典表
	 * 作    者: yiming.zhang
	 * 日    期: 2014年5月11日-下午5:26:40
	 * @return 
	 * 返回类型: String
	 */
	public String dictTable() default "";

	/**
	 * 方法描述:  数据code
	 * 作    者: yiming.zhang
	 * 日    期: 2014年5月13日-下午9:37:16
	 * @return 
	 * 返回类型: String
	 */
	public String dicCode() default "";
	
	/**
	 * 方法描述:  数据Text
	 * 作    者: yiming.zhang
	 * 日    期: 2014年5月11日-下午5:29:05
	 * @return 
	 * 返回类型: String
	 */
	public String dicText() default "";
	
	/**
	 * 导入数据是否需要转化  
	 * 若是为true,则需要在pojo中加入 方法:convertset字段名(String text)  
	 * @return
	 */
	public boolean importConvert() default false;
	/**
	 * 导出数据是否需要转化
	 * 若是为true,则需要在pojo中加入方法:convertget字段名()
	 * @return
	 */
	public boolean exportConvert() default false;
	
	/**
	 * 值的替换是否支持替换多个(默认true,若数据库值本来就包含逗号则需要配置该值为false)
	 * @author taoYan
	 * @since 2018年8月1日
	 */
	public boolean multiReplace() default true;

	/**
	 * 父表头
	 * @return
	 */
	String groupName() default "";

	/**
	 * 数字格式化,参数是Pattern,使用的对象是DecimalFormat
	 * @return
	 */
	String numFormat() default "";
	/**
	 *  是否需要隐藏该列
	 * @return
	 */
	public boolean isColumnHidden() default  false;
	/**
	 * 固定的某一列,解决不好解析的问题
	 * @return
	 */
	public int fixedIndex() default -1;
	/**
	 * 这个是不是超链接,如果是需要实现接口返回对象
	 * @return
	 */
	public boolean isHyperlink() default false;
	
	//update-begin-author:liusq date:20251211 for:JHHB-1212【AutoPoi】导出时,支持动态生成Excel的列
	/**
	 * 是否为动态列
	 */
	public boolean dynamic() default false;

	/**
	 * 动态列标题字段名,默认 name
	 */
	public String dynamicField() default "name";

	/**
	 * 动态列表格值字段名,默认 value
	 */
	public String dynamicVal() default "value";

	/**
	 * 是否保留原始字段列,默认不保留
	 */
	public boolean dynamicKeepSelf() default false;
	//update-end-author:liusq date:20251211 for:JHHB-1212【AutoPoi】导出时,支持动态生成Excel的列
}


================================================
FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/annotation/ExcelCollection.java
================================================
/**
 * Copyright 2013-2015 JEECG (jeecgos@163.com)
 *   
 *  Licensed 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.jeecgframework.poi.excel.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.ArrayList;

/**
 * 导出的集合
 * 
 * @author JEECG 2013年8月24日
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface ExcelCollection {

	/**
	 * 定义excel导出ID 来限定导出字段,处理一个类对应多个不同名称的情况
	 */
	public String id() default "";

	/**
	 * 导出时,对应数据库的字段 主要是用户区分每个字段, 不能有annocation重名的 导出时的列名
	 * 导出排序跟定义了annotation的字段的顺序有关 可以使用a_id,b_id来确实是否使用
	 */
	public String name();

	/**
	 * 展示到第几个同样可以使用a_id,b_id
	 * 
	 */
	public String orderNum() default "0";

	/**
	 * 创建时创建的类型 默认值是 arrayList
	 */
	public Class<?> type() default ArrayList.class;
}


================================================
FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/annotation/ExcelEntity.java
================================================
/**
 * Copyright 2013-2015 JEECG (jeecgos@163.com)
 *   
 *  Licensed 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.jeecgframework.poi.excel.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 标记是不是导出excel 标记为实体类
 * 
 * @author JEECG
 * 
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface ExcelEntity {

	/**
	 * 定义excel导出ID 来限定导出字段,处理一个类对应多个不同名称的情况
	 */
	public String id() default "";

	/**
	 * 导出时,对应数据库的字段 主要是用户区分每个字段, 不能有annocation重名的 导出时的列名
	 * 导出排序跟定义了annotation的字段的顺序有关 可以使用a_id,b_id来确实是否使用
	 */
	public String name() default "";

	/**
	 * 导出时,是否展示name对应的文本
	 * @return
	 */
	boolean show() default false;
}


================================================
FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/annotation/ExcelIgnore.java
================================================
/**
 * Copyright 2013-2015 JEECG (jeecgos@163.com)
 *   
 *  Licensed 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.jeecgframework.poi.excel.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 标记为excel 创建实体忽略,放置死循环的造成
 * 
 * @author JEECG
 * @date 2013-9-24
 * @version 1.0
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface ExcelIgnore {

}


================================================
FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/annotation/ExcelTarget.java
================================================
/**
 * Copyright 2013-2015 JEECG (jeecgos@163.com)
 *   
 *  Licensed 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.jeecgframework.poi.excel.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * excel 导出是用于标记id的
 * 
 * @author JEECG
 * 
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE })
public @interface ExcelTarget {
	/**
	 * 定义excel导出ID 来限定导出字段
	 */
	public String value();
}


================================================
FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/annotation/ExcelVerify.java
================================================
/**
 * Copyright 2013-2015 JEECG (jeecgos@163.com)
 *   
 *  Licensed 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.jeecgframework.poi.excel.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Excel 导入校验
 * 
 * @author JEECG
 * @date 2014年6月23日 下午10:46:26
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface ExcelVerify {
	/**
	 * 接口校验
	 * 
	 * @return
	 */
	public boolean interHandler() default false;

	/**
	 * 是电子邮件
	 * 
	 * @return
	 */
	public boolean isEmail() default false;

	/**
	 * 是13位移动电话
	 * 
	 * @return
	 */
	public boolean isMobile() default false;

	/**
	 * 是座机号码
	 * 
	 * @return
	 */
	public boolean isTel() default false;

	/**
	 * 最大长度
	 * 
	 * @return
	 */
	public int maxLength() default -1;

	/**
	 * 最小长度
	 * 
	 * @return
	 */
	public int minLength() default -1;

	/**
	 * 不允许空
	 * 
	 * @return
	 */
	public boolean notNull() default false;

	/**
	 * 正在表达式
	 * 
	 * @return
	 */
	public String regex() default "";

	/**
	 * 正在表达式,错误提示信息
	 * 
	 * @return
	 */
	public String regexTip() default "数据不符合规范";

}


================================================
FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/entity/ExcelBaseParams.java
================================================
/**
 * Copyright 2013-2015 JEECG (jeecgos@163.com)
 *   
 *  Licensed 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.jeecgframework.poi.excel.entity;

import org.jeecgframework.poi.handler.inter.IExcelDataHandler;

/**
 * 基础参数
 * 
 * @author JEECG
 * @date 2014年6月20日 下午1:56:52
 */
public class ExcelBaseParams {

	/**
	 * 数据处理接口,以此为主,replace,format都在这后面
	 */
	private IExcelDataHandler dataHanlder;

	public IExcelDataHandler getDataHanlder() {
		return dataHanlder;
	}

	public void setDataHanlder(IExcelDataHandler dataHanlder) {
		this.dataHanlder = dataHanlder;
	}

}


================================================
FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/entity/ExportParams.java
================================================
/**
 * Copyright 2013-2015 JEECG (jeecgos@163.com)
 *   
 *  Licensed 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.jeecgframework.poi.excel.entity;

import org.apache.poi.ss.usermodel.IndexedColors;
import org.jeecgframework.poi.excel.entity.enmus.ExcelType;
import org.jeecgframework.poi.excel.export.styler.ExcelExportStylerDefaultImpl;

/**
 * Excel 导出参数
 * 
 * @author JEECG
 * @version 1.0 2013年8月24日
 */
public class ExportParams extends ExcelBaseParams {

	/**
	 * 表格名称
	 */
	private String title;

	/**
	 * 表格名称
	 */
	private short titleHeight = 10;

	/**
	 * 第二行名称
	 */
	private String secondTitle;

	/**
	 * 表格名称
	 */
	private short secondTitleHeight = 8;
	/**
	 * sheetName
	 */
	private String sheetName;
	/**
	 * 过滤的属性
	 */
	private String[] exclusions;
	/**
	 * 是否添加需要需要
	 */
	private boolean addIndex;
	/**
	 * 是否添加需要需要
	 */
	private String indexName = "序号";
	/**
	 * 冰冻列
	 */
	private int freezeCol;
	/**
	 * 表头颜色
	 */
	private short color = IndexedColors.WHITE.index;
	/**
	 * 属性说明行的颜色 例如:HSSFColor.SKY_BLUE.index 默认
	 */
	private short headerColor = IndexedColors.SKY_BLUE.index;
	/**
	 * Excel 导出版本
	 */
	private ExcelType type = ExcelType.HSSF;
	/**
	 * Excel 导出style
	 */
	private Class<?> style = ExcelExportStylerDefaultImpl.class;
	/**
	 * 是否创建表头
	 */
	private boolean isCreateHeadRows = true;

	/**
	 * 本地文件存储根路径  base path
	 */
	private String imageBasePath;
//update-begin---author:liusq  Date:20220104  for:[LOWCOD-2521]【autopoi】大数据导出方法【全局】----
	/**
	 * 是否固定表头
	 */
	private boolean isFixedTitle     = true;
	/**
	 * 单sheet最大值
	 * 03版本默认6W行,07默认100W
	 */
	private int     maxNum           = 0;
	/**
	 * 导出时在excel中每个列的高度 单位为字符,一个汉字=2个字符
	 * 全局设置,优先使用
	 */
	private short height = 0;

	/**
	 * 只读
	 */
	private boolean readonly = false;
//update-end---author:liusq  Date:20220104  for:[LOWCOD-2521]【autopoi】大数据导出方法【全局】----
	public ExportParams() {

	}

	public ExportParams(String title, String sheetName) {
		this.title = title;
		this.sheetName = sheetName;
	}

	public ExportParams(String title, String sheetName, ExcelType type) {
		this.title = title;
		this.sheetName = sheetName;
		this.type = type;
	}

	public ExportParams(String title, String secondTitle, String sheetName) {
		this.title = title;
		this.secondTitle = secondTitle;
		this.sheetName = sheetName;
	}
    
    public ExportParams(String title, String secondTitle, String sheetName, ExcelType type) {
        this.title = title;
        this.secondTitle = secondTitle;
        this.sheetName = sheetName;
        this.type = type;
    }

	public ExportParams(String title, String secondTitle, String sheetName,String imageBasePath) {
		this.title = title;
		this.secondTitle = secondTitle;
		this.sheetName = sheetName;
		this.imageBasePath = imageBasePath;
	}

	public short getColor() {
		return color;
	}

	public String[] getExclusions() {
		return exclusions;
	}

	public short getHeaderColor() {
		return headerColor;
	}

	public String getSecondTitle() {
		return secondTitle;
	}

	public short getSecondTitleHeight() {
		return (short) (secondTitleHeight * 50);
	}

	public String getSheetName() {
		return sheetName;
	}

	public String getTitle() {
		return title;
	}

	public short getTitleHeight() {
		return (short) (titleHeight * 50);
	}

	public boolean isAddIndex() {
		return addIndex;
	}

	public void setAddIndex(boolean addIndex) {
		this.addIndex = addIndex;
	}

	public void setColor(short color) {
		this.color = color;
	}

	public void setExclusions(String[] exclusions) {
		this.exclusions = exclusions;
	}

	public void setHeaderColor(short headerColor) {
		this.headerColor = headerColor;
	}

	public void setSecondTitle(String secondTitle) {
		this.secondTitle = secondTitle;
	}

	public void setSecondTitleHeight(short secondTitleHeight) {
		this.secondTitleHeight = secondTitleHeight;
	}

	public void setSheetName(String sheetName) {
		this.sheetName = sheetName;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public void setTitleHeight(short titleHeight) {
		this.titleHeight = titleHeight;
	}

	public ExcelType getType() {
		return type;
	}

	public void setType(ExcelType type) {
		this.type = type;
	}

	public String getIndexName() {
		return indexName;
	}

	public void setIndexName(String indexName) {
		this.indexName = indexName;
	}

	public Class<?> getStyle() {
		return style;
	}

	public void setStyle(Class<?> style) {
		this.style = style;
	}

	public int getFreezeCol() {
		return freezeCol;
	}

	public void setFreezeCol(int freezeCol) {
		this.freezeCol = freezeCol;
	}

	public boolean isCreateHeadRows() {
		return isCreateHeadRows;
	}

	public void setCreateHeadRows(boolean isCreateHeadRows) {
		this.isCreateHeadRows = isCreateHeadRows;
	}

	public String getImageBasePath() {
		return imageBasePath;
	}

	public void setImageBasePath(String imageBasePath) {
		this.imageBasePath = imageBasePath;
	}

	public int getMaxNum() {
		return maxNum;
	}

	public void setMaxNum(int maxNum) {
		this.maxNum = maxNum;
	}

	public short getHeight() {
		return height == -1 ? -1 : (short) (height * 50);
	}

	public void setHeight(short height) {
		this.height = height;
	}

	public boolean isFixedTitle() {
		return isFixedTitle;
	}

	public void setFixedTitle(boolean fixedTitle) {
		isFixedTitle = fixedTitle;
	}

	public boolean isReadonly() {
		return readonly;
	}

	public void setReadonly(boolean readonly) {
		this.readonly = readonly;
	}
}


================================================
FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/entity/ImportParams.java
================================================
/**
 * Copyright 2013-2015 JEECG (jeecgos@163.com)
 *   
 *  Licensed 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.jeecgframework.poi.excel.entity;

import org.jeecgframework.poi.handler.inter.IExcelVerifyHandler;

import java.util.List;

/**
 * 导入参数设置
 * 
 * @author JEECG
 * @date 2013-9-24
 * @version 1.0
 */
public class ImportParams extends ExcelBaseParams {
	/**
	 * 表格标题行数,默认0
	 */
	private int titleRows = 0;
	/**
	 * 表头行数,默认1
	 */
	private int headRows = 1;
	/**
	 * 字段真正值和列标题之间的距离 默认0
	 */
	private int startRows = 0;
	/**
	 * 主键设置,如何这个cell没有值,就跳过 或者认为这个是list的下面的值
	 */
	private int keyIndex = 0;
	//update-begin-author:liusq date:20220605 for:https://gitee.com/jeecg/jeecg-boot/issues/I57UPC 导入 ImportParams 中没有startSheetIndex参数
	/**
	 * 开始读取的sheet位置,默认为0
	 */
	private int                 startSheetIndex  = 0;
	//update-end-author:liusq date:20220605 for:https://gitee.com/jeecg/jeecg-boot/issues/I57UPC 导入 ImportParams 中没有startSheetIndex参数

	//update-begin-author:taoyan date:20211210 for:https://gitee.com/jeecg/jeecg-boot/issues/I45C32 导入空白sheet报错
	/**
	 * 上传表格需要读取的sheet 数量,默认为0
	 */
	private int sheetNum = 0;
	//update-end-author:taoyan date:20211210 for:https://gitee.com/jeecg/jeecg-boot/issues/I45C32 导入空白sheet报错
	/**
	 * 是否需要保存上传的Excel,默认为false
	 */
	private boolean needSave = false;
	/**
	 * 保存上传的Excel目录,默认是 如 TestEntity这个类保存路径就是
	 * upload/excelUpload/Test/yyyyMMddHHmss_***** 保存名称上传时间_五位随机数
	 */
	private String saveUrl = "upload/excelUpload";
	/**
	 * 校验处理接口
	 */
	private IExcelVerifyHandler verifyHanlder;
	/**
	 * 最后的无效行数
	 */
	private int lastOfInvalidRow = 0;

	/**
	 * 不需要解析的表头 只作为多表头展示,无字段与其绑定
	 */
	private List<String> ignoreHeaderList;

	/**
	 * 指定导入的sheetName
	 */
	private String sheetName;

	/**
	 * 图片列 集合
	 */
	private List<String> imageList;

	public int getHeadRows() {
		return headRows;
	}

	public int getKeyIndex() {
		return keyIndex;
	}

	public String getSaveUrl() {
		return saveUrl;
	}

	public int getSheetNum() {
		return sheetNum;
	}

	public int getStartRows() {
		return startRows;
	}

	public int getTitleRows() {
		return titleRows;
	}

	public IExcelVerifyHandler getVerifyHanlder() {
		return verifyHanlder;
	}

	public boolean isNeedSave() {
		return needSave;
	}

	public void setHeadRows(int headRows) {
		this.headRows = headRows;
	}

	public void setKeyIndex(int keyIndex) {
		this.keyIndex = keyIndex;
	}

	public void setNeedSave(boolean needSave) {
		this.needSave = needSave;
	}

	public void setSaveUrl(String saveUrl) {
		this.saveUrl = saveUrl;
	}

	public void setSheetNum(int sheetNum) {
		this.sheetNum = sheetNum;
	}

	public void setStartRows(int startRows) {
		this.startRows = startRows;
	}

	public void setTitleRows(int titleRows) {
		this.titleRows = titleRows;
	}

	public void setVerifyHanlder(IExcelVerifyHandler verifyHanlder) {
		this.verifyHanlder = verifyHanlder;
	}

	public int getLastOfInvalidRow() {
		return lastOfInvalidRow;
	}

	public void setLastOfInvalidRow(int lastOfInvalidRow) {
		this.lastOfInvalidRow = lastOfInvalidRow;
	}

	public List<String> getImageList() {
		return imageList;
	}

	public void setImageList(List<String> imageList) {
		this.imageList = imageList;
	}

	public List<String> getIgnoreHeaderList() {
		return ignoreHeaderList;
	}

	public void setIgnoreHeaderList(List<String> ignoreHeaderList) {
		this.ignoreHeaderList = ignoreHeaderList;
	}

	public String getSheetName() {
		return sheetName;
	}

	public void setSheetName(String sheetName) {
		this.sheetName = sheetName;
	}

	/**
	 * 根据表头显示的文字 判断是否忽略该表头
	 * @param text
	 * @return
	 */
	public boolean isIgnoreHeader(String text){
		if(ignoreHeaderList!=null && ignoreHeaderList.indexOf(text)>=0){
			return true;
		}
		return false;
	}
	public int getStartSheetIndex() {
		return startSheetIndex;
	}

	public void setStartSheetIndex(int startSheetIndex) {
		this.startSheetIndex = startSheetIndex;
	}
}


================================================
FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/entity/TemplateExportParams.java
================================================
/**
 * Copyright 2013-2015 JEECG (jeecgos@163.com)
 *   
 *  Licensed 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.jeecgframework.poi.excel.entity;

import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.jeecgframework.poi.excel.export.styler.ExcelExportStylerDefaultImpl;

import java.io.IOException;
import java.io.InputStream;

/**
 * 模板导出参数设置
 * 
 * @author JEECG
 * @date 2013-10-17
 * @version 1.0
 */
public class TemplateExportParams extends ExcelBaseParams {

	/**
	 * 输出全部的sheet
	 */
	private boolean scanAllsheet = false;
	/**
	 * 模板的路径
	 */
	private String templateUrl;
	/**
	 * 模板
	 */
	private Workbook templateWb;

	/**
	 * 需要导出的第几个 sheetNum,默认是第0个
	 */
	private Integer[] sheetNum = new Integer[] { 0 };

	/**
	 * 这只sheetName 不填就使用原来的
	 */
	private String[] sheetName;

	/**
	 * 表格列标题行数,默认1
	 */
	private int headingRows = 1;

	/**
	 * 表格列标题开始行,默认1
	 */
	private int headingStartRow = 1;
	/**
	 * 设置数据源的NUM
	 */
	private int dataSheetNum = 0;
	/**
	 * Excel 导出style
	 */
	private Class<?> style = ExcelExportStylerDefaultImpl.class;
	/**
	 * FOR EACH 用到的局部变量
	 */
	private String tempParams = "t";
    //列循环支持
	private boolean   colForEach      = false;

	/**
	 * 默认构造器
	 */
	public TemplateExportParams() {

	}

	/**
	 * 构造器
	 * 
	 * @param templateUrl
	 *            模板路径
	 * @param scanAllsheet
	 *            是否输出全部的sheet
	 * @param sheetName
	 *            sheet的名称,可不填
	 */
	public TemplateExportParams(String templateUrl, boolean scanAllsheet, String... sheetName) {
		this.templateUrl = templateUrl;
		this.scanAllsheet = scanAllsheet;
		if (sheetName != null && sheetName.length > 0) {
			this.sheetName = sheetName;

		}
	}

	/**
	 * 构造器
	 * 
	 * @param templateUrl
	 *            模板路径
	 * @param sheetNum
	 *            sheet 的位置,可不填
	 */
	public TemplateExportParams(String templateUrl, Integer... sheetNum) {
		this.templateUrl = templateUrl;
		if (sheetNum != null && sheetNum.length > 0) {
			this.sheetNum = sheetNum;
		}
	}

	/**
	 * 单个sheet输出构造器
	 * 
	 * @param templateUrl
	 *            模板路径
	 * @param sheetName
	 *            sheet的名称
	 * @param sheetNum
	 *            sheet的位置,可不填
	 */
	public TemplateExportParams(String templateUrl, String sheetName, Integer... sheetNum) {
		this.templateUrl = templateUrl;
		this.sheetName = new String[] { sheetName };
		if (sheetNum != null && sheetNum.length > 0) {
			this.sheetNum = sheetNum;
		}
	}
	//update-begin-author:liusq---date:2024-09-03--for: [issues/7048]TemplateExportParams类建议增加传入模板文件InputStream的方式
	/**
	 * 构造器
	 * @param inputStream 输入流
	 * @param scanAllsheet 是否输出全部的sheet
	 * @param sheetName    sheet的名称,可不填
	 */
	public TemplateExportParams(InputStream inputStream, boolean scanAllsheet, String... sheetName) throws IOException {
		this.templateWb = WorkbookFactory.create(inputStream);
		this.scanAllsheet = scanAllsheet;
		if (sheetName != null && sheetName.length > 0) {
			this.sheetName = sheetName;
		}
	}
	/**
	 * 构造器
	 * @param inputStream 输入流
	 * @param sheetNum    sheet 的位置,可不填
	 */
	public TemplateExportParams(InputStream inputStream, Integer... sheetNum) throws IOException {
		this.templateWb = WorkbookFactory.create(inputStream);
		if (sheetNum != null && sheetNum.length > 0) {
			this.sheetNum = sheetNum;
		}
	}

	/**
	 * 单个sheet输出构造器
	 * @param inputStream 输入流
	 * @param sheetName   sheet的名称
	 * @param sheetNum    sheet的位置,可不填
	 */
	public TemplateExportParams(InputStream inputStream, String sheetName, Integer... sheetNum) throws IOException {
		this.templateWb = WorkbookFactory.create(inputStream);
		this.sheetName = new String[] { sheetName };
		if (sheetNum != null && sheetNum.length > 0) {
			this.sheetNum = sheetNum;
		}
	}
	//update-end-author:liusq---date:2024-09-03--for: [issues/7048]TemplateExportParams类建议增加传入模板文件InputStream的方式
	public int getHeadingRows() {
		return headingRows;
	}

	public int getHeadingStartRow() {
		return headingStartRow;
	}

	public String[] getSheetName() {
		return sheetName;
	}

	public Integer[] getSheetNum() {
		return sheetNum;
	}

	public String getTemplateUrl() {
		return templateUrl;
	}

	public void setHeadingRows(int headingRows) {
		this.headingRows = headingRows;
	}

	public void setHeadingStartRow(int headingStartRow) {
		this.headingStartRow = headingStartRow;
	}

	public void setSheetName(String[] sheetName) {
		this.sheetName = sheetName;
	}

	public void setSheetName(String sheetName) {
		this.sheetName = new String[] { sheetName };
	}

	public void setSheetNum(Integer[] sheetNum) {
		this.sheetNum = sheetNum;
	}

	public void setSheetNum(Integer sheetNum) {
		this.sheetNum = new Integer[] { sheetNum };
	}

	public void setTemplateUrl(String templateUrl) {
		this.templateUrl = templateUrl;
	}

	public Class<?> getStyle() {
		return style;
	}

	public void setStyle(Class<?> style) {
		this.style = style;
	}

	public int getDataSheetNum() {
		return dataSheetNum;
	}

	public void setDataSheetNum(int dataSheetNum) {
		this.dataSheetNum = dataSheetNum;
	}

	public boolean isScanAllsheet() {
		return scanAllsheet;
	}

	public void setScanAllsheet(boolean scanAllsheet) {
		this.scanAllsheet = scanAllsheet;
	}

	public String getTempParams() {
		return tempParams;
	}

	public void setTempParams(String tempParams) {
		this.tempParams = tempParams;
	}

	public boolean isColForEach() {
		return colForEach;
	}

	public void setColForEach(boolean colForEach) {
		this.colForEach = colForEach;
	}
	public Workbook getTemplateWb() {
		return templateWb;
	}

	public void setTemplateWb(Workbook templateWb) {
		this.templateWb = templateWb;
	}
}


================================================
FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/entity/enmus/CellValueType.java
================================================
/**
 * Copyright 2013-2015 JEECG (jeecgos@163.com)
 *   
 *  Licensed 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.jeecgframework.poi.excel.entity.enmus;

/**
 * Cell 值得类型
 * 
 * @author JEECG
 * @date 2014年12月29日 下午10:20:49
 */
public enum CellValueType {

	String, Number, Boolean, Date, TElement, Null, None;

}


================================================
FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/entity/enmus/ExcelStyleType.java
================================================
/**
 * Copyright 2013-2015 JEECG (jeecgos@163.com)
 *   
 *  Licensed 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.jeecgframework.poi.excel.entity.enmus;

import org.jeecgframework.poi.excel.export.styler.ExcelExportStylerBorderImpl;
import org.jeecgframework.poi.excel.export.styler.ExcelExportStylerColorImpl;
import org.jeecgframework.poi.excel.export.styler.ExcelExportStylerDefaultImpl;

/**
 * 插件提供的几个默认样式
 * 
 * @author JEECG
 * @date 2015年1月9日 下午9:02:24
 */
public enum ExcelStyleType {

	NONE("默认样式", ExcelExportStylerDefaultImpl.class), BORDER("边框样式", ExcelExportStylerBorderImpl.class), COLOR("间隔行样式", ExcelExportStylerColorImpl.class);

	private String name;
	private Class<?> clazz;

	ExcelStyleType(String name, Class<?> clazz) {
		this.name = name;
		this.clazz = clazz;
	}

	public Class<?> getClazz() {
		return clazz;
	}

	public String getName() {
		return name;
	}

}


================================================
FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/entity/enmus/ExcelType.java
================================================
/**
 * Copyright 2013-2015 JEECG (jeecgos@163.com)
 *   
 *  Licensed 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.jeecgframework.poi.excel.entity.enmus;

/**
 * Excel 文件格式类型枚举
 * <p>用于指定导出/导入的 Excel 文件格式版本</p>
 * 
 * @author JEECG
 * @date 2014年12月29日 下午9:08:21
 */
public enum ExcelType {

	/**
	 * HSSF 格式 - Excel 97-2003 版本 (.xls)
	 * <ul>
	 *   <li>文件扩展名:.xls</li>
	 *   <li>最大行数:65,536 行(2^16)</li>
	 *   <li>最大列数:256 列(2^8)</li>
	 *   <li>适用场景:兼容老版本 Excel,数据量较小的场景</li>
	 *   <li>对应 POI 类:HSSFWorkbook</li>
	 * </ul>
	 */
	HSSF,
	
	/**
	 * XSSF 格式 - Excel 2007+ 版本 (.xlsx)
	 * <ul>
	 *   <li>文件扩展名:.xlsx</li>
	 *   <li>最大行数:1,048,576 行(2^20)</li>
	 *   <li>最大列数:16,384 列(2^14)</li>
	 *   <li>适用场景:现代 Excel 版本,大数据量导出,推荐使用</li>
	 *   <li>对应 POI 类:XSSFWorkbook</li>
	 *   <li>优势:支持更大数据量,文件压缩比更高,功能更丰富</li>
	 * </ul>
	 * <p><b>注意:</b>导出时请确保文件扩展名与格式类型匹配,避免文件损坏</p>
	 */
	XSSF;

}


================================================
FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/entity/params/ExcelBaseEntity.java
================================================
/**
 * Copyright 2013-2015 JEECG (jeecgos@163.com)
 *   
 *  Licensed 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.jeecgframework.poi.excel.entity.params;

import java.lang.reflect.Method;
import java.util.List;

/**
 * Excel 导入导出基础对象类
 * 
 * @author JEECG
 * @date 2014年6月20日 下午2:26:09
 */
public class ExcelBaseEntity {
	/**
	 * 对应name
	 */
	protected String name;
	/**
	 * 对应type
	 */
	private int type = 1;
	/**
	 * 数据库格式
	 */
	private String databaseFormat;
	/**
	 * 导出日期格式
	 */
	private String format;

	/**
	 * 数字格式化,参数是Pattern,使用的对象是DecimalFormat
	 */
	private String numFormat;
	/**
	 * 替换值表达式 :"男_1","女_0"
	 */
	private String[] replace;
	/**
	 * 替换是否是替换多个值
	 */
	private boolean multiReplace;

	/**
	 * 表头组名称
	 */
	private String groupName;
	
	/**
	 * set/get方法
	 */
	private Method method;
	/**
	 * 固定的列
	 */
	private Integer      fixedIndex;
	/**
	 * 字典名称
	 */
	private String       dict;
	/**
	 * 这个是不是超链接,如果是需要实现接口返回对象
	 */
	private boolean     hyperlink;

	private List<Method> methods;

	public String getDatabaseFormat() {
		return databaseFormat;
	}

	public String getFormat() {
		return format;
	}

	public Method getMethod() {
		return method;
	}

	public List<Method> getMethods() {
		return methods;
	}

	public String getName() {
		return name;
	}

	public String[] getReplace() {
		return replace;
	}

	public int getType() {
		return type;
	}

	public void setDatabaseFormat(String databaseFormat) {
		this.databaseFormat = databaseFormat;
	}

	public void setFormat(String format) {
		this.format = format;
	}

	public void setMethod(Method method) {
		this.method = method;
	}

	public void setMethods(List<Method> methods) {
		this.methods = methods;
	}

	public void setName(String name) {
		this.name = name;
	}

	public void setReplace(String[] replace) {
		this.replace = replace;
	}

	public void setType(int type) {
		this.type = type;
	}

	public boolean isMultiReplace() {
		return multiReplace;
	}
	public void setMultiReplace(boolean multiReplace) {
		this.multiReplace = multiReplace;
	}

	public String getNumFormat() {
		return numFormat;
	}

	public void setNumFormat(String numFormat) {
		this.numFormat = numFormat;
	}

	public String getGroupName() {
		return groupName;
	}

	public void setGroupName(String groupName) {
		this.groupName = groupName;
	}

	public Integer getFixedIndex() {
		return fixedIndex;
	}

	public void setFixedIndex(Integer fixedIndex) {
		this.fixedIndex = fixedIndex;
	}

	public String getDict() {
		return dict;
	}

	public void setDict(String dict) {
		this.dict = dict;
	}

	public boolean isHyperlink() {
		return hyperlink;
	}

	public void setHyperlink(boolean hyperlink) {
		this.hyperlink = hyperlink;
	}
}


================================================
FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/entity/params/ExcelCollectionParams.java
================================================
/**
 * Copyright 2013-2015 JEECG (jeecgos@163.com)
 *   
 *  Licensed 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.jeecgframework.poi.excel.entity.params;

import java.util.Map;

/**
 * Excel 对于的 Collection
 * 
 * @author JEECG
 * @date 2013-9-26
 * @version 1.0
 */
public class ExcelCollectionParams {

	/**
	 * 集合对应的名称
	 */
	private String name;
	/**
	 * Excel 列名称
	 */
	private String excelName;
	/**
	 * 实体对象
	 */
	private Class<?> type;
	/**
	 * 这个list下面的参数集合实体对象
	 */
	private Map<String, ExcelImportEntity> excelParams;

	public Map<String, ExcelImportEntity> getExcelParams() {
		return excelParams;
	}

	public String getName() {
		return name;
	}

	public Class<?> getType() {
		return type;
	}

	public void setExcelParams(Map<String, ExcelImportEntity> excelParams) {
		this.excelParams = excelParams;
	}

	public void setName(String name) {
		this.name = name;
	}

	public void setType(Class<?> type) {
		this.type = type;
	}

	public String getExcelName() {
		return excelName;
	}

	public void setExcelName(String excelName) {
		this.excelName = excelName;
	}
}


================================================
FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/entity/params/ExcelExportEntity.java
================================================
/**
 * Copyright 2013-2015 JEECG (jeecgos@163.com)
 *   
 *  Licensed 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.jeecgframework.poi.excel.entity.params;

import java.util.ArrayList;
import java.util.List;

/**
 * excel 导出工具类,对cell类型做映射
 * 
 * @author JEECG
 * @version 1.0 2013年8月24日
 */
public class ExcelExportEntity extends ExcelBaseEntity implements Comparable<ExcelExportEntity> {

	/**
	 * 如果是MAP导出,这个是map的key
	 */
	private Object key;

	private double width = 10;

	private double height = 10;

	/**
	 * 图片的类型,1是文件地址(class目录),2是数据库字节,3是文件地址(磁盘目录),4网络图片
	 */
	private int exportImageType = 3;

	/**
	 * 图片储存位置(磁盘目录) 用于导出获取图片绝对路径
	 */
	private String imageBasePath;

	/**
	 * 排序顺序
	 */
	private int orderNum = 0;

	/**
	 * 是否支持换行
	 */
	private boolean isWrap;

	/**
	 * 是否需要合并
	 */
	private boolean needMerge;
	/**
	 * 单元格纵向合并
	 */
	private boolean mergeVertical;
	/**
	 * 合并依赖
	 */
	private int[] mergeRely;
	/**
	 * 后缀
	 */
	private String suffix;
	/**
	 * 统计
	 */
	private boolean isStatistics;

	/**
	 * 是否横向合并
	 */
	private boolean colspan;

	/**
	 * 被横向合并的列名称
	 */
	private List<String> subColumnList;

	/**
	 * 父表头的名称
	 */
	private String groupName;
	/**
	 *  是否隐藏列
	 */
	private boolean isColumnHidden;

	//update-begin-author:liusq date:20251211 for:JHHB-1212【AutoPoi】导出时,支持动态生成Excel的列
	/**
	 * 是否为动态列
	 */
	private boolean dynamic;
	/**
	 * 动态列标题字段
	 */
	private String dynamicField;
	/**
	 * 动态列值字段
	 */
	private String dynamicValue;
	/**
	 * 是否保留原始列
	 */
	private boolean dynamicKeepSelf;
	/**
	 * 当前动态列对应的标题名称
	 */
	private String dynamicColumnName;
	//update-end-author:liusq date:20251211 for:JHHB-1212【AutoPoi】导出时,支持动态生成Excel的列

	private List<ExcelExportEntity> list;

	public ExcelExportEntity() {

	}

	public ExcelExportEntity(String name) {
		super.name = name;
	}

	public ExcelExportEntity(String name, Object key) {
		super.name = name;
		this.key = key;
	}

	/**
	 * 构造器
	 * @param name 描述-文字
	 * @param key 存储key 如果是MAP导出,这个是map的key
	 * @param colspan 是否为合并列(a,b列公用一个表头c,则a,b,c都需要设置为true)
	 */
	public ExcelExportEntity(String name, Object key, boolean colspan) {
		super.name = name;
		this.key = key;
		this.colspan = colspan;
		this.needMerge = colspan;
	}

	public ExcelExportEntity(String name, Object key, int width) {
		super.name = name;
		this.width = width;
		this.key = key;
	}

	public int getExportImageType() {
		return exportImageType;
	}

	public double getHeight() {
		return height;
	}

	public Object getKey() {
		return key;
	}

	public List<ExcelExportEntity> getList() {
		return list;
	}

	public int[] getMergeRely() {
		return mergeRely == null ? new int[0] : mergeRely;
	}

	public int getOrderNum() {
		return orderNum;
	}

	public double getWidth() {
		return width;
	}

	public boolean isMergeVertical() {
		return mergeVertical;
	}

	public boolean isNeedMerge() {
		return needMerge;
	}

	public boolean isWrap() {
		return isWrap;
	}

	public void setExportImageType(int exportImageType) {
		this.exportImageType = exportImageType;
	}

	public void setHeight(double height) {
		this.height = height;
	}

	public void setKey(Object key) {
		this.key = key;
	}

	public void setList(List<ExcelExportEntity> list) {
		this.list = list;
	}

	public void setMergeRely(int[] mergeRely) {
		this.mergeRely = mergeRely;
	}

	public void setMergeVertical(boolean mergeVertical) {
		this.mergeVertical = mergeVertical;
	}

	public void setNeedMerge(boolean needMerge) {
		this.needMerge = needMerge;
	}

	public void setOrderNum(int orderNum) {
		this.orderNum = orderNum;
	}

	public void setWidth(double width) {
		this.width = width;
	}

	public void setWrap(boolean isWrap) {
		this.isWrap = isWrap;
	}

	public String getSuffix() {
		return suffix;
	}

	public void setSuffix(String suffix) {
		this.suffix = suffix;
	}

	public boolean isStatistics() {
		return isStatistics;
	}

	public void setStatistics(boolean isStatistics) {
		this.isStatistics = isStatistics;
	}

	public String getImageBasePath() {
		return imageBasePath;
	}

	public void setImageBasePath(String imageBasePath) {
		this.imageBasePath = imageBasePath;
	}

	public boolean isColspan() {
		return colspan;
	}

	public void setColspan(boolean colspan) {
		this.colspan = colspan;
	}

	public List<String> getSubColumnList() {
		return subColumnList;
	}

	public void setSubColumnList(List<String> subColumnList) {
		this.subColumnList = subColumnList;
	}

	public String getGroupName() {
		return groupName;
	}

	public void setGroupName(String groupName) {
		this.groupName = groupName;
	}

	public boolean isColumnHidden() {
		return isColumnHidden;
	}

	public void setColumnHidden(boolean columnHidden) {
		isColumnHidden = columnHidden;
	}

	/**
	 * 是否为合并子列
	 * @return
	 */
	public boolean isSubColumn(){
		return this.colspan && (this.subColumnList==null || this.subColumnList.size()==0);
	}

	/**
	 * 是否为合并父列
	 * @return
	 */
	public boolean isMergeColumn(){
		return this.colspan && this.subColumnList!=null && this.subColumnList.size()>0;
	}

	public boolean isDynamic() {
		return dynamic;
	}

	public void setDynamic(boolean dynamic) {
		this.dynamic = dynamic;
	}

	public String getDynamicField() {
		return dynamicField;
	}

	public void setDynamicField(String dynamicField) {
		this.dynamicField = dynamicField;
	}

	public String getDynamicValue() {
		return dynamicValue;
	}

	public void setDynamicValue(String dynamicValue) {
		this.dynamicValue = dynamicValue;
	}

	public boolean isDynamicKeepSelf() {
		return dynamicKeepSelf;
	}

	public void setDynamicKeepSelf(boolean dynamicKeepSelf) {
		this.dynamicKeepSelf = dynamicKeepSelf;
	}

	public String getDynamicColumnName() {
		return dynamicColumnName;
	}

	public void setDynamicColumnName(String dynamicColumnName) {
		this.dynamicColumnName = dynamicColumnName;
	}
	/**
	 * 获取被合并的子列
	 * @param all
	 * @return
	 */
	public List<ExcelExportEntity> initSubExportEntity(List<ExcelExportEntity> all){
		List<ExcelExportEntity> sub = new ArrayList<ExcelExportEntity>();
		for (ExcelExportEntity temp : all) {
			if(this.subColumnList.contains(temp.getKey())){
				sub.add(temp);
			}
		}
		this.setList(sub);
		return sub;
	}

	@Override
	public int compareTo(ExcelExportEntity prev) {
		return this.getOrderNum() - prev.getOrderNum();
	}

}


================================================
FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/entity/params/ExcelForEachParams.java
================================================
package org.jeecgframework.poi.excel.entity.params;

import java.io.Serializable;
import java.util.Stack;

import org.apache.poi.ss.usermodel.CellStyle;

/**
 * 模板for each是的参数
 * @author JueYue
 * @date 2015年4月29日 下午9:22:48
 */
public class ExcelForEachParams implements Serializable {

    /**
     *
     */
    private static final long serialVersionUID = 1L;
    /**
     * key
     */
    private String            name;
    /**
     * key
     */
    private Stack<String> tempName;
    /**
     * 模板的cellStyle
     */
    private CellStyle         cellStyle;
    /**
     * 行高
     */
    private short             height;
    /**
     * 常量值
     */
    private String            constValue;
    /**
     * 列合并
     */
    private int               colspan          = 1;
    /**
     * 行合并
     */
    private int               rowspan          = 1;
    /**
     * 行合并
     */
    private              boolean       collectCell;

    public ExcelForEachParams() {

    }

    public ExcelForEachParams(String name, CellStyle cellStyle, short height) {
        this.name = name;
        this.cellStyle = cellStyle;
        this.height = height;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public CellStyle getCellStyle() {
        return cellStyle;
    }

    public void setCellStyle(CellStyle cellStyle) {
        this.cellStyle = cellStyle;
    }

    public short getHeight() {
        return height;
    }

    public void setHeight(short height) {
        this.height = height;
    }

    public String getConstValue() {
        return constValue;
    }

    public void setConstValue(String constValue) {
        this.constValue = constValue;
    }

    public int getColspan() {
        return colspan;
    }

    public void setColspan(int colspan) {
        this.colspan = colspan;
    }

    public int getRowspan() {
        return rowspan;
    }

    public void setRowspan(int rowspan) {
        this.rowspan = rowspan;
    }

    public boolean isCollectCell() {
        return collectCell;
    }

    public void setCollectCell(boolean collectCell) {
        this.collectCell = collectCell;
    }

    public Stack<String> getTempName() {
        return tempName;
    }

    public void setTempName(Stack<String> tempName) {
        this.tempName = tempName;
    }
}


================================================
FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/entity/params/ExcelImportEntity.java
================================================
/**
 * Copyright 2013-2015 JEECG (jeecgos@163.com)
 *   
 *  Licensed 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.jeecgframework.poi.excel.entity.params;

import java.util.List;

/**
 * excel 导入工具类,对cell类型做映射
 * 
 * @author JEECG
 * @version 1.0 2013年8月24日
 */
public class ExcelImportEntity extends ExcelBaseEntity {
	/**
	 * 对应 Collection NAME
	 */
	private String collectionName;
	/**
	 * 保存图片的地址 当saveType设置为3/4时,此值可以设置为:local,minio,alioss
	 */
	private String saveUrl;
	/**
	 * 保存图片的类型,1是文件_old,2是数据库字节,3文件地址_new,4网络地址
	 */
	private int saveType;
	/**
	 * 对应exportType
	 */
	private String classType;
	/**
	 * 校驗參數
	 */
	private ExcelVerifyEntity verify;
	/**
	 * 后缀
	 */
	private String suffix;

	private List<ExcelImportEntity> list;

	public String getClassType() {
		return classType;
	}

	public String getCollectionName() {
		return collectionName;
	}

	public List<ExcelImportEntity> getList() {
		return list;
	}

	public int getSaveType() {
		return saveType;
	}

	public String getSaveUrl() {
		return saveUrl;
	}

	public ExcelVerifyEntity getVerify() {
		return verify;
	}

	public void setClassType(String classType) {
		this.classType = classType;
	}

	public void setCollectionName(String collectionName) {
		this.collectionName = collectionName;
	}

	public void setList(List<ExcelImportEntity> list) {
		this.list = list;
	}

	public void setSaveType(int saveType) {
		this.saveType = saveType;
	}

	public void setSaveUrl(String saveUrl) {
		this.saveUrl = saveUrl;
	}

	public void setVerify(ExcelVerifyEntity verify) {
		this.verify = verify;
	}

	public String getSuffix() {
		return suffix;
	}

	public void setSuffix(String suffix) {
		this.suffix = suffix;
	}

}


================================================
FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/entity/params/ExcelTemplateParams.java
================================================
package org.jeecgframework.poi.excel.entity.params;

import java.io.Serializable;

import org.apache.poi.ss.usermodel.CellStyle;

/**
 * 模板便利是的参数
 * 
 * @author JEECG
 * @date 2015年4月29日 下午9:22:48
 */
public class ExcelTemplateParams implements Serializable {

	/**
     * 
     */
	private static final long serialVersionUID = 1L;
	/**
	 * key
	 */
	private String name;
	/**
	 * 模板的cellStyle
	 */
	private CellStyle cellStyle;
	/**
	 * 行高
	 */
	private short height;

	public ExcelTemplateParams() {

	}

	public ExcelTemplateParams(String name, CellStyle cellStyle, short height) {
		this.name = name;
		this.cellStyle = cellStyle;
		this.height = height;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public CellStyle getCellStyle() {
		return cellStyle;
	}

	public void setCellStyle(CellStyle cellStyle) {
		this.cellStyle = cellStyle;
	}

	public short getHeight() {
		return height;
	}

	public void setHeight(short height) {
		this.height = height;
	}

}


================================================
FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/entity/params/ExcelVerifyEntity.java
================================================
/**
 * Copyright 2013-2015 JEECG (jeecgos@163.com)
 *   
 *  Licensed 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.jeecgframework.poi.excel.entity.params;

/**
 * Excel 校验对象
 * 
 * @author JEECG
 * @date 2014年6月29日 下午4:24:59
 */
public class ExcelVerifyEntity {

	/**
	 * 接口校验
	 * 
	 * @return
	 */
	private boolean interHandler;

	/**
	 * 不允许空
	 * 
	 * @return
	 */
	private boolean notNull;

	/**
	 * 是13位移动电话
	 * 
	 * @return
	 */
	private boolean isMobile;
	/**
	 * 是座机号码
	 * 
	 * @return
	 */
	private boolean isTel;

	/**
	 * 是电子邮件
	 * 
	 * @return
	 */
	private boolean isEmail;

	/**
	 * 最小长度
	 * 
	 * @return
	 */
	private int minLength;

	/**
	 * 最大长度
	 * 
	 * @return
	 */
	private int maxLength;

	/**
	 * 正在表达式
	 * 
	 * @return
	 */
	private String regex;
	/**
	 * 正在表达式,错误提示信息
	 * 
	 * @return
	 */
	private String regexTip;

	public int getMaxLength() {
		return maxLength;
	}

	public int getMinLength() {
		return minLength;
	}

	public String getRegex() {
		return regex;
	}

	public String getRegexTip() {
		return regexTip;
	}

	public boolean isEmail() {
		return isEmail;
	}

	public boolean isInterHandler() {
		return interHandler;
	}

	public boolean isMobile() {
		return isMobile;
	}

	public boolean isNotNull() {
		return notNull;
	}

	public boolean isTel() {
		return isTel;
	}

	public void setEmail(boolean isEmail) {
		this.isEmail = isEmail;
	}

	public void setInterHandler(boolean interHandler) {
		this.interHandler = interHandler;
	}

	public void setMaxLength(int maxLength) {
		this.maxLength = maxLength;
	}

	public void setMinLength(int minLength) {
		this.minLength = minLength;
	}

	public void setMobile(boolean isMobile) {
		this.isMobile = isMobile;
	}

	public void setNotNull(boolean notNull) {
		this.notNull = notNull;
	}

	public void setRegex(String regex) {
		this.regex = regex;
	}

	public void setRegexTip(String regexTip) {
		this.regexTip = regexTip;
	}

	public void setTel(boolean isTel) {
		this.isTel = isTel;
	}

}


================================================
FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/entity/params/MergeEntity.java
================================================
/**
 * Copyright 2013-2015 JEECG (jeecgos@163.com)
 *   
 *  Licensed 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.jeecgframework.poi.excel.entity.params;

import java.util.List;

/**
 * 合并单元格使用对象
 * 
 * Created by jue on 14-6-11.
 */
public class MergeEntity {
	/**
	 * 合并开始行
	 */
	private int startRow;
	/**
	 * 合并结束行
	 */
	private int endRow;
	/**
	 * 文字
	 */
	private String text;
	/**
	 * 依赖关系文本
	 */
	private List<String> relyList;

	public MergeEntity() {

	}

	public MergeEntity(String text, int startRow, int endRow) {
		this.text = text;
		this.endRow = endRow;
		this.startRow = startRow;
	}

	public int getEndRow() {
		return endRow;
	}

	public List<String> getRelyList() {
		return relyList;
	}

	public int getStartRow() {
		return startRow;
	}

	public String getText() {
		return text;
	}

	public void setEndRow(int endRow) {
		this.endRow = endRow;
	}

	public void setRelyList(List<String> relyList) {
		this.relyList = relyList;
	}

	public void setStartRow(int startRow) {
		this.startRow = startRow;
	}

	public void setText(String text) {
		this.text = text;
	}
}


================================================
FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/entity/result/ExcelImportResult.java
================================================
/**
 * Copyright 2013-2015 JEECG (jeecgos@163.com)
 *   
 *  Licensed 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.jeecgframework.poi.excel.entity.result;

import java.util.List;

import org.apache.poi.ss.usermodel.Workbook;

/**
 * 导入返回类
 * 
 * @author JEECG
 * @date 2014年6月29日 下午5:12:10
 */
public class ExcelImportResult<T> {

	/**
	 * 结果集
	 */
	private List<T> list;

	/**
	 * 是否存在校验失败
	 */
	private boolean verfiyFail;

	/**
	 * 数据源
	 */
	private Workbook workbook;

	public ExcelImportResult() {

	}

	public ExcelImportResult(List<T> list, boolean verfiyFail, Workbook workbook) {
		this.list = list;
		this.verfiyFail = verfiyFail;
		this.workbook = workbook;
	}

	public List<T> getList() {
		return list;
	}

	public Workbook getWorkbook() {
		return workbook;
	}

	public boolean isVerfiyFail() {
		return verfiyFail;
	}

	public void setList(List<T> list) {
		this.list = list;
	}

	public void setVerfiyFail(boolean verfiyFail) {
		this.verfiyFail = verfiyFail;
	}

	public void setWorkbook(Workbook workbook) {
		this.workbook = workbook;
	}

}


================================================
FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/entity/result/ExcelVerifyHanlderResult.java
================================================
/**
 * Copyright 2013-2015 JEECG (jeecgos@163.com)
 *   
 *  Licensed 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.jeecgframework.poi.excel.entity.result;

/**
 * Excel导入处理返回结果
 * 
 * @author JEECG
 * @date 2014年6月23日 下午11:03:29
 */
public class ExcelVerifyHanlderResult {
	/**
	 * 是否正确
	 */
	private boolean success;
	/**
	 * 错误信息
	 */
	private String msg;

	public ExcelVerifyHanlderResult() {

	}

	public ExcelVerifyHanlderResult(boolean success) {
		this.success = success;
	}

	public ExcelVerifyHanlderResult(boolean success, String msg) {
		this.success = success;
		this.msg = msg;
	}

	public String getMsg() {
		return msg;
	}

	public boolean isSuccess() {
		return success;
	}

	public void setMsg(String msg) {
		this.msg = msg;
	}

	public void setSuccess(boolean success) {
		this.success = success;
	}

}


================================================
FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/entity/sax/SaxReadCellEntity.java
================================================
/**
 * Copyright 2013-2015 JEECG (jeecgos@163.com)
 *   
 *  Licensed 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.jeecgframework.poi.excel.entity.sax;

import org.jeecgframework.poi.excel.entity.enmus.CellValueType;

/**
 * Cell 对象
 * 
 * @author JEECG
 * @date 2014年12月29日 下午10:12:57
 */
public class SaxReadCellEntity {
	/**
	 * 值类型
	 */
	private CellValueType cellType;
	/**
	 * 值
	 */
	private Object value;

	public SaxReadCellEntity(CellValueType cellType, Object value) {
		this.cellType = cellType;
		this.value = value;
	}

	public CellValueType getCellType() {
		return cellType;
	}

	public void setCellType(CellValueType cellType) {
		this.cellType = cellType;
	}

	public Object getValue() {
		return value;
	}

	public void setValue(Object value) {
		this.value = value;
	}

	@Override
	public String toString() {
		return "[type=" + cellType.toString() + ",value=" + value + "]";
	}

}


================================================
FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/entity/vo/PoiBaseConstants.java
================================================
/**
 * Copyright 2013-2015 JEECG (jeecgos@163.com)
 *   
 *  Licensed 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.jeecgframework.poi.excel.entity.vo;

/**
 * 基础常量 Created by jue on 14-4-21.
 */
public interface PoiBaseConstants {
	/**
	 * 字段属性对应方法
	 */
	public static String GET = "get";
	/**
	 * 字段属性对应方法
	 */
	public static String SET = "set";
	/**
	 * 字段属性对应方法
	 */
	public static String IS = "is";
	/**
	 * 是否增加属性列
	 */
	public static String IS_ADD_INDEX = "isAddIndex";
	/**
	 * 字段属性对应convert方法
	 */
	public static String CONVERT = "convert";

}


================================================
FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/export/ExcelBatchExportServer.java
================================================
package org.jeecgframework.poi.excel.export;
import org.apache.poi.ss.usermodel.Drawing;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.jeecgframework.poi.excel.annotation.ExcelTarget;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.enmus.ExcelType;
import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity;
import org.jeecgframework.poi.excel.entity.vo.PoiBaseConstants;
import org.jeecgframework.poi.excel.export.styler.IExcelExportStyler;
import org.jeecgframework.poi.exception.excel.ExcelExportException;
import org.jeecgframework.poi.exception.excel.enums.ExcelExportEnum;
import org.jeecgframework.poi.handler.inter.IExcelExportServer;
import org.jeecgframework.poi.handler.inter.IExcelExportServerEnhanced;
import org.jeecgframework.poi.handler.inter.IWriter;
import org.jeecgframework.poi.util.PoiExcelGraphDataUtil;
import org.jeecgframework.poi.util.PoiPublicUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.lang.reflect.Field;
import java.util.*;

import static  org.jeecgframework.poi.excel.ExcelExportUtil.USE_SXSSF_LIMIT;

/**
 * 提供批次插入服务
 * @author liusq
 * @date 2022年1月4日
 */
public class ExcelBatchExportServer extends ExcelExportServer implements IWriter<Workbook> {

	private final static Logger LOGGER = LoggerFactory.getLogger(ExcelBatchExportServer.class);

	private Workbook                workbook;
	private Sheet                   sheet;
	private List<ExcelExportEntity> excelParams;
	private ExportParams entity;
	private int                     titleHeight;
	private Drawing                 patriarch;
	private short                   rowHeight;
	private int                     index;

	public void init(ExportParams entity, Class<?> pojoClass) {
		List<ExcelExportEntity> excelParams = createExcelExportEntityList(entity, pojoClass);
		init(entity, excelParams);
	}

	/**
	 * 初始化数据
	 * @param entity  导出参数
	 * @param excelParams
	 */
	public void init(ExportParams entity, List<ExcelExportEntity> excelParams) {
		LOGGER.debug("ExcelBatchExportServer only support SXSSFWorkbook");
		entity.setType(ExcelType.XSSF);
		workbook = new SXSSFWorkbook();
		this.entity = entity;
		this.excelParams = excelParams;
		super.type = entity.getType();
		createSheet(workbook, entity, excelParams);
		if (entity.getMaxNum() == 0) {
			entity.setMaxNum(USE_SXSSF_LIMIT);
		}
		insertDataToSheet(workbook, entity, excelParams, null, sheet);
	}

	public List<ExcelExportEntity> createExcelExportEntityList(ExportParams entity, Class<?> pojoClass) {
		try {
			List<ExcelExportEntity> excelParams = new ArrayList<ExcelExportEntity>();
			if (entity.isAddIndex()) {
				excelParams.add(indexExcelEntity(entity));
			}
			// 得到所有字段
			Field[]     fileds   = PoiPublicUtil.getClassFields(pojoClass);
			ExcelTarget etarget  = pojoClass.getAnnotation(ExcelTarget.class);
			String      targetId = etarget == null ? null : etarget.value();
			getAllExcelField(entity.getExclusions(), targetId, fileds, excelParams, pojoClass,
					null);
			sortAllParams(excelParams);

			return excelParams;
		} catch (Exception e) {
			throw new ExcelExportException(ExcelExportEnum.EXPORT_ERROR, e);
		}
	}

	public void createSheet(Workbook workbook, ExportParams entity, List<ExcelExportEntity> excelParams) {
		if (LOGGER.isDebugEnabled()) {
			LOGGER.debug("Excel export start ,List<ExcelExportEntity> is {}", excelParams);
			LOGGER.debug("Excel version is {}",
					entity.getType().equals(ExcelType.HSSF) ? "03" : "07");
		}
		if (workbook == null || entity == null || excelParams == null) {
			throw new ExcelExportException(ExcelExportEnum.PARAMETER_ERROR);
		}
		try {
			try {
				sheet = workbook.createSheet(entity.getSheetName());
			} catch (Exception e) {
				// 重复遍历,出现了重名现象,创建非指定的名称Sheet
				sheet = workbook.createSheet();
			}
		} catch (Exception e) {
			throw new ExcelExportException(ExcelExportEnum.EXPORT_ERROR, e);
		}
	}

	@Override
	protected void insertDataToSheet(Workbook workbook, ExportParams entity,
									 List<ExcelExportEntity> entityList, Collection<? extends Map<?, ?>> dataSet,
									 Sheet sheet) {
		try {
			dataHanlder = entity.getDataHanlder();
			if (dataHanlder != null && dataHanlder.getNeedHandlerFields() != null) {
				needHanlderList = Arrays.asList(dataHanlder.getNeedHandlerFields());
			}
			// 创建表格样式
			setExcelExportStyler((IExcelExportStyler) entity.getStyle()
					.getConstructor(Workbook.class).newInstance(workbook));
			patriarch = PoiExcelGraphDataUtil.getDrawingPatriarch(sheet);
			List<ExcelExportEntity> excelParams = new ArrayList<ExcelExportEntity>();
			if (entity.isAddIndex()) {
				excelParams.add(indexExcelEntity(entity));
			}
			excelParams.addAll(entityList);
			sortAllParams(excelParams);
			this.index = entity.isCreateHeadRows()
					? createHeaderAndTitle(entity, sheet, workbook, excelParams) : 0;
			titleHeight = index;
			setCellWith(excelParams, sheet);
			setColumnHidden(excelParams, sheet);
			rowHeight = getRowHeight(excelParams);
			setCurrentIndex(1);
		} catch (Exception e) {
			LOGGER.error(e.getMessage(), e);
			throw new ExcelExportException(ExcelExportEnum.EXPORT_ERROR, e.getCause());
		}
	}

	public Workbook exportBigExcel(IExcelExportServer server, Object queryParams) {
		int page = 1;
		List<Object> list = server
				.selectListForExcelExport(queryParams, page++);
		while (list != null && list.size() > 0) {
			write(list);
			list = server.selectListForExcelExport(queryParams, page++);
		}
		return close();
	}

	/**
	 * 大数据导出 - 游标分页方式
	 * 推荐用于大数据量(20万+)导出,避免深分页性能问题
     * for [QQYUN-13964]演示系统数据量大,点击没反应
	 * 
	 * 实现原理:
	 * 1. 使用上一批次的最后一条记录作为查询起点
	 * 2. 避免 LIMIT offset, size 造成的性能衰减
	 * 3. 查询速度恒定,不会随着数据量增加而变慢
	 * 
	 * @param server 增强的查询服务
	 * @param queryParams 查询参数
	 * @return Workbook
	 */
	public <T> Workbook exportBigExcelEnhanced(IExcelExportServerEnhanced<T> server, Object queryParams) {
		int pageSize = server.getPageSize();
		T lastRecord = null;
		int totalCount = 0;
		
		List<T> list = server.selectListForExcelExport(queryParams, lastRecord, pageSize);
		while (list != null && list.size() > 0) {
			write(list);
			totalCount += list.size();
			// 记录最后一条记录,用于下次查询
			lastRecord = list.get(list.size() - 1);
			
			if (LOGGER.isDebugEnabled()) {
				LOGGER.debug("已导出 {} 条数据", totalCount);
			}
			
			// 如果返回的数据少于pageSize,说明已经是最后一批了
			if (list.size() < pageSize) {
				break;
			}
			
			list = server.selectListForExcelExport(queryParams, lastRecord, pageSize);
		}
		
		LOGGER.info("大数据导出完成,共导出 {} 条数据", totalCount);
		return close();
	}

	@Override
	public Workbook get() {
		return this.workbook;
	}

	@Override
	public IWriter<Workbook> write(Collection data) {
		if (sheet.getLastRowNum() + data.size() > entity.getMaxNum()) {
			sheet = workbook.createSheet();
			index = 0;
		}
		Iterator<?> its = data.iterator();
		while (its.hasNext()) {
			Object t = its.next();
			try {
				index += createCells(patriarch, index, t, excelParams, sheet, workbook, rowHeight, 0)[0];
			} catch (Exception e) {
				LOGGER.error(e.getMessage(), e);
				throw new ExcelExportException(ExcelExportEnum.EXPORT_ERROR, e);
			}
		}
		return this;
	}

	@Override
	public Workbook close() {
		if (entity.getFreezeCol() != 0) {
			sheet.createFreezePane(entity.getFreezeCol(), titleHeight, entity.getFreezeCol(), titleHeight);
		}
		mergeCells(sheet, excelParams, titleHeight);
		// 创建合计信息
		addStatisticsRow(getExcelExportStyler().getStyles(true, null), sheet);
		return workbook;
	}
	/**
	 * 添加Index列
	 */
	@Override
	public ExcelExportEntity indexExcelEntity(ExportParams entity) {
		ExcelExportEntity exportEntity = new ExcelExportEntity();
		//保证是第一排
		exportEntity.setOrderNum(Integer.MIN_VALUE);
		exportEntity.setNeedMerge(true);
		exportEntity.setName(entity.getIndexName());
		exportEntity.setWidth(10);
		exportEntity.setFormat(PoiBaseConstants.IS_ADD_INDEX);
		return exportEntity;
	}
}

================================================
FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/export/ExcelExportServer.java
================================================
/**
 * Copyright 2013-2015 JEECG (jeecgos@163.com)
 *   
 *  Licensed 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.jeecgframework.poi.excel.export;

import java.lang.reflect.Field;
import java.util.*;

import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.jeecgframework.poi.excel.annotation.ExcelTarget;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.enmus.ExcelType;
import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity;
import org.jeecgframework.poi.excel.entity.vo.PoiBaseConstants;
import org.jeecgframework.poi.excel.export.base.ExcelExportBase;
import org.jeecgframework.poi.excel.export.styler.IExcelExportStyler;
import org.jeecgframework.poi.exception.excel.ExcelExportException;
import org.jeecgframework.poi.exception.excel.enums.ExcelExportEnum;
import org.jeecgframework.poi.util.PoiExcelGraphDataUtil;
import org.jeecgframework.poi.util.PoiPublicUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * Excel导出服务
 * 
 * @author JEECG
 * @date 2014年6月17日 下午5:30:54
 */
public class ExcelExportServer extends ExcelExportBase {

	private final static Logger LOGGER = LoggerFactory.getLogger(ExcelExportServer.class);

	// 最大行数,超过自动多Sheet
	private int MAX_NUM = 60000;

	protected int createHeaderAndTitle(ExportParams entity, Sheet sheet, Workbook workbook, List<ExcelExportEntity> excelParams) {
		int rows = 0, feildWidth = getFieldWidth(excelParams);
		if (entity.getTitle() != null) {
			rows += createHeaderRow(entity, sheet, workbook, feildWidth);
		}
		rows += createTitleRow(entity, sheet, workbook, rows, excelParams);
		//update-begin---author:liusq  Date:20211217  for:[LOWCOD-2521]【autopoi】大数据导出方法【全局】----
		if (entity.isFixedTitle()) {
			sheet.createFreezePane(0, rows, 0, rows);
		}
		//update-begin---author:liusq  Date:20211217  for:[LOWCOD-2521]【autopoi】大数据导出方法【全局】----
		return rows;
	}

	/**
	 * 创建 表头改变
	 * 
	 * @param entity
	 * @param sheet
	 * @param workbook
	 * @param feildWidth
	 */
	public int createHeaderRow(ExportParams entity, Sheet sheet, Workbook workbook, int feildWidth) {
		Row row = sheet.createRow(0);
		row.setHeight(entity.getTitleHeight());
		createStringCell(row, 0, entity.getTitle(), getExcelExportStyler().getHeaderStyle(entity.getHeaderColor()), null);
		for (int i = 1; i <= feildWidth; i++) {
			createStringCell(row, i, "", getExcelExportStyler().getHeaderStyle(entity.getHeaderColor()), null);
		}
		//update-begin-author:wangshuai date:20201118 for:一对多导出needMerge 子表数据对应数量小于2时报错 github#1840、gitee I1YH6B
		try {
		sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, feildWidth));
		}catch (IllegalArgumentException e){
			LOGGER.error("合并单元格错误日志:"+e.getMessage());
			e.fillInStackTrace();
		}
		//update-end-author:wangshuai date:20201118 for:一对多导出needMerge 子表数据对应数量小于2时报错 github#1840、gitee I1YH6B
		if (entity.getSecondTitle() != null) {
			row = sheet.createRow(1);
			row.setHeight(entity.getSecondTitleHeight());
			//update-begin-author:liusq date:20230407 for:[issue/4342]autopoi导出带副标题的数据表,副标题缺左边框
			CellStyle style = getExcelExportStyler().getHeaderStyle(entity.getHeaderColor());
			style.setAlignment(HorizontalAlignment.RIGHT);
			//update-end-author:liusq date:20230407 for:[issue/4342]autopoi导出带副标题的数据表,副标题缺左边框
			createStringCell(row, 0, entity.getSecondTitle(), style, null);
			for (int i = 1; i <= feildWidth; i++) {
				createStringCell(row, i, "", getExcelExportStyler().getHeaderStyle(entity.getHeaderColor()), null);
			}
			//update-begin-author:wangshuai date:20201118 for:一对多导出needMerge 子表数据对应数量小于2时报错 github#1840、gitee I1YH6B
			try{
			sheet.addMergedRegion(new CellRangeAddress(1, 1, 0, feildWidth));
			}catch (IllegalArgumentException e){
				LOGGER.error("合并单元格错误日志:"+e.getMessage());
			  e.fillInStackTrace();
		  }
		  //update-end-author:wangshuai date:20201118 for:一对多导出needMerge 子表数据对应数量小于2时报错 github#1840、gitee I1YH6B
			return 2;
		}
		return 1;
	}

	public void createSheet(Workbook workbook, ExportParams entity, Class<?> pojoClass, Collection<?> dataSet, String[] exportFields) {
		if (LOGGER.isDebugEnabled()) {
			LOGGER.debug("Excel export start ,class is {}", pojoClass);
			LOGGER.debug("Excel version is {}", entity.getType().equals(ExcelType.HSSF) ? "03" : "07");
		}
		if (workbook == null || entity == null || pojoClass == null || dataSet == null) {
			throw new ExcelExportException(ExcelExportEnum.PARAMETER_ERROR);
		}
		super.type = entity.getType();
		if (type.equals(ExcelType.XSSF)) {
			MAX_NUM = 1000000;
		}
		Sheet sheet = null;
		try {
			sheet = workbook.createSheet(entity.getSheetName());
		} catch (Exception e) {
			// 重复遍历,出现了重名现象,创建非指定的名称Sheet
			sheet = workbook.createSheet();
		}
		try {
			dataHanlder = entity.getDataHanlder();
			if (dataHanlder != null) {
				String[] needHandlerFields = dataHanlder.getNeedHandlerFields();
				if(needHandlerFields!=null && needHandlerFields.length>0){
					needHanlderList = Arrays.asList(dataHanlder.getNeedHandlerFields());
				}
			}
			// 创建表格样式
			setExcelExportStyler((IExcelExportStyler) entity.getStyle().getConstructor(Workbook.class).newInstance(workbook));
			Drawing patriarch = sheet.createDrawingPatriarch();
			List<ExcelExportEntity> excelParams = new ArrayList<ExcelExportEntity>();
			if (entity.isAddIndex()) {
				excelParams.add(indexExcelEntity(entity));
			}
			// 得到所有字段
			Field fileds[] = PoiPublicUtil.getClassFields(pojoClass);

            //---update-begin-----autor:scott------date:20191016-------for:导出字段支持自定义--------
            //支持自定义导出字段
            if (exportFields != null) {
                List<Field> list = new ArrayList<Field>(Arrays.asList(fileds));
                for (int i = 0; i < list.size(); i++) {
                    if (!Arrays.asList(exportFields).contains(list.get(i).getName())) {
                        list.remove(i);
                        i--;
                    }
                }

                if (list != null && list.size() > 0) {
                    fileds = list.toArray(new Field[0]);
                } else {
                    fileds = null;
                }
            }
            //---update-end-----autor:scott------date:20191016-------for:导出字段支持自定义--------

			ExcelTarget etarget = pojoClass.getAnnotation(ExcelTarget.class);
			String targetId = etarget == null ? null : etarget.value();
			getAllExcelField(entity.getExclusions(), targetId, fileds, excelParams, pojoClass, null);
			//update-begin-author:liusq date:20251211 for:JHHB-1212【AutoPoi】导出时,支持动态生成Excel的列
			rebuildDynamicColumns(dataSet, excelParams);
			//update-end-author:liusq date:20251211 for:JHHB-1212【AutoPoi】导出时,支持动态生成Excel的列
			//update-begin-author:taoyan date:20200304 for:在此方法循环内设置一下图片磁盘目录,便于导出
			reConfigExcelExportParams(excelParams,entity);
			//update-end-author:taoyan date:20200304 for:在此方法循环内设置一下图片磁盘目录,便于导出
			int index = entity.isCreateHeadRows() ? createHeaderAndTitle(entity, sheet, workbook, excelParams) : 0;
			int titleHeight = index;
			setCellWith(excelParams, sheet);
			//update-begin-author:liusq date:20210723 for:设置隐藏列
			setColumnHidden(excelParams, sheet);
			//update-end-author:liusq date:20210723 for:设置隐藏列

			short rowHeight = getRowHeight(excelParams);
			setCurrentIndex(1);
			Iterator<?> its = dataSet.iterator();
			List<Object> tempList = new ArrayList<Object>();
			while (its.hasNext()) {
				Object t = its.next();
				index += createCells(patriarch, index, t, excelParams, sheet, workbook, rowHeight);
				tempList.add(t);
				if (index >= MAX_NUM)
					break;
			}
			mergeCells(sheet, excelParams, titleHeight);

			if (entity.getFreezeCol() != 0) {
				sheet.createFreezePane(entity.getFreezeCol(), 0, entity.getFreezeCol(), 0);
			}

			its = dataSet.iterator();
			for (int i = 0, le = tempList.size(); i < le; i++) {
				its.next();
				its.remove();
			}
			// 创建合计信息
			addStatisticsRow(getExcelExportStyler().getStyles(true, null), sheet);

			// 发现还有剩余list 继续循环创建Sheet
			if (dataSet.size() > 0) {
				createSheet(workbook, entity, pojoClass, dataSet,exportFields);
			}

		} catch (Exception e) {
			LOGGER.error(e.getMessage(), e);
			throw new ExcelExportException(ExcelExportEnum.EXPORT_ERROR, e);
		}
	}

	public void createSheetForMap(Workbook workbook, ExportParams entity, List<ExcelExportEntity> entityList, Collection<? extends Map<?, ?>> dataSet) {
		if (LOGGER.isDebugEnabled()) {
			LOGGER.debug("Excel version is {}", entity.getType().equals(ExcelType.HSSF) ? "03" : "07");
		}
		if (workbook == null || entity == null || entityList == null || dataSet == null) {
			throw new ExcelExportException(ExcelExportEnum.PARAMETER_ERROR);
		}
		super.type = entity.getType();
		if (type.equals(ExcelType.XSSF)) {
			MAX_NUM = 1000000;
		}
		Sheet sheet = null;
		try {
			sheet = workbook.createSheet(entity.getSheetName());
		} catch (Exception e) {
			// 重复遍历,出现了重名现象,创建非指定的名称Sheet
			sheet = workbook.createSheet();
		}
		try {
			dataHanlder = entity.getDataHanlder();
			if (dataHanlder != null) {
				needHanlderList = Arrays.asList(dataHanlder.getNeedHandlerFields());
			}
			// 创建表格样式
			setExcelExportStyler((IExcelExportStyler) entity.getStyle().getConstructor(Workbook.class).newInstance(workbook));
			Drawing patriarch = sheet.createDrawingPatriarch();
			List<ExcelExportEntity> excelParams = new ArrayList<ExcelExportEntity>();
			if (entity.isAddIndex()) {
				excelParams.add(indexExcelEntity(entity));
			}
			excelParams.addAll(entityList);
			//update-begin-author:liusq date:20251211 for:JHHB-1212【AutoPoi】导出时,支持动态生成Excel的列
			rebuildDynamicColumns(dataSet, excelParams);
			//update-end-author:liusq date:20251211 for:JHHB-1212【AutoPoi】导出时,支持动态生成Excel的列
			sortAllParams(excelParams);
			int index = entity.isCreateHeadRows() ? createHeaderAndTitle(entity, sheet, workbook, excelParams) : 0;
			int titleHeight = index;
			setCellWith(excelParams, sheet);
			//update-begin-author:liusq date:20210723 for:设置隐藏列
			setColumnHidden(excelParams, sheet);
			//update-end-author:liusq date:20210723 for:设置隐藏列
			short rowHeight = getRowHeight(excelParams);
			setCurrentIndex(1);
			Iterator<?> its = dataSet.iterator();
			List<Object> tempList = new ArrayList<Object>();
			while (its.hasNext()) {
				Object t = its.next();
				index += createCells(patriarch, index, t, excelParams, sheet, workbook, rowHeight);
				tempList.add(t);
				if (index >= MAX_NUM)
					break;
			}
			if (entity.getFreezeCol() != 0) {
				sheet.createFreezePane(entity.getFreezeCol(), 0, entity.getFreezeCol(), 0);
			}

			mergeCells(sheet, excelParams, titleHeight);

			its = dataSet.iterator();
			for (int i = 0, le = tempList.size(); i < le; i++) {
				its.next();
				its.remove();
			}
			// 发现还有剩余list 继续循环创建Sheet
			if (dataSet.size() > 0) {
				createSheetForMap(workbook, entity, entityList, dataSet);
			}

		} catch (Exception e) {
			LOGGER.error(e.getMessage(), e);
			e.printStackTrace(); // 添加打印完整堆栈信息
			throw new ExcelExportException(ExcelExportEnum.EXPORT_ERROR, e);
		}
	}

	/**
	 * 创建表头
	 * 
	 * @param title
	 * @param index
	 */
	private int createTitleRow(ExportParams title, Sheet sheet, Workbook workbook, int index, List<ExcelExportEntity> excelParams) {
		Row row = sheet.createRow(index);
		int rows = getRowNums(excelParams);
		row.setHeight((short) 450);
		Row listRow = null;
		if (rows == 2) {
			listRow = sheet.createRow(index + 1);
			listRow.setHeight((short) 450);
		}
		int cellIndex = 0;
		CellStyle titleStyle = getExcelExportStyler().getTitleStyle(title.getColor());
		for (int i = 0, exportFieldTitleSize = excelParams.size(); i < exportFieldTitleSize; i++) {
			ExcelExportEntity entity = excelParams.get(i);
			//update-begin-author:taoyan date:20200319 for:建议autoPoi升级,优化数据返回List Map格式下的复合表头导出excel的体验 #873
			if(entity.isColspan()){
				List<String> subList = entity.getSubColumnList();
				if(subList==null || subList.size()==0){
					continue;
				}else{
					entity.initSubExportEntity(excelParams);
				}
			}
			//update-end-author:taoyan date:20200319 for:建议autoPoi升级,优化数据返回List Map格式下的复合表头导出excel的体验 #873
			if (StringUtils.isNotBlank(entity.getName())) {
				createStringCell(row, cellIndex, entity.getName(), titleStyle, entity);
			}
			if (entity.getList() != null) {
				List<ExcelExportEntity> sTitel = entity.getList();
				 //update-begin-author:wangshuai date:20201118 for:一对多导出needMerge 子表数据对应数量小于2时报错 github#1840、gitee I1YH6B
				if (StringUtils.isNotBlank(entity.getName())) {
					try {
					sheet.addMergedRegion(new CellRangeAddress(index, index, cellIndex, cellIndex + sTitel.size() - 1));
					}catch (IllegalArgumentException e){
						LOGGER.error("合并单元格错误日志:"+e.getMessage());
						e.fillInStackTrace();
					}
					//update-end-author:wangshuai date:20201118 for:一对多导出needMerge 子表数据对应数量小于2时报错 github#1840、gitee I1YH6B
				}
				for (int j = 0, size = sTitel.size(); j < size; j++) {
					createStringCell(rows == 2 ? listRow : row, cellIndex, sTitel.get(j).getName(), titleStyle, entity);
					cellIndex++;
				}
				cellIndex--;
			} else if (rows == 2) {
				createStringCell(listRow, cellIndex, "", titleStyle, entity);
				//update-begin-author:wangshuai date:20201118 for:一对多导出needMerge 子表数据对应数量小于2时报错 github#1840、gitee I1YH6B
				try{
				sheet.addMergedRegion(new CellRangeAddress(index, index + 1, cellIndex, cellIndex));
				}catch (IllegalArgumentException e){
					LOGGER.error("合并单元格错误日志:"+e.getMessage());
					e.fillInStackTrace();
				}
				//update-end-author:wangshuai date:20201118 for:一对多导出needMerge 子表数据对应数量小于2时报错 github#1840、gitee I1YH6B
			}
			cellIndex++;
		}
		return rows;

	}

	/**
	 * 判断表头是只有一行还是两行
	 * 
	 * @param excelParams
	 * @return
	 */
	private int getRowNums(List<ExcelExportEntity> excelParams) {
		for (int i = 0; i < excelParams.size(); i++) {
			//update-begin-author:taoyan date:20200319 for:建议autoPoi升级,优化数据返回List Map格式下的复合表头导出excel的体验 #873
			ExcelExportEntity temp = excelParams.get(i);
			if ((temp.getList() != null || temp.isColspan()) && StringUtils.isNotBlank(temp.getName())) {
				return 2;
			}
			//update-end-author:taoyan date:20200319 for:建议autoPoi升级,优化数据返回List Map格式下的复合表头导出excel的体验 #873
		}
		return 1;
	}

	protected ExcelExportEntity indexExcelEntity(ExportParams entity) {
		ExcelExportEntity exportEntity = new ExcelExportEntity();
		exportEntity.setOrderNum(0);
		exportEntity.setName(entity.getIndexName());
		exportEntity.setWidth(10);
		exportEntity.setFormat(PoiBaseConstants.IS_ADD_INDEX);
		return exportEntity;
	}
   //update-begin---author:liusq  Date:20211217  for:[LOWCOD-2521]【autopoi】大数据导出方法【全局】----
	/**
	 * 添加数据到sheet
	 * @param workbook
	 * @param entity 导出参数
	 * @param entityList
	 * @param dataSet 导出数据
	 * @param sheet
	 * @date 2022年1月4号
	 */
	protected void insertDataToSheet(Workbook workbook, ExportParams entity,
									 List<ExcelExportEntity> entityList,Collection<? extends Map<?, ?>> dataSet,
									 Sheet sheet) {
		try {
			dataHanlder = entity.getDataHanlder();
			if (dataHanlder != null && dataHanlder.getNeedHandlerFields() != null) {
				needHanlderList = Arrays.asList(dataHanlder.getNeedHandlerFields());
			}
			// 创建表格样式
			setExcelExportStyler((IExcelExportStyler) entity.getStyle()
					.getConstructor(Workbook.class).newInstance(workbook));
			Drawing                 patriarch   = PoiExcelGraphDataUtil.getDrawingPatriarch(sheet);
			List<ExcelExportEntity> excelParams = new ArrayList<ExcelExportEntity>();
			if (entity.isAddIndex()) {
				excelParams.add(indexExcelEntity(entity));
			}
			excelParams.addAll(entityList);
			//update-begin-author:liusq date:20251211 for:JHHB-1212【AutoPoi】导出时,支持动态生成Excel的列
			rebuildDynamicColumns(dataSet, excelParams);
			//update-end-author:liusq date:20251211 for:JHHB-1212【AutoPoi】导出时,支持动态生成Excel的列
			sortAllParams(excelParams);
			int index = entity.isCreateHeadRows()
					? createHeaderAndTitle(entity, sheet, workbook, excelParams) : 0;
			int titleHeight = index;
			setCellWith(excelParams, sheet);
			setColumnHidden(excelParams, sheet);
			short rowHeight = entity.getHeight() != 0 ? entity.getHeight() : getRowHeight(excelParams);
			setCurrentIndex(1);
			Iterator<?>  its      = dataSet.iterator();
			List<Object> tempList = new ArrayList<Object>();
			while (its.hasNext()) {
				Object t = its.next();
				index += createCells(patriarch, index, t, excelParams, sheet, workbook, rowHeight, 0)[0];
				tempList.add(t);
				if (index >= MAX_NUM) {
					break;
				}
			}
			if (entity.getFreezeCol() != 0) {
				sheet.createFreezePane(entity.getFreezeCol(), 0, entity.getFreezeCol(), 0);
			}

			mergeCells(sheet, excelParams, titleHeight);

			its = dataSet.iterator();
			for (int i = 0, le = tempList.size(); i < le; i++) {
				its.next();
				its.remove();
			}
			if (LOGGER.isDebugEnabled()) {
				LOGGER.debug("List data more than max ,data size is {}",
						dataSet.size());
			}
			// 发现还有剩余list 继续循环创建Sheet
			if (dataSet.size() > 0) {
				createSheetForMap(workbook, entity, entityList, dataSet);
			} else {
				// 创建合计信息
				addStatisticsRow(getExcelExportStyler().getStyles(true, null), sheet);
			}

		} catch (Exception e) {
			LOGGER.error(e.getMessage(), e);
			e.printStackTrace(); // 添加打印完整堆栈信息
			throw new ExcelExportException(ExcelExportEnum.EXPORT_ERROR, e);
		}
	}
   //update-end---author:liusq  Date:20211217  for:[LOWCOD-2521]【autopoi】大数据导出方法【全局】----
}


================================================
FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/export/base/ExcelExportBase.java
================================================
/**
 * Copyright 2013-2015 JEECG (jeecgos@163.com)
 *   
 *  Licensed 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.jeecgframework.poi.excel.export.base;

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
import org.apache.poi.xssf.usermodel.XSSFRichTextString;
import org.jeecgframework.poi.excel.entity.enmus.ExcelType;
import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity;
import org.jeecgframework.poi.excel.entity.vo.PoiBaseConstants;
import org.jeecgframework.poi.excel.export.styler.IExcelExportStyler;
import org.jeecgframework.poi.exception.excel.ExcelExportException;
import org.jeecgframework.poi.exception.excel.enums.ExcelExportEnum;
import org.jeecgframework.poi.util.MyX509TrustManager;
import org.jeecgframework.poi.util.PoiMergeCellUtil;
import org.jeecgframework.poi.util.PoiPublicUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.imageio.ImageIO;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.SecureRandom;
import java.text.DecimalFormat;
import java.util.*;

/**
 * 提供POI基础操作服务
 * 
 * @author JEECG
 * @date 2014年6月17日 下午6:15:13
 */
public abstract class ExcelExportBase extends ExportBase {

	private static final Logger LOGGER = LoggerFactory.getLogger(ExcelExportBase.class);

	private int currentIndex = 0;

	protected ExcelType type = ExcelType.HSSF;

	private Map<Integer, Double> statistics = new HashMap<Integer, Double>();

	private static final DecimalFormat DOUBLE_FORMAT = new DecimalFormat("######0.00");

	/**
	 * 常规格式的内置格式标识符
	 *  for [issues/8248]AutoPOI导出的单元格格式建议加一个常规类型 #8248
	 */
	private static final short GENERAL_FORMAT = (short)BuiltinFormats.getBuiltinFormat("General");

	/**
	 * 单元格样式缓存
	 * for [issues/8248]AutoPOI导出的单元格格式建议加一个常规类型 #8248
	 */
	private final Map<String, CellStyle> cellStyleMap = new HashMap<>();

	//update-begin-author:liusq---date:20220527--for: 修改成protected,列循环时继承类需要用到 ---
	protected IExcelExportStyler excelExportStyler;
    //update-end-author:liusq---date:20220527--for: 修改成protected,列循环时继承类需要用到 ---


	/**
	 * 创建 最主要的 Cells
	 * 
	 * @param styles
	 * @param rowHeight
	 * @throws Exception
	 */
	public int createCells(Drawing patriarch, int index, Object t, List<ExcelExportEntity> excelParams, Sheet sheet, Workbook workbook, short rowHeight) throws Exception {
		ExcelExportEntity entity;
		Row row = sheet.createRow(index);
		DataFormat df = workbook.createDataFormat();
		row.setHeight(rowHeight);
		int maxHeight = 1, cellNum = 0;
		int indexKey = createIndexCell(row, index, excelParams.get(0));
		cellNum += indexKey;
		for (int k = indexKey, paramSize = excelParams.size(); k < paramSize; k++) {
			entity = excelParams.get(k);
			//update-begin-author:taoyan date:20200319 for:建议autoPoi升级,优化数据返回List Map格式下的复合表头导出excel的体验 #873
			if(entity.isSubColumn()){
				continue;
			}
			if(entity.isMergeColumn()){
				Map<String,Object> subColumnMap = new HashMap<>();
				List<String> mapKeys = entity.getSubColumnList();
				for (String subKey : mapKeys) {
					Object subKeyValue = null;
					if (t instanceof Map) {
						subKeyValue = ((Map<?, ?>) t).get(subKey);
					}else{
						subKeyValue = PoiPublicUtil.getParamsValue(subKey,t);
					}
					subColumnMap.put(subKey,subKeyValue);
				}
				createListCells(patriarch, index, cellNum, subColumnMap, entity.getList(), sheet, workbook);
				cellNum += entity.getSubColumnList().size();
			//update-end-author:taoyan date:20200319 for:建议autoPoi升级,优化数据返回List Map格式下的复合表头导出excel的体验 #873
			} else if (entity.getList() != null) {
				Collection<?> list = getListCellValue(entity, t);
				int listC = 0;
				for (Object obj : list) {
					createListCells(patriarch, index + listC, cellNum, obj, entity.getList(), sheet, workbook);
					listC++;
				}
				cellNum += entity.getList().size();
				if (list != null && list.size() > maxHeight) {
					maxHeight = list.size();
				}
			} else {
				Object value = getCellValue(entity, t);
				//update-begin--Author:xuelin  Date:20171018 for:TASK #2372 【excel】AutoPoi 导出类型,type增加数字类型--------------------
				if (entity.getType() == 1) {
					createStringCell(row, cellNum++, value == null ? "" : value.toString(), index % 2 == 0 ? getStyles(false, entity) : getStyles(true, entity), entity);
				} else if (entity.getType() == 4){
					createNumericCell(row, cellNum++, value == null ? "" : value.toString(), getNumberCellStyle(index, df, entity), entity);
				} else if (entity.getType() == 0) {
					//update-begin---author:chenrui ---date:20250604  for:[issues/8248]AutoPOI导出的单元格格式建议加一个常规类型 #8248------------
					createStringCell(row, cellNum++, value == null ? "" : value.toString(), getGeneralCellStyle(index, workbook,entity), entity);
					//update-end---author:chenrui ---date:20250604  for:[issues/8248]AutoPOI导出的单元格格式建议加一个常规类型 #8248------------
				} else {
					createImageCell(patriarch, entity, row, cellNum++, value == null ? "" : value.toString(), t);
				}
				//update-end--Author:xuelin  Date:20171018 for:TASK #2372 【excel】AutoPoi 导出类型,type增加数字类型--------------------

				//update-begin-author:liusq---date:20220728--for:[issues/I5I840] @Excel注解中不支持超链接,但文档中支持 ---
				if (entity.isHyperlink()) {
					row.getCell(cellNum - 1)
							.setHyperlink(dataHanlder.getHyperlink(
									row.getSheet().getWorkbook().getCreationHelper(), t,
									entity.getName(), value));
				}
               //update-end-author:liusq---date:20220728--for:[issues/I5I840] @Excel注解中不支持超链接,但文档中支持 ---
			}
		}
		// 合并需要合并的单元格
		cellNum = 0;
		for (int k = indexKey, paramSize = excelParams.size(); k < paramSize; k++) {
			entity = excelParams.get(k);
			if (entity.getList() != null) {
				cellNum += entity.getList().size();
			} else if (entity.isNeedMerge()) {
				for (int i = index + 1; i < index + maxHeight; i++) {
					sheet.getRow(i).createCell(cellNum);
					sheet.getRow(i).getCell(cellNum).setCellStyle(getStyles(false, entity));
				}
				//update-begin-author:wangshuai date:20201116 for:一对多导出needMerge 子表数据对应数量小于2时报错 github#1840、gitee I1YH6B
				try {
					if (maxHeight > 1) {
						sheet.addMergedRegion(new CellRangeAddress(index, index + maxHeight - 1, cellNum, cellNum));
					}
				}catch (IllegalArgumentException e){
					LOGGER.error("合并单元格错误日志:"+e.getMessage());
					e.fillInStackTrace();
				}
				//update-end-author:wangshuai date:20201116 for:一对多导出needMerge 子表数据对应数量小于2时报错 github#1840、gitee I1YH6B
				cellNum++;
			}
		}
		return maxHeight;

	}

	/**
	 * 获取数值单元格样式
	 * @param index
	 * @param df
	 * @param entity
	 * @return
	 */
	private CellStyle getNumberCellStyle(int index,DataFormat df, ExcelExportEntity entity) {
       //update-begin-author:liusq---date:2023-12-07--for: [issues/5538]导出表格设置了数字格式导出之后仍然是文本格式,并且无法进行计算
		CellStyle cellStyle = index % 2 == 0 ? getStyles(false, entity) : getStyles(true, entity);
		String numFormat = StringUtils.isNotBlank(entity.getNumFormat())? entity.getNumFormat():"0.00_ ";
		cellStyle.setDataFormat(df.getFormat(numFormat));
		return cellStyle;
		//update-end-author:liusq---date:2023-12-07--for:[issues/5538]导出表格设置了数字格式导出之后仍然是文本格式,并且无法进行计算
	}

	/**
	 * 获取常规单元格样式
	 * for [issues/8248]AutoPOI导出的单元格格式建议加一个常规类型 #8248
	 * @param index
	 * @param workbook
	 * @param entity
	 * @return
	 * @author chenrui
	 * @date 2025/6/4 17:40
	 */
	private CellStyle getGeneralCellStyle(int index, Workbook workbook, ExcelExportEntity entity) {
		String cellStyleKey = index % 2 == 0 ? "twoGeneral" : "oneGeneral";
		if (this.cellStyleMap.containsKey(cellStyleKey)) {
			return this.cellStyleMap.get(cellStyleKey);
		}
		C
Download .txt
gitextract_0g1d_hnq/

├── .gitattributes
├── .gitignore
├── LICENSE
├── POI_5升级说明.md
├── README.md
├── README.zh-CN.md
├── autopoi/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── org/
│       │           └── jeecgframework/
│       │               ├── core/
│       │               │   └── util/
│       │               │       └── ApplicationContextUtil.java
│       │               ├── dict/
│       │               │   └── service/
│       │               │       └── AutoPoiDictServiceI.java
│       │               └── poi/
│       │                   ├── cache/
│       │                   │   ├── ExcelCache.java
│       │                   │   ├── ImageCache.java
│       │                   │   ├── WordCache.java
│       │                   │   ├── manager/
│       │                   │   │   ├── FileLoade.java
│       │                   │   │   └── POICacheManager.java
│       │                   │   └── package-info.java
│       │                   ├── consts/
│       │                   │   └── ImageScaleMode.java
│       │                   ├── entity/
│       │                   │   └── ImageEntity.java
│       │                   ├── excel/
│       │                   │   ├── ExcelExportUtil.java
│       │                   │   ├── ExcelImportCheckUtil.java
│       │                   │   ├── ExcelImportUtil.java
│       │                   │   ├── ExcelToHtmlUtil.java
│       │                   │   ├── annotation/
│       │                   │   │   ├── Excel.java
│       │                   │   │   ├── ExcelCollection.java
│       │                   │   │   ├── ExcelEntity.java
│       │                   │   │   ├── ExcelIgnore.java
│       │                   │   │   ├── ExcelTarget.java
│       │                   │   │   └── ExcelVerify.java
│       │                   │   ├── entity/
│       │                   │   │   ├── ExcelBaseParams.java
│       │                   │   │   ├── ExportParams.java
│       │                   │   │   ├── ImportParams.java
│       │                   │   │   ├── TemplateExportParams.java
│       │                   │   │   ├── enmus/
│       │                   │   │   │   ├── CellValueType.java
│       │                   │   │   │   ├── ExcelStyleType.java
│       │                   │   │   │   └── ExcelType.java
│       │                   │   │   ├── params/
│       │                   │   │   │   ├── ExcelBaseEntity.java
│       │                   │   │   │   ├── ExcelCollectionParams.java
│       │                   │   │   │   ├── ExcelExportEntity.java
│       │                   │   │   │   ├── ExcelForEachParams.java
│       │                   │   │   │   ├── ExcelImportEntity.java
│       │                   │   │   │   ├── ExcelTemplateParams.java
│       │                   │   │   │   ├── ExcelVerifyEntity.java
│       │                   │   │   │   └── MergeEntity.java
│       │                   │   │   ├── result/
│       │                   │   │   │   ├── ExcelImportResult.java
│       │                   │   │   │   └── ExcelVerifyHanlderResult.java
│       │                   │   │   ├── sax/
│       │                   │   │   │   └── SaxReadCellEntity.java
│       │                   │   │   └── vo/
│       │                   │   │       └── PoiBaseConstants.java
│       │                   │   ├── export/
│       │                   │   │   ├── ExcelBatchExportServer.java
│       │                   │   │   ├── ExcelExportServer.java
│       │                   │   │   ├── base/
│       │                   │   │   │   ├── ExcelExportBase.java
│       │                   │   │   │   └── ExportBase.java
│       │                   │   │   ├── styler/
│       │                   │   │   │   ├── AbstractExcelExportStyler.java
│       │                   │   │   │   ├── ExcelExportStylerBorderImpl.java
│       │                   │   │   │   ├── ExcelExportStylerColorImpl.java
│       │                   │   │   │   ├── ExcelExportStylerDefaultImpl.java
│       │                   │   │   │   └── IExcelExportStyler.java
│       │                   │   │   └── template/
│       │                   │   │       └── ExcelExportOfTemplateUtil.java
│       │                   │   ├── graph/
│       │                   │   │   ├── builder/
│       │                   │   │   │   └── ExcelChartBuildService.java
│       │                   │   │   ├── constant/
│       │                   │   │   │   ├── ExcelGraphElementType.java
│       │                   │   │   │   └── ExcelGraphType.java
│       │                   │   │   ├── entity/
│       │                   │   │   │   ├── ExcelGraph.java
│       │                   │   │   │   ├── ExcelGraphDefined.java
│       │                   │   │   │   ├── ExcelGraphElement.java
│       │                   │   │   │   └── ExcelTitleCell.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── html/
│       │                   │   │   ├── ExcelToHtmlServer.java
│       │                   │   │   └── helper/
│       │                   │   │       ├── CellValueHelper.java
│       │                   │   │       ├── MergedRegionHelper.java
│       │                   │   │       ├── StylerHelper.java
│       │                   │   │       └── excelStyle.css
│       │                   │   └── imports/
│       │                   │       ├── CellValueServer.java
│       │                   │       ├── ExcelImportServer.java
│       │                   │       ├── base/
│       │                   │       │   ├── ImportBaseService.java
│       │                   │       │   └── ImportFileServiceI.java
│       │                   │       ├── package-info.java
│       │                   │       ├── sax/
│       │                   │       │   ├── SaxReadExcel.java
│       │                   │       │   ├── SheetHandler.java
│       │                   │       │   └── parse/
│       │                   │       │       ├── ISaxRowRead.java
│       │                   │       │       └── SaxRowRead.java
│       │                   │       └── verifys/
│       │                   │           ├── BaseVerifyHandler.java
│       │                   │           └── VerifyHandlerServer.java
│       │                   ├── exception/
│       │                   │   ├── excel/
│       │                   │   │   ├── ExcelExportException.java
│       │                   │   │   ├── ExcelImportException.java
│       │                   │   │   └── enums/
│       │                   │   │       ├── ExcelExportEnum.java
│       │                   │   │       └── ExcelImportEnum.java
│       │                   │   └── word/
│       │                   │       ├── WordExportException.java
│       │                   │       └── enmus/
│       │                   │           └── WordExportEnum.java
│       │                   ├── handler/
│       │                   │   ├── impl/
│       │                   │   │   ├── ExcelDataHandlerDefaultImpl.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── inter/
│       │                   │   │   ├── IExcelDataHandler.java
│       │                   │   │   ├── IExcelDictHandler.java
│       │                   │   │   ├── IExcelExportServer.java
│       │                   │   │   ├── IExcelExportServerEnhanced.java
│       │                   │   │   ├── IExcelReadRowHanlder.java
│       │                   │   │   ├── IExcelVerifyHandler.java
│       │                   │   │   └── IWriter.java
│       │                   │   └── package-info.java
│       │                   ├── package-info.java
│       │                   ├── util/
│       │                   │   ├── ExcelUtil.java
│       │                   │   ├── JsonParser.java
│       │                   │   ├── MyX509TrustManager.java
│       │                   │   ├── PoiCellUtil.java
│       │                   │   ├── PoiElUtil.java
│       │                   │   ├── PoiExcelGraphDataUtil.java
│       │                   │   ├── PoiExcelTempUtil.java
│       │                   │   ├── PoiFunctionUtil.java
│       │                   │   ├── PoiMergeCellUtil.java
│       │                   │   ├── PoiPublicUtil.java
│       │                   │   ├── PoiReflectorUtil.java
│       │                   │   └── PoiSheetUtility.java
│       │                   └── word/
│       │                       ├── WordExportUtil.java
│       │                       ├── entity/
│       │                       │   ├── MyXWPFDocument.java
│       │                       │   ├── WordImageEntity.java
│       │                       │   └── params/
│       │                       │       ├── ExcelListEntity.java
│       │                       │       └── ListParamEntity.java
│       │                       └── parse/
│       │                           ├── ParseWord07.java
│       │                           └── excel/
│       │                               ├── ExcelEntityParse.java
│       │                               └── ExcelMapParse.java
│       └── test/
│           ├── java/
│           │   ├── DaoChuBigDataTest.java
│           │   ├── DaoChuSheetTest.java
│           │   ├── DaoChuTest.java
│           │   ├── DaoChuWordTest.java
│           │   ├── ExcelToHtmlTest.java
│           │   ├── ImportExcelTest.java
│           │   ├── Poi541ApiCompatibilityTest.java
│           │   ├── Poi541ComprehensiveTest.java
│           │   ├── TestImageScale.java
│           │   └── vo/
│           │       ├── TestDateEntity.java
│           │       └── TestEntity.java
│           └── resources/
│               └── templates/
│                   ├── ExcelImportDateTest.xlsx
│                   ├── test.xlsx
│                   ├── testImageScale.xlsx
│                   ├── testNextMarge.xlsx
│                   ├── 专项支出用款申请书.xls
│                   └── 纳税信息.docx
├── autopoi-spring-boot-2-starter/
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               └── org/
│                   └── jeecgframework/
│                       └── poi/
│                           └── excel/
│                               ├── def/
│                               │   ├── BasePOIConstants.java
│                               │   ├── MapExcelConstants.java
│                               │   ├── NormalExcelConstants.java
│                               │   ├── TemplateExcelConstants.java
│                               │   └── TemplateWordConstants.java
│                               └── view/
│                                   ├── JeecgEntityExcelView.java
│                                   ├── JeecgMapExcelView.java
│                                   ├── JeecgTemplateExcelView.java
│                                   ├── JeecgTemplateWordView.java
│                                   └── MiniAbstractExcelView.java
├── autopoi-spring-boot-3-starter/
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               └── org/
│                   └── jeecgframework/
│                       └── poi/
│                           └── excel/
│                               ├── def/
│                               │   ├── BasePOIConstants.java
│                               │   ├── MapExcelConstants.java
│                               │   ├── NormalExcelConstants.java
│                               │   ├── TemplateExcelConstants.java
│                               │   └── TemplateWordConstants.java
│                               └── view/
│                                   ├── JeecgEntityExcelView.java
│                                   ├── JeecgMapExcelView.java
│                                   ├── JeecgTemplateExcelView.java
│                                   ├── JeecgTemplateWordView.java
│                                   └── MiniAbstractExcelView.java
├── deploy.bat
├── docs/
│   └── 修改日志.log
├── install.bat
├── pom.xml
└── 打包构建.md
Download .txt
SYMBOL INDEX (1072 symbols across 128 files)

FILE: autopoi-spring-boot-2-starter/src/main/java/org/jeecgframework/poi/excel/def/BasePOIConstants.java
  type BasePOIConstants (line 24) | interface BasePOIConstants {

FILE: autopoi-spring-boot-2-starter/src/main/java/org/jeecgframework/poi/excel/def/MapExcelConstants.java
  type MapExcelConstants (line 23) | public interface MapExcelConstants extends BasePOIConstants {

FILE: autopoi-spring-boot-2-starter/src/main/java/org/jeecgframework/poi/excel/def/NormalExcelConstants.java
  type NormalExcelConstants (line 23) | public interface NormalExcelConstants extends BasePOIConstants {

FILE: autopoi-spring-boot-2-starter/src/main/java/org/jeecgframework/poi/excel/def/TemplateExcelConstants.java
  type TemplateExcelConstants (line 24) | public interface TemplateExcelConstants extends BasePOIConstants {

FILE: autopoi-spring-boot-2-starter/src/main/java/org/jeecgframework/poi/excel/def/TemplateWordConstants.java
  type TemplateWordConstants (line 24) | public interface TemplateWordConstants extends BasePOIConstants {

FILE: autopoi-spring-boot-2-starter/src/main/java/org/jeecgframework/poi/excel/view/JeecgEntityExcelView.java
  class JeecgEntityExcelView (line 41) | @SuppressWarnings("unchecked")
    method JeecgEntityExcelView (line 45) | public JeecgEntityExcelView() {
    method renderMergedOutputModel (line 49) | @Override

FILE: autopoi-spring-boot-2-starter/src/main/java/org/jeecgframework/poi/excel/view/JeecgMapExcelView.java
  class JeecgMapExcelView (line 40) | @SuppressWarnings("unchecked")
    method JeecgMapExcelView (line 44) | public JeecgMapExcelView() {
    method renderMergedOutputModel (line 48) | @Override

FILE: autopoi-spring-boot-2-starter/src/main/java/org/jeecgframework/poi/excel/view/JeecgTemplateExcelView.java
  class JeecgTemplateExcelView (line 39) | @SuppressWarnings("unchecked")
    method JeecgTemplateExcelView (line 43) | public JeecgTemplateExcelView() {
    method renderMergedOutputModel (line 47) | @Override

FILE: autopoi-spring-boot-2-starter/src/main/java/org/jeecgframework/poi/excel/view/JeecgTemplateWordView.java
  class JeecgTemplateWordView (line 36) | @SuppressWarnings("unchecked")
    method JeecgTemplateWordView (line 42) | public JeecgTemplateWordView() {
    method isIE (line 46) | public boolean isIE(HttpServletRequest request) {
    method renderMergedOutputModel (line 50) | @Override

FILE: autopoi-spring-boot-2-starter/src/main/java/org/jeecgframework/poi/excel/view/MiniAbstractExcelView.java
  class MiniAbstractExcelView (line 28) | public abstract class MiniAbstractExcelView extends AbstractView {
    method MiniAbstractExcelView (line 35) | public MiniAbstractExcelView() {
    method isIE (line 39) | protected boolean isIE(HttpServletRequest request) {

FILE: autopoi-spring-boot-3-starter/src/main/java/org/jeecgframework/poi/excel/def/BasePOIConstants.java
  type BasePOIConstants (line 24) | interface BasePOIConstants {

FILE: autopoi-spring-boot-3-starter/src/main/java/org/jeecgframework/poi/excel/def/MapExcelConstants.java
  type MapExcelConstants (line 23) | public interface MapExcelConstants extends BasePOIConstants {

FILE: autopoi-spring-boot-3-starter/src/main/java/org/jeecgframework/poi/excel/def/NormalExcelConstants.java
  type NormalExcelConstants (line 23) | public interface NormalExcelConstants extends BasePOIConstants {

FILE: autopoi-spring-boot-3-starter/src/main/java/org/jeecgframework/poi/excel/def/TemplateExcelConstants.java
  type TemplateExcelConstants (line 24) | public interface TemplateExcelConstants extends BasePOIConstants {

FILE: autopoi-spring-boot-3-starter/src/main/java/org/jeecgframework/poi/excel/def/TemplateWordConstants.java
  type TemplateWordConstants (line 24) | public interface TemplateWordConstants extends BasePOIConstants {

FILE: autopoi-spring-boot-3-starter/src/main/java/org/jeecgframework/poi/excel/view/JeecgEntityExcelView.java
  class JeecgEntityExcelView (line 41) | @SuppressWarnings("unchecked")
    method JeecgEntityExcelView (line 45) | public JeecgEntityExcelView() {
    method renderMergedOutputModel (line 49) | @Override

FILE: autopoi-spring-boot-3-starter/src/main/java/org/jeecgframework/poi/excel/view/JeecgMapExcelView.java
  class JeecgMapExcelView (line 40) | @SuppressWarnings("unchecked")
    method JeecgMapExcelView (line 44) | public JeecgMapExcelView() {
    method renderMergedOutputModel (line 48) | @Override

FILE: autopoi-spring-boot-3-starter/src/main/java/org/jeecgframework/poi/excel/view/JeecgTemplateExcelView.java
  class JeecgTemplateExcelView (line 39) | @SuppressWarnings("unchecked")
    method JeecgTemplateExcelView (line 43) | public JeecgTemplateExcelView() {
    method renderMergedOutputModel (line 47) | @Override

FILE: autopoi-spring-boot-3-starter/src/main/java/org/jeecgframework/poi/excel/view/JeecgTemplateWordView.java
  class JeecgTemplateWordView (line 36) | @SuppressWarnings("unchecked")
    method JeecgTemplateWordView (line 42) | public JeecgTemplateWordView() {
    method isIE (line 46) | public boolean isIE(HttpServletRequest request) {
    method renderMergedOutputModel (line 50) | @Override

FILE: autopoi-spring-boot-3-starter/src/main/java/org/jeecgframework/poi/excel/view/MiniAbstractExcelView.java
  class MiniAbstractExcelView (line 28) | public abstract class MiniAbstractExcelView extends AbstractView {
    method MiniAbstractExcelView (line 35) | public MiniAbstractExcelView() {
    method isIE (line 39) | protected boolean isIE(HttpServletRequest request) {

FILE: autopoi/src/main/java/org/jeecgframework/core/util/ApplicationContextUtil.java
  class ApplicationContextUtil (line 14) | @Lazy(false)
    method setApplicationContext (line 21) | @Override
    method getContext (line 27) | public static ApplicationContext getContext() {

FILE: autopoi/src/main/java/org/jeecgframework/dict/service/AutoPoiDictServiceI.java
  type AutoPoiDictServiceI (line 10) | public interface AutoPoiDictServiceI{
    method queryDict (line 21) | public String[] queryDict(String dicTable,String dicCode, String dicTe...

FILE: autopoi/src/main/java/org/jeecgframework/poi/cache/ExcelCache.java
  class ExcelCache (line 36) | public final class ExcelCache {
    method getWorkbook (line 40) | public static Workbook getWorkbook(String url, Integer[] sheetNums, bo...
    method getWorkbookByTemplate (line 67) | public static Workbook getWorkbookByTemplate(String url, Integer[] she...

FILE: autopoi/src/main/java/org/jeecgframework/poi/cache/ImageCache.java
  class ImageCache (line 36) | public class ImageCache {
    method getImage (line 41) | public static byte[] getImage(String imagePath) {
    method toBufferedImage (line 68) | public static BufferedImage toBufferedImage(Image image) {

FILE: autopoi/src/main/java/org/jeecgframework/poi/cache/WordCache.java
  class WordCache (line 31) | public class WordCache {
    method getXWPFDocumen (line 35) | public static MyXWPFDocument getXWPFDocumen(String url) {

FILE: autopoi/src/main/java/org/jeecgframework/poi/cache/manager/FileLoade.java
  class FileLoade (line 34) | class FileLoade {
    method getFile (line 38) | public byte[] getFile(String url) {

FILE: autopoi/src/main/java/org/jeecgframework/poi/cache/manager/POICacheManager.java
  class POICacheManager (line 38) | public final class POICacheManager {
    method load (line 46) | @Override
    method getFile (line 53) | public static InputStream getFile(String id) {
    method cleanAll (line 71) | public static void cleanAll() {
    method clean (line 82) | public static void clean(String id) {

FILE: autopoi/src/main/java/org/jeecgframework/poi/consts/ImageScaleMode.java
  type ImageScaleMode (line 10) | public enum ImageScaleMode {
    method ImageScaleMode (line 30) | ImageScaleMode(int code, String description) {
    method getCode (line 35) | public int getCode() {
    method getDescription (line 39) | public String getDescription() {
    method valueOf (line 49) | public static ImageScaleMode valueOf(int code) {

FILE: autopoi/src/main/java/org/jeecgframework/poi/entity/ImageEntity.java
  class ImageEntity (line 11) | public class ImageEntity {
    method ImageEntity (line 41) | public ImageEntity() {
    method ImageEntity (line 45) | public ImageEntity(byte[] data, int width, int height) {
    method ImageEntity (line 52) | public ImageEntity(String url, int width, int height) {
    method getData (line 58) | public byte[] getData() {
    method getHeight (line 62) | public int getHeight() {
    method getType (line 66) | public String getType() {
    method getUrl (line 70) | public String getUrl() {
    method getWidth (line 74) | public int getWidth() {
    method setData (line 78) | public void setData(byte[] data) {
    method setHeight (line 82) | public void setHeight(int height) {
    method setType (line 86) | public void setType(String type) {
    method setUrl (line 90) | public void setUrl(String url) {
    method setWidth (line 94) | public void setWidth(int width) {
    method getRowspan (line 98) | public int getRowspan() {
    method setRowspan (line 102) | public void setRowspan(int rowspan) {
    method getColspan (line 106) | public int getColspan() {
    method setColspan (line 110) | public void setColspan(int colspan) {
    method getScaleMode (line 119) | @Deprecated
    method setScaleMode (line 129) | @Deprecated
    method getScaleModeEnum (line 138) | public ImageScaleMode getScaleModeEnum() {
    method setScaleModeEnum (line 146) | public void setScaleModeEnum(ImageScaleMode scaleModeEnum) {

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/ExcelExportUtil.java
  class ExcelExportUtil (line 45) | public class ExcelExportUtil {
    method ExcelExportUtil (line 51) | private ExcelExportUtil() {
    method exportExcel (line 67) | public static Workbook exportExcel(ExportParams entity, Class<?> pojoC...
    method exportExcel (line 92) | public static Workbook exportExcel(ExportParams entity, Class<?> pojoC...
    method exportExcel (line 115) | public static Workbook exportExcel(ExportParams entity, List<ExcelExpo...
    method exportExcel (line 136) | public static Workbook exportExcel(List<Map<String, Object>> list, Exc...
    method exportExcel (line 164) | public static Workbook exportExcel(TemplateExportParams params, Class<...
    method exportExcel (line 177) | public static Workbook exportExcel(TemplateExportParams params, Map<St...
    method exportBigExcel (line 191) | public static IWriter<Workbook> exportBigExcel(ExportParams entity, Cl...
    method exportBigExcel (line 205) | public static IWriter<Workbook> exportBigExcel(ExportParams entity, Li...
    method exportBigExcel (line 221) | public static Workbook exportBigExcel(ExportParams entity, Class<?> po...
    method exportBigExcel (line 237) | public static Workbook exportBigExcel(ExportParams entity, List<ExcelE...
    method exportBigExcelEnhanced (line 281) | public static <T> Workbook exportBigExcelEnhanced(ExportParams entity,...
    method exportBigExcelEnhanced (line 298) | public static <T> Workbook exportBigExcelEnhanced(ExportParams entity,...

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/ExcelImportCheckUtil.java
  class ExcelImportCheckUtil (line 41) | public class ExcelImportCheckUtil {
    method check (line 54) | public static Boolean check(InputStream inputstream, Class<?> pojoClas...
    method check (line 65) | public static Boolean check(InputStream inputstream, Class<?> pojoClas...
    method getTitleMap (line 194) | private static Map<Integer, String> getTitleMap(Sheet sheet, ImportPar...
    method getKeyValue (line 254) | private static String getKeyValue(Cell cell) {
    method getAllExcelField (line 287) | public static void getAllExcelField(String targetId, Field[] fields, M...
    method getExcelFieldList (line 319) | public static void getExcelFieldList(String targetId, Field[] fields, ...
    method additionalCollectionName (line 343) | private static void additionalCollectionName(ExcelCollectionParams col...
    method addEntityToMap (line 365) | public static void addEntityToMap(String targetId, Field field, ExcelI...
    method getExcelField (line 403) | public static void getExcelField(String targetId, Field field, ExcelIm...
    method getExcelName (line 422) | public static String getExcelName(String exportName, String targetId) {
    method getImportVerify (line 440) | public static ExcelVerifyEntity getImportVerify(Field field) {

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/ExcelImportUtil.java
  class ExcelImportUtil (line 40) | @SuppressWarnings({ "unchecked" })
    method ExcelImportUtil (line 43) | private ExcelImportUtil() {
    method importExcel (line 57) | public static <T> List<T> importExcel(File file, Class<?> pojoClass, I...
    method importExcel (line 84) | public static <T> List<T> importExcel(InputStream inputstream, Class<?...
    method importExcelVerify (line 97) | public static <T> ExcelImportResult<T> importExcelVerify(InputStream i...
    method importExcelVerify (line 110) | public static <T> ExcelImportResult<T> importExcelVerify(File file, Cl...
    method importExcelBySax (line 137) | public static <T> List<T> importExcelBySax(InputStream inputstream, Cl...
    method importExcelBySax (line 150) | @SuppressWarnings("rawtypes")
    method importExcelBySax (line 164) | public static <T> List<T> importExcelBySax(InputStream inputstream, IS...

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/ExcelToHtmlUtil.java
  class ExcelToHtmlUtil (line 12) | public final class ExcelToHtmlUtil {
    method ExcelToHtmlUtil (line 14) | private ExcelToHtmlUtil() {
    method toTableHtml (line 24) | public static String toTableHtml(Workbook wb) {
    method toTableHtml (line 37) | public static String toTableHtml(Workbook wb, int sheetNum) {
    method toAllHtml (line 50) | public static String toAllHtml(Workbook wb) {
    method toAllHtml (line 63) | public static String toAllHtml(Workbook wb, int sheetNum) {

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/entity/ExcelBaseParams.java
  class ExcelBaseParams (line 26) | public class ExcelBaseParams {
    method getDataHanlder (line 33) | public IExcelDataHandler getDataHanlder() {
    method setDataHanlder (line 37) | public void setDataHanlder(IExcelDataHandler dataHanlder) {

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/entity/ExportParams.java
  class ExportParams (line 28) | public class ExportParams extends ExcelBaseParams {
    method ExportParams (line 115) | public ExportParams() {
    method ExportParams (line 119) | public ExportParams(String title, String sheetName) {
    method ExportParams (line 124) | public ExportParams(String title, String sheetName, ExcelType type) {
    method ExportParams (line 130) | public ExportParams(String title, String secondTitle, String sheetName) {
    method ExportParams (line 136) | public ExportParams(String title, String secondTitle, String sheetName...
    method ExportParams (line 143) | public ExportParams(String title, String secondTitle, String sheetName...
    method getColor (line 150) | public short getColor() {
    method getExclusions (line 154) | public String[] getExclusions() {
    method getHeaderColor (line 158) | public short getHeaderColor() {
    method getSecondTitle (line 162) | public String getSecondTitle() {
    method getSecondTitleHeight (line 166) | public short getSecondTitleHeight() {
    method getSheetName (line 170) | public String getSheetName() {
    method getTitle (line 174) | public String getTitle() {
    method getTitleHeight (line 178) | public short getTitleHeight() {
    method isAddIndex (line 182) | public boolean isAddIndex() {
    method setAddIndex (line 186) | public void setAddIndex(boolean addIndex) {
    method setColor (line 190) | public void setColor(short color) {
    method setExclusions (line 194) | public void setExclusions(String[] exclusions) {
    method setHeaderColor (line 198) | public void setHeaderColor(short headerColor) {
    method setSecondTitle (line 202) | public void setSecondTitle(String secondTitle) {
    method setSecondTitleHeight (line 206) | public void setSecondTitleHeight(short secondTitleHeight) {
    method setSheetName (line 210) | public void setSheetName(String sheetName) {
    method setTitle (line 214) | public void setTitle(String title) {
    method setTitleHeight (line 218) | public void setTitleHeight(short titleHeight) {
    method getType (line 222) | public ExcelType getType() {
    method setType (line 226) | public void setType(ExcelType type) {
    method getIndexName (line 230) | public String getIndexName() {
    method setIndexName (line 234) | public void setIndexName(String indexName) {
    method getStyle (line 238) | public Class<?> getStyle() {
    method setStyle (line 242) | public void setStyle(Class<?> style) {
    method getFreezeCol (line 246) | public int getFreezeCol() {
    method setFreezeCol (line 250) | public void setFreezeCol(int freezeCol) {
    method isCreateHeadRows (line 254) | public boolean isCreateHeadRows() {
    method setCreateHeadRows (line 258) | public void setCreateHeadRows(boolean isCreateHeadRows) {
    method getImageBasePath (line 262) | public String getImageBasePath() {
    method setImageBasePath (line 266) | public void setImageBasePath(String imageBasePath) {
    method getMaxNum (line 270) | public int getMaxNum() {
    method setMaxNum (line 274) | public void setMaxNum(int maxNum) {
    method getHeight (line 278) | public short getHeight() {
    method setHeight (line 282) | public void setHeight(short height) {
    method isFixedTitle (line 286) | public boolean isFixedTitle() {
    method setFixedTitle (line 290) | public void setFixedTitle(boolean fixedTitle) {
    method isReadonly (line 294) | public boolean isReadonly() {
    method setReadonly (line 298) | public void setReadonly(boolean readonly) {

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/entity/ImportParams.java
  class ImportParams (line 29) | public class ImportParams extends ExcelBaseParams {
    method getHeadRows (line 92) | public int getHeadRows() {
    method getKeyIndex (line 96) | public int getKeyIndex() {
    method getSaveUrl (line 100) | public String getSaveUrl() {
    method getSheetNum (line 104) | public int getSheetNum() {
    method getStartRows (line 108) | public int getStartRows() {
    method getTitleRows (line 112) | public int getTitleRows() {
    method getVerifyHanlder (line 116) | public IExcelVerifyHandler getVerifyHanlder() {
    method isNeedSave (line 120) | public boolean isNeedSave() {
    method setHeadRows (line 124) | public void setHeadRows(int headRows) {
    method setKeyIndex (line 128) | public void setKeyIndex(int keyIndex) {
    method setNeedSave (line 132) | public void setNeedSave(boolean needSave) {
    method setSaveUrl (line 136) | public void setSaveUrl(String saveUrl) {
    method setSheetNum (line 140) | public void setSheetNum(int sheetNum) {
    method setStartRows (line 144) | public void setStartRows(int startRows) {
    method setTitleRows (line 148) | public void setTitleRows(int titleRows) {
    method setVerifyHanlder (line 152) | public void setVerifyHanlder(IExcelVerifyHandler verifyHanlder) {
    method getLastOfInvalidRow (line 156) | public int getLastOfInvalidRow() {
    method setLastOfInvalidRow (line 160) | public void setLastOfInvalidRow(int lastOfInvalidRow) {
    method getImageList (line 164) | public List<String> getImageList() {
    method setImageList (line 168) | public void setImageList(List<String> imageList) {
    method getIgnoreHeaderList (line 172) | public List<String> getIgnoreHeaderList() {
    method setIgnoreHeaderList (line 176) | public void setIgnoreHeaderList(List<String> ignoreHeaderList) {
    method getSheetName (line 180) | public String getSheetName() {
    method setSheetName (line 184) | public void setSheetName(String sheetName) {
    method isIgnoreHeader (line 193) | public boolean isIgnoreHeader(String text){
    method getStartSheetIndex (line 199) | public int getStartSheetIndex() {
    method setStartSheetIndex (line 203) | public void setStartSheetIndex(int startSheetIndex) {

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/entity/TemplateExportParams.java
  class TemplateExportParams (line 32) | public class TemplateExportParams extends ExcelBaseParams {
    method TemplateExportParams (line 84) | public TemplateExportParams() {
    method TemplateExportParams (line 98) | public TemplateExportParams(String templateUrl, boolean scanAllsheet, ...
    method TemplateExportParams (line 115) | public TemplateExportParams(String templateUrl, Integer... sheetNum) {
    method TemplateExportParams (line 132) | public TemplateExportParams(String templateUrl, String sheetName, Inte...
    method TemplateExportParams (line 146) | public TemplateExportParams(InputStream inputStream, boolean scanAllsh...
    method TemplateExportParams (line 158) | public TemplateExportParams(InputStream inputStream, Integer... sheetN...
    method TemplateExportParams (line 171) | public TemplateExportParams(InputStream inputStream, String sheetName,...
    method getHeadingRows (line 179) | public int getHeadingRows() {
    method getHeadingStartRow (line 183) | public int getHeadingStartRow() {
    method getSheetName (line 187) | public String[] getSheetName() {
    method getSheetNum (line 191) | public Integer[] getSheetNum() {
    method getTemplateUrl (line 195) | public String getTemplateUrl() {
    method setHeadingRows (line 199) | public void setHeadingRows(int headingRows) {
    method setHeadingStartRow (line 203) | public void setHeadingStartRow(int headingStartRow) {
    method setSheetName (line 207) | public void setSheetName(String[] sheetName) {
    method setSheetName (line 211) | public void setSheetName(String sheetName) {
    method setSheetNum (line 215) | public void setSheetNum(Integer[] sheetNum) {
    method setSheetNum (line 219) | public void setSheetNum(Integer sheetNum) {
    method setTemplateUrl (line 223) | public void setTemplateUrl(String templateUrl) {
    method getStyle (line 227) | public Class<?> getStyle() {
    method setStyle (line 231) | public void setStyle(Class<?> style) {
    method getDataSheetNum (line 235) | public int getDataSheetNum() {
    method setDataSheetNum (line 239) | public void setDataSheetNum(int dataSheetNum) {
    method isScanAllsheet (line 243) | public boolean isScanAllsheet() {
    method setScanAllsheet (line 247) | public void setScanAllsheet(boolean scanAllsheet) {
    method getTempParams (line 251) | public String getTempParams() {
    method setTempParams (line 255) | public void setTempParams(String tempParams) {
    method isColForEach (line 259) | public boolean isColForEach() {
    method setColForEach (line 263) | public void setColForEach(boolean colForEach) {
    method getTemplateWb (line 266) | public Workbook getTemplateWb() {
    method setTemplateWb (line 270) | public void setTemplateWb(Workbook templateWb) {

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/entity/enmus/CellValueType.java
  type CellValueType (line 24) | public enum CellValueType {

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/entity/enmus/ExcelStyleType.java
  type ExcelStyleType (line 28) | public enum ExcelStyleType {
    method ExcelStyleType (line 35) | ExcelStyleType(String name, Class<?> clazz) {
    method getClazz (line 40) | public Class<?> getClazz() {
    method getName (line 44) | public String getName() {

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/entity/enmus/ExcelType.java
  type ExcelType (line 25) | public enum ExcelType {

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/entity/params/ExcelBaseEntity.java
  class ExcelBaseEntity (line 27) | public class ExcelBaseEntity {
    method getDatabaseFormat (line 82) | public String getDatabaseFormat() {
    method getFormat (line 86) | public String getFormat() {
    method getMethod (line 90) | public Method getMethod() {
    method getMethods (line 94) | public List<Method> getMethods() {
    method getName (line 98) | public String getName() {
    method getReplace (line 102) | public String[] getReplace() {
    method getType (line 106) | public int getType() {
    method setDatabaseFormat (line 110) | public void setDatabaseFormat(String databaseFormat) {
    method setFormat (line 114) | public void setFormat(String format) {
    method setMethod (line 118) | public void setMethod(Method method) {
    method setMethods (line 122) | public void setMethods(List<Method> methods) {
    method setName (line 126) | public void setName(String name) {
    method setReplace (line 130) | public void setReplace(String[] replace) {
    method setType (line 134) | public void setType(int type) {
    method isMultiReplace (line 138) | public boolean isMultiReplace() {
    method setMultiReplace (line 141) | public void setMultiReplace(boolean multiReplace) {
    method getNumFormat (line 145) | public String getNumFormat() {
    method setNumFormat (line 149) | public void setNumFormat(String numFormat) {
    method getGroupName (line 153) | public String getGroupName() {
    method setGroupName (line 157) | public void setGroupName(String groupName) {
    method getFixedIndex (line 161) | public Integer getFixedIndex() {
    method setFixedIndex (line 165) | public void setFixedIndex(Integer fixedIndex) {
    method getDict (line 169) | public String getDict() {
    method setDict (line 173) | public void setDict(String dict) {
    method isHyperlink (line 177) | public boolean isHyperlink() {
    method setHyperlink (line 181) | public void setHyperlink(boolean hyperlink) {

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/entity/params/ExcelCollectionParams.java
  class ExcelCollectionParams (line 27) | public class ExcelCollectionParams {
    method getExcelParams (line 46) | public Map<String, ExcelImportEntity> getExcelParams() {
    method getName (line 50) | public String getName() {
    method getType (line 54) | public Class<?> getType() {
    method setExcelParams (line 58) | public void setExcelParams(Map<String, ExcelImportEntity> excelParams) {
    method setName (line 62) | public void setName(String name) {
    method setType (line 66) | public void setType(Class<?> type) {
    method getExcelName (line 70) | public String getExcelName() {
    method setExcelName (line 74) | public void setExcelName(String excelName) {

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/entity/params/ExcelExportEntity.java
  class ExcelExportEntity (line 27) | public class ExcelExportEntity extends ExcelBaseEntity implements Compar...
    method ExcelExportEntity (line 123) | public ExcelExportEntity() {
    method ExcelExportEntity (line 127) | public ExcelExportEntity(String name) {
    method ExcelExportEntity (line 131) | public ExcelExportEntity(String name, Object key) {
    method ExcelExportEntity (line 142) | public ExcelExportEntity(String name, Object key, boolean colspan) {
    method ExcelExportEntity (line 149) | public ExcelExportEntity(String name, Object key, int width) {
    method getExportImageType (line 155) | public int getExportImageType() {
    method getHeight (line 159) | public double getHeight() {
    method getKey (line 163) | public Object getKey() {
    method getList (line 167) | public List<ExcelExportEntity> getList() {
    method getMergeRely (line 171) | public int[] getMergeRely() {
    method getOrderNum (line 175) | public int getOrderNum() {
    method getWidth (line 179) | public double getWidth() {
    method isMergeVertical (line 183) | public boolean isMergeVertical() {
    method isNeedMerge (line 187) | public boolean isNeedMerge() {
    method isWrap (line 191) | public boolean isWrap() {
    method setExportImageType (line 195) | public void setExportImageType(int exportImageType) {
    method setHeight (line 199) | public void setHeight(double height) {
    method setKey (line 203) | public void setKey(Object key) {
    method setList (line 207) | public void setList(List<ExcelExportEntity> list) {
    method setMergeRely (line 211) | public void setMergeRely(int[] mergeRely) {
    method setMergeVertical (line 215) | public void setMergeVertical(boolean mergeVertical) {
    method setNeedMerge (line 219) | public void setNeedMerge(boolean needMerge) {
    method setOrderNum (line 223) | public void setOrderNum(int orderNum) {
    method setWidth (line 227) | public void setWidth(double width) {
    method setWrap (line 231) | public void setWrap(boolean isWrap) {
    method getSuffix (line 235) | public String getSuffix() {
    method setSuffix (line 239) | public void setSuffix(String suffix) {
    method isStatistics (line 243) | public boolean isStatistics() {
    method setStatistics (line 247) | public void setStatistics(boolean isStatistics) {
    method getImageBasePath (line 251) | public String getImageBasePath() {
    method setImageBasePath (line 255) | public void setImageBasePath(String imageBasePath) {
    method isColspan (line 259) | public boolean isColspan() {
    method setColspan (line 263) | public void setColspan(boolean colspan) {
    method getSubColumnList (line 267) | public List<String> getSubColumnList() {
    method setSubColumnList (line 271) | public void setSubColumnList(List<String> subColumnList) {
    method getGroupName (line 275) | public String getGroupName() {
    method setGroupName (line 279) | public void setGroupName(String groupName) {
    method isColumnHidden (line 283) | public boolean isColumnHidden() {
    method setColumnHidden (line 287) | public void setColumnHidden(boolean columnHidden) {
    method isSubColumn (line 295) | public boolean isSubColumn(){
    method isMergeColumn (line 303) | public boolean isMergeColumn(){
    method isDynamic (line 307) | public boolean isDynamic() {
    method setDynamic (line 311) | public void setDynamic(boolean dynamic) {
    method getDynamicField (line 315) | public String getDynamicField() {
    method setDynamicField (line 319) | public void setDynamicField(String dynamicField) {
    method getDynamicValue (line 323) | public String getDynamicValue() {
    method setDynamicValue (line 327) | public void setDynamicValue(String dynamicValue) {
    method isDynamicKeepSelf (line 331) | public boolean isDynamicKeepSelf() {
    method setDynamicKeepSelf (line 335) | public void setDynamicKeepSelf(boolean dynamicKeepSelf) {
    method getDynamicColumnName (line 339) | public String getDynamicColumnName() {
    method setDynamicColumnName (line 343) | public void setDynamicColumnName(String dynamicColumnName) {
    method initSubExportEntity (line 351) | public List<ExcelExportEntity> initSubExportEntity(List<ExcelExportEnt...
    method compareTo (line 362) | @Override

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/entity/params/ExcelForEachParams.java
  class ExcelForEachParams (line 13) | public class ExcelForEachParams implements Serializable {
    method ExcelForEachParams (line 52) | public ExcelForEachParams() {
    method ExcelForEachParams (line 56) | public ExcelForEachParams(String name, CellStyle cellStyle, short heig...
    method getName (line 62) | public String getName() {
    method setName (line 66) | public void setName(String name) {
    method getCellStyle (line 70) | public CellStyle getCellStyle() {
    method setCellStyle (line 74) | public void setCellStyle(CellStyle cellStyle) {
    method getHeight (line 78) | public short getHeight() {
    method setHeight (line 82) | public void setHeight(short height) {
    method getConstValue (line 86) | public String getConstValue() {
    method setConstValue (line 90) | public void setConstValue(String constValue) {
    method getColspan (line 94) | public int getColspan() {
    method setColspan (line 98) | public void setColspan(int colspan) {
    method getRowspan (line 102) | public int getRowspan() {
    method setRowspan (line 106) | public void setRowspan(int rowspan) {
    method isCollectCell (line 110) | public boolean isCollectCell() {
    method setCollectCell (line 114) | public void setCollectCell(boolean collectCell) {
    method getTempName (line 118) | public Stack<String> getTempName() {
    method setTempName (line 122) | public void setTempName(Stack<String> tempName) {

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/entity/params/ExcelImportEntity.java
  class ExcelImportEntity (line 26) | public class ExcelImportEntity extends ExcelBaseEntity {
    method getClassType (line 54) | public String getClassType() {
    method getCollectionName (line 58) | public String getCollectionName() {
    method getList (line 62) | public List<ExcelImportEntity> getList() {
    method getSaveType (line 66) | public int getSaveType() {
    method getSaveUrl (line 70) | public String getSaveUrl() {
    method getVerify (line 74) | public ExcelVerifyEntity getVerify() {
    method setClassType (line 78) | public void setClassType(String classType) {
    method setCollectionName (line 82) | public void setCollectionName(String collectionName) {
    method setList (line 86) | public void setList(List<ExcelImportEntity> list) {
    method setSaveType (line 90) | public void setSaveType(int saveType) {
    method setSaveUrl (line 94) | public void setSaveUrl(String saveUrl) {
    method setVerify (line 98) | public void setVerify(ExcelVerifyEntity verify) {
    method getSuffix (line 102) | public String getSuffix() {
    method setSuffix (line 106) | public void setSuffix(String suffix) {

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/entity/params/ExcelTemplateParams.java
  class ExcelTemplateParams (line 13) | public class ExcelTemplateParams implements Serializable {
    method ExcelTemplateParams (line 32) | public ExcelTemplateParams() {
    method ExcelTemplateParams (line 36) | public ExcelTemplateParams(String name, CellStyle cellStyle, short hei...
    method getName (line 42) | public String getName() {
    method setName (line 46) | public void setName(String name) {
    method getCellStyle (line 50) | public CellStyle getCellStyle() {
    method setCellStyle (line 54) | public void setCellStyle(CellStyle cellStyle) {
    method getHeight (line 58) | public short getHeight() {
    method setHeight (line 62) | public void setHeight(short height) {

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/entity/params/ExcelVerifyEntity.java
  class ExcelVerifyEntity (line 24) | public class ExcelVerifyEntity {
    method getMaxLength (line 87) | public int getMaxLength() {
    method getMinLength (line 91) | public int getMinLength() {
    method getRegex (line 95) | public String getRegex() {
    method getRegexTip (line 99) | public String getRegexTip() {
    method isEmail (line 103) | public boolean isEmail() {
    method isInterHandler (line 107) | public boolean isInterHandler() {
    method isMobile (line 111) | public boolean isMobile() {
    method isNotNull (line 115) | public boolean isNotNull() {
    method isTel (line 119) | public boolean isTel() {
    method setEmail (line 123) | public void setEmail(boolean isEmail) {
    method setInterHandler (line 127) | public void setInterHandler(boolean interHandler) {
    method setMaxLength (line 131) | public void setMaxLength(int maxLength) {
    method setMinLength (line 135) | public void setMinLength(int minLength) {
    method setMobile (line 139) | public void setMobile(boolean isMobile) {
    method setNotNull (line 143) | public void setNotNull(boolean notNull) {
    method setRegex (line 147) | public void setRegex(String regex) {
    method setRegexTip (line 151) | public void setRegexTip(String regexTip) {
    method setTel (line 155) | public void setTel(boolean isTel) {

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/entity/params/MergeEntity.java
  class MergeEntity (line 25) | public class MergeEntity {
    method MergeEntity (line 43) | public MergeEntity() {
    method MergeEntity (line 47) | public MergeEntity(String text, int startRow, int endRow) {
    method getEndRow (line 53) | public int getEndRow() {
    method getRelyList (line 57) | public List<String> getRelyList() {
    method getStartRow (line 61) | public int getStartRow() {
    method getText (line 65) | public String getText() {
    method setEndRow (line 69) | public void setEndRow(int endRow) {
    method setRelyList (line 73) | public void setRelyList(List<String> relyList) {
    method setStartRow (line 77) | public void setStartRow(int startRow) {
    method setText (line 81) | public void setText(String text) {

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/entity/result/ExcelImportResult.java
  class ExcelImportResult (line 28) | public class ExcelImportResult<T> {
    method ExcelImportResult (line 45) | public ExcelImportResult() {
    method ExcelImportResult (line 49) | public ExcelImportResult(List<T> list, boolean verfiyFail, Workbook wo...
    method getList (line 55) | public List<T> getList() {
    method getWorkbook (line 59) | public Workbook getWorkbook() {
    method isVerfiyFail (line 63) | public boolean isVerfiyFail() {
    method setList (line 67) | public void setList(List<T> list) {
    method setVerfiyFail (line 71) | public void setVerfiyFail(boolean verfiyFail) {
    method setWorkbook (line 75) | public void setWorkbook(Workbook workbook) {

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/entity/result/ExcelVerifyHanlderResult.java
  class ExcelVerifyHanlderResult (line 24) | public class ExcelVerifyHanlderResult {
    method ExcelVerifyHanlderResult (line 34) | public ExcelVerifyHanlderResult() {
    method ExcelVerifyHanlderResult (line 38) | public ExcelVerifyHanlderResult(boolean success) {
    method ExcelVerifyHanlderResult (line 42) | public ExcelVerifyHanlderResult(boolean success, String msg) {
    method getMsg (line 47) | public String getMsg() {
    method isSuccess (line 51) | public boolean isSuccess() {
    method setMsg (line 55) | public void setMsg(String msg) {
    method setSuccess (line 59) | public void setSuccess(boolean success) {

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/entity/sax/SaxReadCellEntity.java
  class SaxReadCellEntity (line 26) | public class SaxReadCellEntity {
    method SaxReadCellEntity (line 36) | public SaxReadCellEntity(CellValueType cellType, Object value) {
    method getCellType (line 41) | public CellValueType getCellType() {
    method setCellType (line 45) | public void setCellType(CellValueType cellType) {
    method getValue (line 49) | public Object getValue() {
    method setValue (line 53) | public void setValue(Object value) {
    method toString (line 57) | @Override

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/entity/vo/PoiBaseConstants.java
  type PoiBaseConstants (line 21) | public interface PoiBaseConstants {

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/export/ExcelBatchExportServer.java
  class ExcelBatchExportServer (line 32) | public class ExcelBatchExportServer extends ExcelExportServer implements...
    method init (line 45) | public void init(ExportParams entity, Class<?> pojoClass) {
    method init (line 55) | public void init(ExportParams entity, List<ExcelExportEntity> excelPar...
    method createExcelExportEntityList (line 69) | public List<ExcelExportEntity> createExcelExportEntityList(ExportParam...
    method createSheet (line 89) | public void createSheet(Workbook workbook, ExportParams entity, List<E...
    method insertDataToSheet (line 110) | @Override
    method exportBigExcel (line 142) | public Workbook exportBigExcel(IExcelExportServer server, Object query...
    method exportBigExcelEnhanced (line 167) | public <T> Workbook exportBigExcelEnhanced(IExcelExportServerEnhanced<...
    method get (line 195) | @Override
    method write (line 200) | @Override
    method close (line 219) | @Override
    method indexExcelEntity (line 232) | @Override

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/export/ExcelExportServer.java
  class ExcelExportServer (line 44) | public class ExcelExportServer extends ExcelExportBase {
    method createHeaderAndTitle (line 51) | protected int createHeaderAndTitle(ExportParams entity, Sheet sheet, W...
    method createHeaderRow (line 73) | public int createHeaderRow(ExportParams entity, Sheet sheet, Workbook ...
    method createSheet (line 112) | public void createSheet(Workbook workbook, ExportParams entity, Class<...
    method createSheetForMap (line 220) | public void createSheetForMap(Workbook workbook, ExportParams entity, ...
    method createTitleRow (line 301) | private int createTitleRow(ExportParams title, Sheet sheet, Workbook w...
    method getRowNums (line 367) | private int getRowNums(List<ExcelExportEntity> excelParams) {
    method indexExcelEntity (line 379) | protected ExcelExportEntity indexExcelEntity(ExportParams entity) {
    method insertDataToSheet (line 397) | protected void insertDataToSheet(Workbook workbook, ExportParams entity,

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/export/base/ExcelExportBase.java
  class ExcelExportBase (line 58) | public abstract class ExcelExportBase extends ExportBase {
    method createCells (line 94) | public int createCells(Drawing patriarch, int index, Object t, List<Ex...
    method getNumberCellStyle (line 195) | private CellStyle getNumberCellStyle(int index,DataFormat df, ExcelExp...
    method getGeneralCellStyle (line 214) | private CellStyle getGeneralCellStyle(int index, Workbook workbook, Ex...
    method getImageDataByHttps (line 233) | private byte[] getImageDataByHttps(String imagePath) throws Exception {
    method getImageDataByHttp (line 252) | private byte[] getImageDataByHttp(String imagePath) throws Exception {
    method createImageCell (line 273) | public void createImageCell(Drawing patriarch, ExcelExportEntity entit...
    method readInputStream (line 360) | private byte[] readInputStream(InputStream inStream) throws Exception {
    method createIndexCell (line 375) | private int createIndexCell(Row row, int index, ExcelExportEntity exce...
    method createListCells (line 395) | public void createListCells(Drawing patriarch, int index, int cellNum,...
    method createNumericCell (line 447) | public void createNumericCell (Row row, int index, String text, CellSt...
    method createStringCell (line 471) | public void createStringCell(Row row, int index, String text, CellStyl...
    method addStatisticsRow (line 530) | public void addStatisticsRow(CellStyle styles, Sheet sheet) {
    method addStatisticsData (line 550) | private void addStatisticsData(Integer index, String text, ExcelExport...
    method getFieldWidth (line 570) | public int getFieldWidth(List<ExcelExportEntity> excelParams) {
    method getImageType (line 594) | public int getImageType(byte[] value) {
    method getMergeDataMap (line 604) | private Map<Integer, int[]> getMergeDataMap(List<ExcelExportEntity> ex...
    method getStyles (line 633) | public CellStyle getStyles(boolean needOne, ExcelExportEntity entity) {
    method mergeCells (line 644) | public void mergeCells(Sheet sheet, List<ExcelExportEntity> excelParam...
    method setCellWith (line 649) | public void setCellWith(List<ExcelExportEntity> excelParams, Sheet she...
    method setColumnHidden (line 670) | public void setColumnHidden(List<ExcelExportEntity> excelParams, Sheet...
    method setCurrentIndex (line 685) | public void setCurrentIndex(int currentIndex) {
    method setExcelExportStyler (line 689) | public void setExcelExportStyler(IExcelExportStyler excelExportStyler) {
    method getExcelExportStyler (line 693) | public IExcelExportStyler getExcelExportStyler() {
    method createCells (line 709) | public int[] createCells(Drawing patriarch, int index, Object t,
    method getListCellSize (line 809) | protected int getListCellSize(List<ExcelExportEntity> list) {

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/export/base/ExportBase.java
  class ExportBase (line 48) | public class ExportBase {
    method createExcelExportEntity (line 71) | private ExcelExportEntity createExcelExportEntity(Field field, String ...
    method formatValue (line 85) | private Object formatValue(Object value, ExcelExportEntity entity) thr...
    method getAllExcelField (line 124) | public void getAllExcelField(String[] exclusions, String targetId, Fie...
    method getCellOrder (line 181) | public int getCellOrder(String orderNum, String targetId) {
    method getCellValue (line 204) | public Object getCellValue(ExcelExportEntity entity, Object obj) throw...
    method getListCellValue (line 276) | public Collection<?> getListCellValue(ExcelExportEntity entity, Object...
    method getExcelField (line 303) | private void getExcelField(String targetId, Field field, ExcelExportEn...
    method getExcelName (line 370) | public String getExcelName(String exportName, String targetId) {
    method getFieldBySomeMethod (line 391) | public Object getFieldBySomeMethod(List<Method> list, Object t) throws...
    method getRowHeight (line 408) | public short getRowHeight(List<ExcelExportEntity> excelParams) {
    method isInteger (line 424) | public boolean isInteger(String value) {
    method replaceValue (line 433) | private Object replaceValue(String[] replace, String value) {
    method multiReplaceValue (line 457) | private Object multiReplaceValue(String[] replace, String value) {
    method sortAllParams (line 493) | public void sortAllParams(List<ExcelExportEntity> excelParams) {
    method reConfigExcelExportParams (line 508) | public void reConfigExcelExportParams(List<ExcelExportEntity> excelPar...
    method getDynamicCellValue (line 561) | private Object getDynamicCellValue(ExcelExportEntity entity, Object ob...
    method getDynamicListValue (line 586) | protected Collection<?> getDynamicListValue(ExcelExportEntity entity, ...
    method parseJsonArrayToList (line 613) | private Collection<?> parseJsonArrayToList(String json) {
    method rebuildDynamicColumns (line 634) | protected void rebuildDynamicColumns(Collection<?> dataSet, List<Excel...
    method copyKeepSelfEntity (line 659) | private ExcelExportEntity copyKeepSelfEntity(ExcelExportEntity source){
    method buildDynamicEntities (line 670) | private List<ExcelExportEntity> buildDynamicEntities(ExcelExportEntity...
    method copyDynamicBase (line 695) | private ExcelExportEntity copyDynamicBase(ExcelExportEntity source) {
    method getValueArr (line 739) | public String[] getValueArr(String val) {

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/export/styler/AbstractExcelExportStyler.java
  class AbstractExcelExportStyler (line 30) | public abstract class AbstractExcelExportStyler implements IExcelExportS...
    method createStyles (line 42) | protected void createStyles(Workbook workbook) {
    method getStyles (line 50) | @Override
    method stringNoneStyle (line 64) | public CellStyle stringNoneStyle(Workbook workbook, boolean isWarp) {
    method stringSeptailStyle (line 68) | public CellStyle stringSeptailStyle(Workbook workbook, boolean isWarp) {
    method getTemplateStyles (line 78) | @Override

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/export/styler/ExcelExportStylerBorderImpl.java
  class ExcelExportStylerBorderImpl (line 26) | public class ExcelExportStylerBorderImpl extends AbstractExcelExportStyl...
    method ExcelExportStylerBorderImpl (line 28) | public ExcelExportStylerBorderImpl(Workbook workbook) {
    method getHeaderStyle (line 32) | @Override
    method stringNoneStyle (line 47) | @Override
    method getTitleStyle (line 63) | @Override
    method stringSeptailStyle (line 76) | @Override

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/export/styler/ExcelExportStylerColorImpl.java
  class ExcelExportStylerColorImpl (line 26) | public class ExcelExportStylerColorImpl extends AbstractExcelExportStyle...
    method ExcelExportStylerColorImpl (line 28) | public ExcelExportStylerColorImpl(Workbook workbook) {
    method getHeaderStyle (line 32) | @Override
    method stringNoneStyle (line 44) | @Override
    method getTitleStyle (line 60) | @Override
    method stringSeptailStyle (line 71) | @Override

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/export/styler/ExcelExportStylerDefaultImpl.java
  class ExcelExportStylerDefaultImpl (line 26) | public class ExcelExportStylerDefaultImpl extends AbstractExcelExportSty...
    method ExcelExportStylerDefaultImpl (line 28) | public ExcelExportStylerDefaultImpl(Workbook workbook) {
    method getTitleStyle (line 32) | @Override
    method stringSeptailStyle (line 41) | @Override
    method getHeaderStyle (line 53) | @Override
    method stringNoneStyle (line 64) | @Override

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/export/styler/IExcelExportStyler.java
  type IExcelExportStyler (line 28) | public interface IExcelExportStyler {
    method getHeaderStyle (line 36) | public CellStyle getHeaderStyle(short headerColor);
    method getTitleStyle (line 44) | public CellStyle getTitleStyle(short color);
    method getStyles (line 53) | public CellStyle getStyles(boolean noneStyler, ExcelExportEntity entity);
    method getTemplateStyles (line 57) | public CellStyle getTemplateStyles(boolean isSingle, ExcelForEachParam...

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/export/template/ExcelExportOfTemplateUtil.java
  class ExcelExportOfTemplateUtil (line 59) | public final class ExcelExportOfTemplateUtil extends ExcelExportBase {
    method addDataToSheet (line 85) | private void addDataToSheet(Class<?> pojoClass, Collection<?> dataSet,...
    method getShiftRows (line 128) | private int getShiftRows(Collection<?> dataSet, List<ExcelExportEntity...
    method getOneObjectSize (line 145) | public int getOneObjectSize(Object t, List<ExcelExportEntity> excelPar...
    method createExcleByTemplate (line 161) | public Workbook createExcleByTemplate(TemplateExportParams params, Cla...
    method getCloneWorkBook (line 215) | private Workbook getCloneWorkBook() throws Exception {
    method getTitleMap (line 228) | private Map<String, Integer> getTitleMap(Sheet sheet) {
    method parseTemplate (line 249) | private void parseTemplate(Sheet sheet, Map<String, Object> map, boole...
    method deleteCell (line 279) | private void deleteCell(Sheet sheet, Map<String, Object> map) throws E...
    method setValueForCellByMap (line 310) | private void setValueForCellByMap(Cell cell, Map<String, Object> map) ...
    method isNumber (line 349) | private boolean isNumber(String text) {
    method addListDataToExcel (line 361) | private void addListDataToExcel(Cell cell, Map<String, Object> map, St...
    method setForEeachCellValue (line 409) | private void setForEeachCellValue(boolean isCreate, Row row, int colum...
    method getAllDataColumns (line 442) | private List<ExcelTemplateParams> getAllDataColumns(Cell cell, String ...
    method sortAndFilterExportField (line 498) | private void sortAndFilterExportField(List<ExcelExportEntity> excelPar...
    method colForeach (line 525) | private void colForeach(Sheet sheet, Map<String, Object> map) throws E...
    method foreachCol (line 555) | private void foreachCol(Cell cell, Map<String, Object> map, String nam...
    method setForeachRowCellValue (line 599) | private int[] setForeachRowCellValue(boolean isCreate, Row row, int co...
    method createImageCell (line 706) | public void createImageCell(Cell cell, double height, int rowspan, int...
    method createImageCell (line 726) | @Deprecated
    method createImageCell (line 746) | public void createImageCell(Cell cell, double height, int rowspan, int...
    method getImageScale (line 792) | private double getImageScale(Cell cell, int rowspan, int colspan, byte...
    method setForEachLoopRowCellValue (line 850) | private int[] setForEachLoopRowCellValue(Row row, int columnIndex, Col...
    method createRow (line 889) | private Row createRow(int rowIndex, Sheet sheet, boolean isCreate, int...
    method getLoopEachParams (line 907) | private List<ExcelForEachParams> getLoopEachParams(List<ExcelForEachPa...
    method createRowCellSetStyle (line 933) | private void createRowCellSetStyle(Row row, int columnIndex, List<Exce...
    method getStyles (line 965) | private CellStyle getStyles(boolean isSingle, ExcelForEachParams excel...
    method getMaxHeight (line 976) | private short getMaxHeight(int k, int colspan, List<ExcelForEachParams...
    method isHasSymbol (line 990) | private boolean isHasSymbol(String text, String symbol) {
    method handlerLoopMergedRegion (line 1002) | private void handlerLoopMergedRegion(Row row, int columnIndex, List<Ex...
    method setMergedRegionStyle (line 1019) | private void setMergedRegionStyle(Row row, int ci, ExcelForEachParams ...
    method getAllDataColumns (line 1042) | private Object[] getAllDataColumns(Cell cell, String name,
    method getExcelTemplateParams (line 1126) | private ExcelForEachParams getExcelTemplateParams(String name, Cell cell,

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/graph/builder/ExcelChartBuildService.java
  class ExcelChartBuildService (line 43) | @Deprecated
    method createExcelChart (line 54) | @Deprecated
    method buildExcelChart (line 68) | @Deprecated
    method buildExcelChart (line 122) | private static void buildExcelChart(Sheet dataSourceSheet,Sheet traget...
    method buildExcelChart (line 152) | private static void buildExcelChart(Sheet dataSourceSheet,Sheet traget...
    method buildTitle (line 166) | private static void buildTitle(Sheet sheet,ExcelGraph graph){
    method buildTitle (line 186) | private static void buildTitle(Sheet sheet,List<ExcelGraph> graphList){
    method buildLineChartData (line 205) | @Deprecated
    method buildScatterChartData (line 240) | @Deprecated

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/graph/constant/ExcelGraphElementType.java
  type ExcelGraphElementType (line 11) | public interface ExcelGraphElementType

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/graph/constant/ExcelGraphType.java
  type ExcelGraphType (line 11) | public interface ExcelGraphType

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/graph/entity/ExcelGraph.java
  type ExcelGraph (line 13) | public interface ExcelGraph
    method getCategory (line 15) | public ExcelGraphElement getCategory();
    method getValueList (line 16) | public List<ExcelGraphElement> getValueList();
    method getGraphType (line 17) | public Integer getGraphType();
    method getTitleCell (line 18) | public List<ExcelTitleCell> getTitleCell();
    method getTitle (line 19) | public List<String> getTitle();

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/graph/entity/ExcelGraphDefined.java
  class ExcelGraphDefined (line 17) | public class ExcelGraphDefined implements ExcelGraph
    method getCategory (line 25) | @Override
    method setCategory (line 30) | public void setCategory(ExcelGraphElement category)
    method getValueList (line 34) | @Override
    method setValueList (line 39) | public void setValueList(List<ExcelGraphElement> valueList)
    method getGraphType (line 44) | @Override
    method setGraphType (line 49) | public void setGraphType(Integer graphType)
    method getTitleCell (line 53) | @Override
    method setTitleCell (line 58) | public void setTitleCell(List<ExcelTitleCell> titleCell)
    method getTitle (line 62) | @Override
    method setTitle (line 67) | public void setTitle(List<String> title)

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/graph/entity/ExcelGraphElement.java
  class ExcelGraphElement (line 14) | public class ExcelGraphElement
    method getStartRowNum (line 23) | public Integer getStartRowNum()
    method setStartRowNum (line 27) | public void setStartRowNum(Integer startRowNum)
    method getEndRowNum (line 31) | public Integer getEndRowNum()
    method setEndRowNum (line 35) | public void setEndRowNum(Integer endRowNum)
    method getStartColNum (line 39) | public Integer getStartColNum()
    method setStartColNum (line 43) | public void setStartColNum(Integer startColNum)
    method getEndColNum (line 47) | public Integer getEndColNum()
    method setEndColNum (line 51) | public void setEndColNum(Integer endColNum)
    method getElementType (line 55) | public Integer getElementType()
    method setElementType (line 59) | public void setElementType(Integer elementType)

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/graph/entity/ExcelTitleCell.java
  class ExcelTitleCell (line 11) | public class ExcelTitleCell
    method ExcelTitleCell (line 16) | public ExcelTitleCell(){
    method ExcelTitleCell (line 20) | public ExcelTitleCell(Integer row,Integer col){
    method getRow (line 25) | public Integer getRow()
    method setRow (line 29) | public void setRow(Integer row)
    method getCol (line 33) | public Integer getCol()
    method setCol (line 37) | public void setCol(Integer col)

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/html/ExcelToHtmlServer.java
  class ExcelToHtmlServer (line 21) | public class ExcelToHtmlServer {
    method ExcelToHtmlServer (line 39) | public ExcelToHtmlServer(Workbook wb, boolean completeHTML, int sheetN...
    method printPage (line 46) | public String printPage() {
    method print (line 72) | private void print() {
    method ensureOut (line 76) | private void ensureOut() {
    method printSheets (line 81) | private void printSheets() {
    method printSheet (line 86) | private void printSheet(Sheet sheet) {
    method printCols (line 93) | private void printCols(Sheet sheet) {
    method getTableWidth (line 101) | private int getTableWidth(Sheet sheet) {
    method ensureColumnBounds (line 110) | private void ensureColumnBounds(Sheet sheet) {
    method printColumnHeads (line 128) | @SuppressWarnings("unused")
    method printSheetContent (line 148) | private void printSheetContent(Sheet sheet) {
    method styleName (line 186) | private String styleName(CellStyle style) {

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/html/helper/CellValueHelper.java
  class CellValueHelper (line 24) | public class CellValueHelper {
    method CellValueHelper (line 34) | public CellValueHelper(Workbook wb, int cssRandom) {
    method cacheFontInfo (line 50) | private void cacheFontInfo(Workbook wb) {
    method getHtmlValue (line 58) | public String getHtmlValue(Cell cell) {
    method getHSSFRichString (line 80) | private String getHSSFRichString(HSSFRichTextString rich) {
    method getXSSFRichString (line 109) | private String getXSSFRichString(XSSFRichTextString rich) {
    method getFontIndex (line 132) | private String getFontIndex(XSSFFont font) {

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/html/helper/MergedRegionHelper.java
  class MergedRegionHelper (line 18) | public class MergedRegionHelper {
    method MergedRegionHelper (line 24) | public MergedRegionHelper(Sheet sheet) {
    method getAllMergedRegion (line 28) | private void getAllMergedRegion(Sheet sheet) {
    method handerMergedString (line 40) | private void handerMergedString(String formatAsString) {
    method isNeedCreate (line 71) | public boolean isNeedCreate(int row, int col) {
    method isMergedRegion (line 82) | public boolean isMergedRegion(int row, int col) {
    method getRowAndColSpan (line 93) | public Integer[] getRowAndColSpan(int row, int col) {
    method shiftRows (line 103) | public void shiftRows(Sheet sheet, int rowIndex, int size, int shiftRo...

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/html/helper/StylerHelper.java
  class StylerHelper (line 30) | public class StylerHelper {
    method StylerHelper (line 50) | public StylerHelper(Workbook wb, Formatter out, int sheetNum, int cssR...
    method printInlineStyle (line 63) | private void printInlineStyle(Workbook wb) {
    method prontFonts (line 70) | private void prontFonts(Workbook wb) {
    method printStyles (line 81) | public void printStyles(Workbook wb) {
    method getDefaultsClassCss (line 101) | private String getDefaultsClassCss() {
    method printStyle (line 126) | private void printStyle(CellStyle style) {
    method styleContents (line 132) | private void styleContents(CellStyle style) {
    method fontStyle (line 140) | private void fontStyle(Font font) {
    method getColor (line 155) | private Color getColor(Font font) {
    method styleName (line 163) | private String styleName(CellStyle style) {
    method styleOut (line 169) | private <K> void styleOut(String attr, K key, Map<K, String> mapping) {
    type HtmlHelper (line 176) | private interface HtmlHelper {
      method colorStyles (line 185) | void colorStyles(CellStyle style, Formatter out);
      method styleColor (line 187) | void styleColor(Formatter out, String attr, Color color);
    class HSSFHtmlHelper (line 190) | private class HSSFHtmlHelper implements HtmlHelper {
      method HSSFHtmlHelper (line 198) | public HSSFHtmlHelper(HSSFWorkbook wb) {
      method colorStyles (line 203) | public void colorStyles(CellStyle style, Formatter out) {
      method styleColor (line 212) | private void styleColor(Formatter out, String attr, short index) {
      method styleColor (line 222) | public void styleColor(Formatter out, String attr, Color color) {
    class XSSFHtmlHelper (line 237) | private class XSSFHtmlHelper implements HtmlHelper {
      method XSSFHtmlHelper (line 239) | public XSSFHtmlHelper(XSSFWorkbook wb) {
      method colorStyles (line 242) | public void colorStyles(CellStyle style, Formatter out) {
      method styleColor (line 248) | public void styleColor(Formatter out, String attr, Color color) {

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/imports/CellValueServer.java
  class CellValueServer (line 50) | public class CellValueServer {
    method getCellValue (line 64) | private Object getCellValue(String xclass, Cell cell, ExcelImportEntit...
    method getDateData (line 118) | private Date getDateData(ExcelImportEntity entity, String value) {
    method getValue (line 139) | public Object getValue(IExcelDataHandler dataHanlder, Object object, C...
    method getValue (line 168) | public Object getValue(IExcelDataHandler dataHanlder, Object object, S...
    method hanlderSuffix (line 189) | private Object hanlderSuffix(String suffix, Object result) {
    method getValueByType (line 205) | private Object getValueByType(String xclass, Object result, ExcelImpor...
    method hanlderValue (line 306) | private Object hanlderValue(IExcelDataHandler dataHanlder, Object obje...
    method replaceValue (line 328) | private Object replaceValue(String[] replace, Object result,boolean mu...
    method replaceSingleValue (line 361) | private String replaceSingleValue(String[] replace, String temp){
    method getValueArr (line 387) | public String[] getValueArr(String val) {

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/imports/ExcelImportServer.java
  class ExcelImportServer (line 57) | @SuppressWarnings({ "rawtypes", "unchecked", "hiding" })
    method ExcelImportServer (line 74) | public ExcelImportServer() {
    method addListContinue (line 90) | private void addListContinue(Object object, ExcelCollectionParams para...
    method getKeyValue (line 123) | private String getKeyValue(Cell cell) {
    method getSaveUrl (line 153) | private String getSaveUrl(ExcelImportEntity excelImportEntity, Object ...
    method importExcel (line 165) | private <T> List<T> importExcel(Collection<T> result, Sheet sheet, Cla...
    method isNotNullObject (line 288) | private boolean isNotNullObject(Class pojoClass, Object object){
    method ignoreHeaderHandler (line 312) | private void ignoreHeaderHandler(Map<String, ExcelImportEntity> excelP...
    method getTitleMap (line 331) | private Map<Integer, String> getTitleMap(Sheet sheet, Iterator<Row> ro...
    method getCollectionParams (line 420) | private ExcelCollectionParams getCollectionParams(List<ExcelCollection...
    method importExcelByIs (line 438) | public ExcelImportResult importExcelByIs(InputStream inputstream, Clas...
    method getBytes (line 530) | public static byte[] getBytes(InputStream is) throws IOException {
    method saveFieldValue (line 555) | private Object saveFieldValue(ImportParams params, Object object, Cell...
    method saveImage (line 588) | private void saveImage(Object object, String picId, Map<String, ExcelI...
    method createErrorCellStyle (line 641) | private void createErrorCellStyle(Workbook workbook) {

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/imports/base/ImportBaseService.java
  class ImportBaseService (line 52) | public class ImportBaseService {
    method addEntityToMap (line 65) | public void addEntityToMap(String targetId, Field field, ExcelImportEn...
    method getImportVerify (line 119) | public ExcelVerifyEntity getImportVerify(Field field) {
    method getAllExcelField (line 146) | public void getAllExcelField(String targetId, Field[] fields, Map<Stri...
    method additionalCollectionName (line 196) | private void additionalCollectionName(ExcelCollectionParams collection) {
    method getExcelField (line 205) | public void getExcelField(String targetId, Field field, ExcelImportEnt...
    method getExcelFieldList (line 218) | public void getExcelFieldList(String targetId, Field[] fields, Class<?...
    method getExcelName (line 245) | public String getExcelName(String exportName, String targetId) {
    method getFieldBySomeMethod (line 264) | public Object getFieldBySomeMethod(List<Method> list, Object t) throws...
    method saveThisExcel (line 273) | public void saveThisExcel(ImportParams params, Class<?> pojoClass, boo...
    method getSaveExcelUrl (line 293) | public String getSaveExcelUrl(ImportParams params, Class<?> pojoClass)...
    method setFieldBySomeMethod (line 308) | public void setFieldBySomeMethod(List<Method> setMethods, Object objec...
    method setValues (line 320) | public void setValues(ExcelImportEntity entity, Object object, Object ...

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/imports/base/ImportFileServiceI.java
  type ImportFileServiceI (line 3) | public interface ImportFileServiceI {
    method doUpload (line 10) | String doUpload(byte[] data);
    method doUpload (line 18) | String doUpload(byte[] data,String saveUrl);

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/imports/sax/SaxReadExcel.java
  class SaxReadExcel (line 45) | @SuppressWarnings("rawtypes")
    method readExcel (line 50) | public <T> List<T> readExcel(InputStream inputstream, Class<?> pojoCla...
    method readExcel (line 60) | private <T> List<T> readExcel(OPCPackage opcPackage, Class<?> pojoClas...
    method fetchSheetParser (line 84) | private XMLReader fetchSheetParser(SharedStrings sst, ISaxRowRead rowR...

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/imports/sax/SheetHandler.java
  class SheetHandler (line 39) | public class SheetHandler extends DefaultHandler {
    method SheetHandler (line 56) | public SheetHandler(SharedStrings sst, ISaxRowRead rowRead) {
    method startElement (line 61) | @Override
    method endElement (line 86) | @Override
    method characters (line 129) | @Override

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/imports/sax/parse/ISaxRowRead.java
  type ISaxRowRead (line 22) | public interface ISaxRowRead {
    method getList (line 29) | public <T> List<T> getList();
    method parse (line 37) | public void parse(int index, List<SaxReadCellEntity> datas);

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/imports/sax/parse/SaxRowRead.java
  class SaxRowRead (line 48) | @SuppressWarnings({ "rawtypes", "unchecked" })
    method SaxRowRead (line 73) | public SaxRowRead(Class<?> pojoClass, ImportParams params, IExcelReadR...
    method initParams (line 82) | private void initParams(Class<?> pojoClass, ImportParams params) {
    method getList (line 98) | @Override
    method parse (line 103) | @Override
    method addListData (line 130) | private void addListData(List<SaxReadCellEntity> datas) throws Excepti...
    method addListContinue (line 170) | private void addListContinue(Object object, ExcelCollectionParams para...
    method saveFieldValue (line 196) | private void saveFieldValue(ImportParams params, Object object, SaxRea...
    method addHeadData (line 206) | private void addHeadData(List<SaxReadCellEntity> datas) {

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/imports/verifys/BaseVerifyHandler.java
  class BaseVerifyHandler (line 28) | public class BaseVerifyHandler {
    method isEmail (line 50) | public static ExcelVerifyHanlderResult isEmail(String name, Object val) {
    method isMobile (line 64) | public static ExcelVerifyHanlderResult isMobile(String name, Object va...
    method isTel (line 78) | public static ExcelVerifyHanlderResult isTel(String name, Object val) {
    method maxLength (line 92) | public static ExcelVerifyHanlderResult maxLength(String name, Object v...
    method minLength (line 107) | public static ExcelVerifyHanlderResult minLength(String name, Object v...
    method notNull (line 121) | public static ExcelVerifyHanlderResult notNull(String name, Object val) {
    method regex (line 137) | public static ExcelVerifyHanlderResult regex(String name, Object val, ...

FILE: autopoi/src/main/java/org/jeecgframework/poi/excel/imports/verifys/VerifyHandlerServer.java
  class VerifyHandlerServer (line 29) | public class VerifyHandlerServer {
    method addVerifyResult (line 33) | private void addVerifyResult(ExcelVerifyHanlderResult hanlderResult, E...
    method verifyData (line 49) | public ExcelVerifyHanlderResult verifyData(Object object, Object value...

FILE: autopoi/src/main/java/org/jeecgframework/poi/exception/excel/ExcelExportException.java
  class ExcelExportException (line 26) | public class ExcelExportException extends RuntimeException {
    method ExcelExportException (line 32) | public ExcelExportException() {
    method ExcelExportException (line 36) | public ExcelExportException(ExcelExportEnum type) {
    method ExcelExportException (line 41) | public ExcelExportException(ExcelExportEnum type, Throwable cause) {
    method ExcelExportException (line 45) | public ExcelExportException(String message) {
    method ExcelExportException (line 49) | public ExcelExportException(String message, ExcelExportEnum type) {
    method getType (line 54) | public ExcelExportEnum getType() {
    method setType (line 58) | public void setType(ExcelExportEnum type) {

FILE: autopoi/src/main/java/org/jeecgframework/poi/exception/excel/ExcelImportException.java
  class ExcelImportException (line 26) | public class ExcelImportException extends RuntimeException {
    method ExcelImportException (line 32) | public ExcelImportException() {
    method ExcelImportException (line 36) | public ExcelImportException(ExcelImportEnum type) {
    method ExcelImportException (line 41) | public ExcelImportException(ExcelImportEnum type, Throwable cause) {
    method ExcelImportException (line 46) | public ExcelImportException(String message) {
    method ExcelImportException (line 50) | public ExcelImportException(String message, ExcelImportEnum type) {
    method getType (line 55) | public ExcelImportEnum getType() {
    method setType (line 59) | public void setType(ExcelImportEnum type) {

FILE: autopoi/src/main/java/org/jeecgframework/poi/exception/excel/enums/ExcelExportEnum.java
  type ExcelExportEnum (line 24) | public enum ExcelExportEnum {
    method ExcelExportEnum (line 30) | ExcelExportEnum(String msg) {
    method getMsg (line 34) | public String getMsg() {
    method setMsg (line 38) | public void setMsg(String msg) {

FILE: autopoi/src/main/java/org/jeecgframework/poi/exception/excel/enums/ExcelImportEnum.java
  type ExcelImportEnum (line 24) | public enum ExcelImportEnum {
    method ExcelImportEnum (line 30) | ExcelImportEnum(String msg) {
    method getMsg (line 34) | public String getMsg() {
    method setMsg (line 38) | public void setMsg(String msg) {

FILE: autopoi/src/main/java/org/jeecgframework/poi/exception/word/WordExportException.java
  class WordExportException (line 26) | public class WordExportException extends RuntimeException {
    method WordExportException (line 30) | public WordExportException() {
    method WordExportException (line 34) | public WordExportException(String msg) {
    method WordExportException (line 38) | public WordExportException(WordExportEnum exception) {

FILE: autopoi/src/main/java/org/jeecgframework/poi/exception/word/enmus/WordExportEnum.java
  type WordExportEnum (line 24) | public enum WordExportEnum {
    method WordExportEnum (line 30) | WordExportEnum(String msg) {
    method getMsg (line 34) | public String getMsg() {
    method setMsg (line 38) | public void setMsg(String msg) {

FILE: autopoi/src/main/java/org/jeecgframework/poi/handler/impl/ExcelDataHandlerDefaultImpl.java
  class ExcelDataHandlerDefaultImpl (line 29) | public abstract class ExcelDataHandlerDefaultImpl implements IExcelDataH...
    method exportHandler (line 35) | @Override
    method getNeedHandlerFields (line 40) | @Override
    method importHandler (line 45) | @Override
    method setNeedHandlerFields (line 50) | @Override
    method setMapValue (line 55) | @Override
    method getHyperlink (line 60) | @Override

FILE: autopoi/src/main/java/org/jeecgframework/poi/handler/inter/IExcelDataHandler.java
  type IExcelDataHandler (line 27) | public interface IExcelDataHandler {
    method exportHandler (line 40) | public Object exportHandler(Object obj, String name, Object value);
    method getNeedHandlerFields (line 47) | public String[] getNeedHandlerFields();
    method importHandler (line 60) | public Object importHandler(Object obj, String name, Object value);
    method setNeedHandlerFields (line 67) | public void setNeedHandlerFields(String[] fields);
    method setMapValue (line 76) | public void setMapValue(Map<String, Object> map, String originKey, Obj...
    method getHyperlink (line 85) | public Hyperlink getHyperlink(CreationHelper creationHelper, Object ob...

FILE: autopoi/src/main/java/org/jeecgframework/poi/handler/inter/IExcelDictHandler.java
  type IExcelDictHandler (line 8) | public interface IExcelDictHandler {
    method toName (line 19) | public String toName(String dict, Object obj, String name, Object value);
    method toValue (line 30) | public String toValue(String dict, Object obj, String name, Object val...

FILE: autopoi/src/main/java/org/jeecgframework/poi/handler/inter/IExcelExportServer.java
  type IExcelExportServer (line 11) | public interface IExcelExportServer {
    method selectListForExcelExport (line 20) | public List<Object> selectListForExcelExport(Object queryParams, int p...

FILE: autopoi/src/main/java/org/jeecgframework/poi/handler/inter/IExcelExportServerEnhanced.java
  type IExcelExportServerEnhanced (line 18) | public interface IExcelExportServerEnhanced<T> {
    method selectListForExcelExport (line 39) | List<T> selectListForExcelExport(Object queryParams, T lastRecord, int...
    method getPageSize (line 47) | default int getPageSize() {

FILE: autopoi/src/main/java/org/jeecgframework/poi/handler/inter/IExcelReadRowHanlder.java
  type IExcelReadRowHanlder (line 25) | public interface IExcelReadRowHanlder<T> {
    method hanlder (line 31) | public void hanlder(T t);

FILE: autopoi/src/main/java/org/jeecgframework/poi/handler/inter/IExcelVerifyHandler.java
  type IExcelVerifyHandler (line 26) | public interface IExcelVerifyHandler {
    method getNeedVerifyFields (line 33) | public String[] getNeedVerifyFields();
    method setNeedVerifyFields (line 40) | public void setNeedVerifyFields(String[] arr);
    method verifyHandler (line 53) | public ExcelVerifyHanlderResult verifyHandler(Object obj, String name,...

FILE: autopoi/src/main/java/org/jeecgframework/poi/handler/inter/IWriter.java
  type IWriter (line 11) | public interface IWriter<T> {
    method get (line 17) | default public T get() {
    method write (line 27) | public IWriter<T> write(Collection data);
    method close (line 34) | public T close();

FILE: autopoi/src/main/java/org/jeecgframework/poi/util/ExcelUtil.java
  class ExcelUtil (line 24) | public class ExcelUtil {
    method main (line 26) | public static void main(String[] args){
    method readExcelToObj (line 38) | public static ArrayList<Map<String,String>> readExcelToObj(String path) {
    method readExcel (line 58) | public static ArrayList<Map<String,String>> readExcel(Workbook wb,int ...
    method getMergedRegionValue (line 117) | public static String getMergedRegionValue(Sheet sheet ,int row , int c...
    method isMergedRow (line 147) | public static boolean isMergedRow(Sheet sheet,int row ,int column) {
    method isMergedRegion (line 171) | public static boolean isMergedRegion(Sheet sheet,int row ,int column) {
    method hasMerged (line 193) | public static boolean hasMerged(Sheet sheet) {
    method mergeRegion (line 205) | public static void mergeRegion(Sheet sheet, int firstRow, int lastRow,...
    method getCellValue (line 220) | public static String getCellValue(Cell cell){
    method remove0Suffix (line 251) | public static String remove0Suffix(Object value){
    method isNumberString (line 269) | private static boolean isNumberString(String str){
    method readContent (line 284) | public static void readContent(String fileName)  {

FILE: autopoi/src/main/java/org/jeecgframework/poi/util/JsonParser.java
  class JsonParser (line 11) | public class JsonParser {
    method parseJsonArrayToList (line 18) | public static List<Object> parseJsonArrayToList(String json) {
    method splitJsonElements (line 47) | private static List<String> splitJsonElements(String content) {
    method parseJsonValue (line 109) | private static Object parseJsonValue(String jsonValue) {
    method parseJsonObject (line 160) | private static Map<String, Object> parseJsonObject(String json) {
    method parseJsonArray (line 188) | private static List<Object> parseJsonArray(String json) {
    method splitJsonPairs (line 211) | private static List<String> splitJsonPairs(String content) {
    method splitKeyValue (line 273) | private static String[] splitKeyValue(String pair) {
    method parseString (line 320) | private static String parseString(String str) {
    method parseNumber (line 372) | private static Object parseNumber(String numStr) {
    method isQuotedString (line 411) | private static boolean isQuotedString(String str) {
    method isNumber (line 419) | private static boolean isNumber(String str) {
    method main (line 469) | public static void main(String[] args) {

FILE: autopoi/src/main/java/org/jeecgframework/poi/util/MyX509TrustManager.java
  class MyX509TrustManager (line 11) | public class MyX509TrustManager implements X509TrustManager{
    method checkClientTrusted (line 13) | @Override
    method checkServerTrusted (line 18) | @Override
    method getAcceptedIssuers (line 24) | @Override

FILE: autopoi/src/main/java/org/jeecgframework/poi/util/PoiCellUtil.java
  class PoiCellUtil (line 18) | public class PoiCellUtil {
    method getCellValue (line 27) | public static String getCellValue(Sheet sheet, int row, int column) {
    method getMergedRegionValue (line 47) | public static String getMergedRegionValue(Sheet sheet, int row, int co...
    method isMergedRegion (line 79) | public static boolean isMergedRegion(Sheet sheet, int row, int column) {
    method getCellValue (line 112) | public static String getCellValue(Cell cell) {

FILE: autopoi/src/main/java/org/jeecgframework/poi/util/PoiElUtil.java
  class PoiElUtil (line 29) | public final class PoiElUtil {
    method PoiElUtil (line 51) | private PoiElUtil() {
    method eval (line 62) | public static Object eval(String text, Map<String, Object> map) throws...
    method innerEval (line 84) | public static Object innerEval(String text, Map<String, Object> map) t...
    method ifDelete (line 114) | private static Object ifDelete(String text, Map<String, Object> map) t...
    method isTrue (line 135) | private static Boolean isTrue(String[] keys, Map<String, Object> map) ...
    method isConstant (line 161) | private static String isConstant(String param) {
    method formatNumber (line 176) | private static Object formatNumber(String text, Map<String, Object> ma...
    method formatDate (line 190) | private static Object formatDate(String text, Map<String, Object> map)...
    method length (line 203) | private static Object length(String text, Map<String, Object> map) thr...
    method replacinnerEvalue (line 210) | private static String replacinnerEvalue(String text, Object val) {
    method getKey (line 220) | private static String getKey(String prefix, String text) {
    method main (line 241) | public static void main(String[] args) {
    method trinocular (line 251) | private static Object trinocular(String text, Map<String, Object> map)...
    method evalNoParse (line 291) | public static Object evalNoParse(String text, Map<String, Object> map)...
    method evalFindName (line 312) | public static String evalFindName(String text, Map<String, Object> map...

FILE: autopoi/src/main/java/org/jeecgframework/poi/util/PoiExcelGraphDataUtil.java
  class PoiExcelGraphDataUtil (line 16) | public class PoiExcelGraphDataUtil {
    method buildGraphData (line 22) | public static void buildGraphData(Sheet dataSourceSheet, ExcelGraph gr...
    method buildGraphData (line 39) | public static void buildGraphData(Sheet dataSourceSheet, List<ExcelGra...
    method getDrawingPatriarch (line 52) | public static Drawing getDrawingPatriarch(Sheet sheet){

FILE: autopoi/src/main/java/org/jeecgframework/poi/util/PoiExcelTempUtil.java
  class PoiExcelTempUtil (line 17) | public class PoiExcelTempUtil {
    method reset (line 26) | public static void reset(Sheet sheet, int startRow, int endRow) {
    method copyCell (line 72) | private static Map copyCell(Cell cell) {
    method getValue (line 81) | private static Object getValue(Cell cell) {

FILE: autopoi/src/main/java/org/jeecgframework/poi/util/PoiFunctionUtil.java
  class PoiFunctionUtil (line 32) | public final class PoiFunctionUtil {
    method PoiFunctionUtil (line 48) | private PoiFunctionUtil() {
    method length (line 57) | @SuppressWarnings("rawtypes")
    method formatNumber (line 81) | public static String formatNumber(Object obj, String format) {
    method formatDate (line 103) | public static String formatDate(Object obj, String format) {
    method isTrue (line 128) | public static boolean isTrue(Object first, String operator, Object sec...
    method isGt (line 155) | private static boolean isGt(Object first, Object second) {

FILE: autopoi/src/main/java/org/jeecgframework/poi/util/PoiMergeCellUtil.java
  class PoiMergeCellUtil (line 25) | public final class PoiMergeCellUtil {
    method PoiMergeCellUtil (line 27) | private PoiMergeCellUtil() {
    method mergeCells (line 39) | public static void mergeCells(Sheet sheet, int startRow, Integer... co...
    method mergeCells (line 59) | public static void mergeCells(Sheet sheet, Map<Integer, int[]> mergeMa...
    method mergeCells (line 74) | public static void mergeCells(Sheet sheet, Map<Integer, int[]> mergeMa...
    method hanlderMergeCells (line 128) | private static void hanlderMergeCells(Integer index, int rowNum, Strin...
    method mergeCellOrContinue (line 155) | private static void mergeCellOrContinue(Integer index, Map<Integer, Me...
    method createMergeEntity (line 169) | private static MergeEntity createMergeEntity(String text, int rowNum, ...
    method checkIsEqualByCellContents (line 182) | private static boolean checkIsEqualByCellContents(MergeEntity mergeEnt...
    method getCellNotNullText (line 207) | private static String getCellNotNullText(Cell cell, int index, int row...
    method addMergedRegion (line 224) | public static void addMergedRegion(Sheet sheet, int firstRow, int last...

FILE: autopoi/src/main/java/org/jeecgframework/poi/util/PoiPublicUtil.java
  class PoiPublicUtil (line 73) | public final class PoiPublicUtil {
    method PoiPublicUtil (line 77) | private PoiPublicUtil() {
    method mapFor (line 81) | @SuppressWarnings({ "unchecked" })
    method createObject (line 96) | public static Object createObject(Class<?> clazz, String targetId) {
    method getClassFields (line 133) | public static Field[] getClassFields(Class<?> clazz) {
    method getFileExtendName (line 150) | public static String getFileExtendName(byte[] photoByte) {
    method getMethod (line 172) | public static Method getMethod(String name, Class<?> pojoClass) throws...
    method getMethod (line 194) | public static Method getMethod(String name, Class<?> pojoClass, Class<...
    method getMethod (line 210) | public static Method getMethod(String name, Class<?> pojoClass,boolean...
    method getMethod (line 236) | public static Method getMethod(String name, Class<?> pojoClass, Class<...
    method getSheetPictrues03 (line 257) | public static Map<String, PictureData> getSheetPictrues03(HSSFSheet sh...
    method getSheetPictrues07 (line 286) | public static Map<String, PictureData> getSheetPictrues07(XSSFSheet sh...
    method getCellImages (line 315) | public static Map<String, PictureData> getCellImages(Sheet sheet, Byte...
    class CellImage (line 453) | static class CellImage {
      method getImgId (line 475) | public String getImgId() {
      method setImgId (line 479) | public void setImgId(String imgId) {
      method getCellStr (line 483) | public String getCellStr() {
      method setCellStr (line 487) | public void setCellStr(String cellStr) {
      method getRId (line 491) | public String getRId() {
      method setRId (line 495) | public void setRId(String rId) {
      method getImgName (line 499) | public String getImgName() {
      method setImgName (line 503) | public void setImgName(String imgName) {
      method getPictureData (line 507) | public XSSFPictureData getPictureData() {
      method setPictureData (line 511) | public void setPictureData(XSSFPictureData pictureData) {
    method getWebRootPath (line 517) | public static String getWebRootPath(String filePath) {
    method isCollection (line 552) | public static boolean isCollection(Class<?> clazz) {
    method isJavaClass (line 562) | public static boolean isJavaClass(Field field) {
    method isNotUserExcelUserThis (line 587) | public static boolean isNotUserExcelUserThis(List<String> exclusionsLi...
    method isUseInThis (line 608) | private static boolean isUseInThis(String exportName, String targetId) {
    method getImageType (line 612) | private static Integer getImageType(String type) {
    method getIsAndType (line 637) | public static Object[] getIsAndType(WordImageEntity entity) throws Exc...
    method getParamsValue (line 667) | @SuppressWarnings("rawtypes")
    method getRealValue (line 686) | public static Object getRealValue(String currentText, Map<String, Obje...
    method getValueDoWhile (line 717) | @SuppressWarnings("rawtypes")
    method doubleToString (line 739) | public static String doubleToString(Double value) {
    method isNumber (line 755) | public static boolean isNumber(String xclass){
    method getValueByTargetId (line 773) | public static String getValueByTargetId(String key, String targetId, S...

FILE: autopoi/src/main/java/org/jeecgframework/poi/util/PoiReflectorUtil.java
  class PoiReflectorUtil (line 16) | public final class PoiReflectorUtil {
    method PoiReflectorUtil (line 27) | private PoiReflectorUtil(Class<?> clazz) {
    method forClass (line 34) | public static PoiReflectorUtil forClass(Class<?> clazz) {
    method fromCache (line 38) | public static PoiReflectorUtil fromCache(Class<?> clazz) {
    method addGetMethods (line 45) | private void addGetMethods(Class<?> cls) {
    method resolveGetterConflicts (line 65) | private void resolveGetterConflicts(Map<String, List<Method>> conflict...
    method addGetMethod (line 104) | private void addGetMethod(String name, Method method) {
    method addSetMethods (line 110) | private void addSetMethods(Class<?> cls) {
    method methodToProperty (line 125) | private static String methodToProperty(String name) {
    method addMethodConflict (line 142) | private void addMethodConflict(Map<String, List<Method>> conflictingMe...
    method resolveSetterConflicts (line 152) | private void resolveSetterConflicts(Map<String, List<Method>> conflict...
    method addSetMethod (line 181) | private void addSetMethod(String name, Method method) {
    method addFields (line 187) | private void addFields(Class<?> clazz) {
    method isValidPropertyName (line 206) | private boolean isValidPropertyName(String name) {
    method getClassMethods (line 219) | private Method[] getClassMethods(Class<?> cls) {
    method addUniqueMethods (line 240) | private void addUniqueMethods(HashMap<String, Method> uniqueMethods, M...
    method getSignature (line 262) | private String getSignature(Method method) {
    method canAccessPrivateMethods (line 281) | private boolean canAccessPrivateMethods() {
    method getGetMethod (line 293) | public Method getGetMethod(String propertyName) {
    method getSetMethod (line 302) | public Method getSetMethod(String propertyName) {
    method getValue (line 318) | public Object getValue(Object obj, String property) {
    method setValue (line 338) | public boolean setValue(Object obj, String property, Object object) {
    method getGetMethods (line 351) | public Map<String, Method> getGetMethods() {
    method getFieldList (line 355) | public List<Field> getFieldList() {
    method execEnumStaticMethod (line 359) | public Object execEnumStaticMethod(String staticMethod, Object params) {

FILE: autopoi/src/main/java/org/jeecgframework/poi/util/PoiSheetUtility.java
  class PoiSheetUtility (line 25) | public class PoiSheetUtility extends Object {
    method deleteColumn (line 36) | public static void deleteColumn(Sheet sheet, int columnToDelete) {
    method cloneCell (line 76) | private static void cloneCell(Cell cNew, Cell cOld) {

FILE: autopoi/src/main/java/org/jeecgframework/poi/word/WordExportUtil.java
  class WordExportUtil (line 30) | public final class WordExportUtil {
    method WordExportUtil (line 32) | private WordExportUtil() {
    method exportWord07 (line 45) | public static XWPFDocument exportWord07(String url, Map<String, Object...
    method exportWord07 (line 58) | public static void exportWord07(XWPFDocument document, Map<String, Obj...

FILE: autopoi/src/main/java/org/jeecgframework/poi/word/entity/MyXWPFDocument.java
  class MyXWPFDocument (line 38) | public class MyXWPFDocument extends XWPFDocument {
    method MyXWPFDocument (line 45) | public MyXWPFDocument() {
    method MyXWPFDocument (line 49) | public MyXWPFDocument(InputStream in) throws Exception {
    method MyXWPFDocument (line 53) | public MyXWPFDocument(OPCPackage opcPackage) throws Exception {
    method createPicture (line 57) | public void createPicture(String blipId, int id, int width, int height) {
    method createPicture (line 86) | public void createPicture(XWPFRun run, String blipId, int id, int widt...

FILE: autopoi/src/main/java/org/jeecgframework/poi/word/entity/WordImageEntity.java
  class WordImageEntity (line 25) | public class WordImageEntity {
    method WordImageEntity (line 44) | public WordImageEntity() {
    method WordImageEntity (line 48) | public WordImageEntity(byte[] data, int width, int height) {
    method WordImageEntity (line 55) | public WordImageEntity(String url, int width, int height) {
    method getData (line 61) | public byte[] getData() {
    method getHeight (line 65) | public int getHeight() {
    method getType (line 69) | public String getType() {
    method getUrl (line 73) | public String getUrl() {
    method getWidth (line 77) | public int getWidth() {
    method setData (line 81) | public void setData(byte[] data) {
    method setHeight (line 85) | public void setHeight(int height) {
    method setType (line 89) | public void setType(String type) {
    method setUrl (line 93) | public void setUrl(String url) {
    method setWidth (line 97) | public void setWidth(int width) {

FILE: autopoi/src/main/java/org/jeecgframework/poi/word/entity/params/ExcelListEntity.java
  class ExcelListEntity (line 29) | public class ExcelListEntity extends ExcelBaseParams {
    method ExcelListEntity (line 46) | public ExcelListEntity() {
    method ExcelListEntity (line 50) | public ExcelListEntity(List<?> list, Class<?> clazz) {
    method ExcelListEntity (line 55) | public ExcelListEntity(List<?> list, Class<?> clazz, IExcelDataHandler...
    method ExcelListEntity (line 61) | public ExcelListEntity(List<?> list, Class<?> clazz, IExcelDataHandler...
    method ExcelListEntity (line 68) | public ExcelListEntity(List<?> list, Class<?> clazz, int headRows) {
    method getClazz (line 74) | public Class<?> getClazz() {
    method getHeadRows (line 78) | public int getHeadRows() {
    method getList (line 82) | public List<?> getList() {
    method setClazz (line 86) | public void setClazz(Class<?> clazz) {
    method setHeadRows (line 90) | public void setHeadRows(int headRows) {
    method setList (line 94) | public void setList(List<?> list) {

FILE: autopoi/src/main/java/org/jeecgframework/poi/word/entity/params/ListParamEntity.java
  class ListParamEntity (line 24) | public class ListParamEntity {
    method ListParamEntity (line 46) | public ListParamEntity() {
    method ListParamEntity (line 50) | public ListParamEntity(String name, Object value) {
    method ListParamEntity (line 56) | public ListParamEntity(String name, String target) {
    method getName (line 62) | public String getName() {
    method getTarget (line 66) | public String getTarget() {
    method getType (line 70) | public String getType() {
    method getValue (line 74) | public Object getValue() {
    method setName (line 78) | public void setName(String name) {
    method setTarget (line 82) | public void setTarget(String target) {
    method setType (line 86) | public void setType(String type) {
    method setValue (line 90) | public void setValue(Object value) {

FILE: autopoi/src/main/java/org/jeecgframework/poi/word/parse/ParseWord07.java
  class ParseWord07 (line 49) | @SuppressWarnings({ "unchecked", "rawtypes" })
    method addAnImage (line 63) | private void addAnImage(WordImageEntity obj, XWPFRun currentRun) throw...
    method changeValues (line 83) | private void changeValues(XWPFParagraph paragraph, XWPFRun currentRun,...
    method checkThisTableIsNeedIterator (line 106) | private Object checkThisTableIsNeedIterator(XWPFTableCell cell, Map<St...
    method parseAllParagraphic (line 125) | private void parseAllParagraphic(List<XWPFParagraph> paragraphs, Map<S...
    method parseThisParagraph (line 145) | private void parseThisParagraph(XWPFParagraph paragraph, Map<String, O...
    method parseThisRow (line 186) | private void parseThisRow(List<XWPFTableCell> cells, Map<String, Objec...
    method parseThisTable (line 200) | private void parseThisTable(XWPFTable table, Map<String, Object> map) ...
    method parseWord (line 244) | public XWPFDocument parseWord(String url, Map<String, Object> map) thr...
    method parseWord (line 258) | public void parseWord(XWPFDocument document, Map<String, Object> map) ...
    method parseWordSetValue (line 262) | private void parseWordSetValue(MyXWPFDocument doc, Map<String, Object>...
    method parseHeaderAndFoot (line 286) | private void parseHeaderAndFoot(MyXWPFDocument doc, Map<String, Object...

FILE: autopoi/src/main/java/org/jeecgframework/poi/word/parse/excel/ExcelEntityParse.java
  class ExcelEntityParse (line 46) | public class ExcelEntityParse extends ExportBase {
    method checkExcelParams (line 50) | private static void checkExcelParams(ExcelListEntity entity) {
    method createCells (line 57) | private int createCells(int index, Object t, List<ExcelExportEntity> e...
    method createListCells (line 101) | public void createListCells(int index, int cellNum, Object obj, List<E...
    method getTitleMap (line 126) | private Map<String, Integer> getTitleMap(XWPFTable table, int index, i...
    method parseNextRowAndAddRow (line 152) | public void parseNextRowAndAddRow(XWPFTable table, int index, ExcelLis...
    method setCellValue (line 180) | private void setCellValue(XWPFTableRow row, Object value, int cellNum) {
    method sortAndFilterExportField (line 195) | private void sortAndFilterExportField(List<ExcelExportEntity> excelPar...

FILE: autopoi/src/main/java/org/jeecgframework/poi/word/parse/excel/ExcelMapParse.java
  class ExcelMapParse (line 31) | public final class ExcelMapParse {
    method parseCurrentRowGetParams (line 41) | private static String[] parseCurrentRowGetParams(XWPFTableRow currentR...
    method parseNextRowAndAddRow (line 60) | public static void parseNextRowAndAddRow(XWPFTable table, int index, L...

FILE: autopoi/src/test/java/DaoChuBigDataTest.java
  class DaoChuBigDataTest (line 32) | public class DaoChuBigDataTest {
    method bigDataExport (line 58) | public static void bigDataExport() throws Exception {
    method main (line 143) | public static void main(String[] args) throws Exception {

FILE: autopoi/src/test/java/DaoChuSheetTest.java
  class DaoChuSheetTest (line 27) | public class DaoChuSheetTest {
    method getExportParams (line 36) | public static ExportParams getExportParams(String name) {
    method test (line 51) | public static Workbook test() {
    method main (line 112) | public static void main(String[] args) throws IOException {

FILE: autopoi/src/test/java/DaoChuTest.java
  class DaoChuTest (line 32) | public class DaoChuTest {
    method getTemplateParams (line 42) | public static TemplateExportParams getTemplateParams(String name) {
    method test (line 66) | public static Workbook test(String name) {
    method testMapDataExport (line 105) | public static Workbook testMapDataExport() {
    method main (line 151) | public static void main(String[] args) throws IOException {
    method dynamicExport (line 182) | public static void dynamicExport() throws IOException {
    class DynamicRow (line 209) | public static class DynamicRow {
      method getUser (line 216) | public String getUser() {
      method setUser (line 219) | public void setUser(String user) {
      method getHolidaysJson (line 222) | public String getHolidaysJson() {
      method setHolidaysJson (line 226) | public void setHolidaysJson(String holidaysJson) {

FILE: autopoi/src/test/java/DaoChuWordTest.java
  class DaoChuWordTest (line 29) | public class DaoChuWordTest {
    method main (line 63) | public static void main(String[] args) throws Exception {

FILE: autopoi/src/test/java/ExcelToHtmlTest.java
  class ExcelToHtmlTest (line 23) | public class ExcelToHtmlTest {
    method main (line 51) | public static void main(String[] args) throws Exception {

FILE: autopoi/src/test/java/ImportExcelTest.java
  class ImportExcelTest (line 24) | public class ImportExcelTest {
    method main (line 50) | public static void main(String[] args) throws Exception {

FILE: autopoi/src/test/java/Poi541ApiCompatibilityTest.java
  class Poi541ApiCompatibilityTest (line 12) | public class Poi541ApiCompatibilityTest {
    method testGetCellType (line 17) | @Test
    method testDateUtil (line 55) | @Test
    method testGetAlignment (line 89) | @Test
    method testFontIndexType (line 111) | @Test
    method testCellValueCompatibility (line 133) | @Test
    method testCellStyleCompatibility (line 174) | @Test
    method testWorkbookBasicOperations (line 212) | @Test
    method runAllApiTests (line 241) | @Test

FILE: autopoi/src/test/java/Poi541ComprehensiveTest.java
  class Poi541ComprehensiveTest (line 19) | public class Poi541ComprehensiveTest {
    method testMultiHeaderExport (line 26) | @Test
    method testMultiSheetExport (line 77) | @Test
    method testTemplateExport (line 116) | @Test
    method testComplexTemplateExport (line 151) | @Test
    method testBigDataExport (line 193) | @Test
    method testCellTypeCompatibility (line 244) | @Test
    method testMapDataExport (line 267) | @Test
    method runAllTests (line 300) | @Test
    method getExportParams (line 348) | private static ExportParams getExportParams(String name) {
    method saveWorkbook (line 356) | private void saveWorkbook(Workbook workbook, String fileName) throws E...

FILE: autopoi/src/test/java/TestImageScale.java
  class TestImageScale (line 23) | public class TestImageScale {
    method getTemplateParams (line 34) | public static TemplateExportParams getTemplateParams(String name) {
    method testImageScaling (line 45) | public static Workbook testImageScaling(String templateName) {
    method main (line 105) | public static void main(String[] args) throws IOException {

FILE: autopoi/src/test/java/vo/TestDateEntity.java
  class TestDateEntity (line 13) | public class TestDateEntity {
    method getLocalDate (line 21) | public LocalDate getLocalDate() {
    method setLocalDate (line 25) | public void setLocalDate(LocalDate localDate) {
    method getLocalDateTime (line 29) | public LocalDateTime getLocalDateTime() {
    method setLocalDateTime (line 33) | public void setLocalDateTime(LocalDateTime localDateTime) {

FILE: autopoi/src/test/java/vo/TestEntity.java
  class TestEntity (line 10) | public class TestEntity {
    method getName (line 16) | public String getName() {
    method setName (line 20) | public void setName(String name) {
    method getAge (line 24) | public Integer getAge() {
    method setAge (line 28) | public void setAge(Integer age) {
Condensed preview — 161 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (773K chars).
[
  {
    "path": ".gitattributes",
    "chars": 145,
    "preview": "*.js linguist-language=Java\n*.css linguist-language=Java\n*.html linguist-language=Java\n*.vue linguist-language=Java\n*.sq"
  },
  {
    "path": ".gitignore",
    "chars": 72,
    "preview": "## ide\n**/.idea\n*.iml\n\n## backend\n**/target\n**/logs\n\n## front\n**/*.lock\n"
  },
  {
    "path": "LICENSE",
    "chars": 10250,
    "preview": "Apache License\nVersion 2.0, January 2004\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AN"
  },
  {
    "path": "POI_5升级说明.md",
    "chars": 4282,
    "preview": "# AutoPOI v2.0.0 升级指南\n\n## 版本信息\n\n- **当前版本**: 2.0.0\n- **发布日期**: 2025-10-22\n- **POI 版本**: 5.4.1(从 4.1.2 升级)\n\n## 🎯 重大更新\n\n###"
  },
  {
    "path": "README.md",
    "chars": 14277,
    "preview": "[中文](./README.zh-CN.md) | English\n\n\nAutoPOI (Excel and Word Easy Utility)\n===========================\nAutoPOI, as its na"
  },
  {
    "path": "README.zh-CN.md",
    "chars": 12577,
    "preview": "中文 | [English](./README.md)\n\n\nAutoPOI (Excel和 Word简易工具类)\n===========================\n AutoPOI 功能如同名字auto,追求的就是自动化,让一个没接触"
  },
  {
    "path": "autopoi/pom.xml",
    "chars": 3423,
    "preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLoca"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/core/util/ApplicationContextUtil.java",
    "chars": 699,
    "preview": "package org.jeecgframework.core.util;\n\nimport org.springframework.beans.BeansException;\nimport org.springframework.conte"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/dict/service/AutoPoiDictServiceI.java",
    "chars": 433,
    "preview": "package org.jeecgframework.dict.service;\n\n\n/**\n * 描述:\n * @author:scott\n * @since:2017-4-12 下午04:58:15\n * @version:1.0\n *"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/cache/ExcelCache.java",
    "chars": 2988,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/cache/ImageCache.java",
    "chars": 3654,
    "preview": "/**\n * Copyright 2013-2015 JueYue (qrb.jueyue@gmail.com)\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \""
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/cache/WordCache.java",
    "chars": 1433,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/cache/manager/FileLoade.java",
    "chars": 2024,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/cache/manager/POICacheManager.java",
    "chars": 2403,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/cache/package-info.java",
    "chars": 212,
    "preview": "/**\n * 对POI用到的模板进行缓存,进行统一管理,缓存工具暂时使用guava(脱离配置文件)\n * 缓存方式统一为byte[] 屏蔽文件类型的差异\n * 缓存获取方式,URL或者URL+index(EXcel的)\n */\n/**\n *"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/consts/ImageScaleMode.java",
    "chars": 1044,
    "preview": "package org.jeecgframework.poi.consts;\n\n/**\n * 图片缩放模式枚举\n * for [issues/8892] AutoPoi ImageEntity建议添加scale属性,控制图片导出缩放模式\n "
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/entity/ImageEntity.java",
    "chars": 2880,
    "preview": "package org.jeecgframework.poi.entity;\n\nimport org.jeecgframework.poi.consts.ImageScaleMode;\n\n/**\n * word导出,图片设置和图片信息\n *"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/ExcelExportUtil.java",
    "chars": 9766,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/ExcelImportCheckUtil.java",
    "chars": 19132,
    "preview": "package org.jeecgframework.poi.excel;\n\nimport org.apache.commons.lang3.StringUtils;\nimport org.apache.poi.hssf.usermodel"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/ExcelImportUtil.java",
    "chars": 4813,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/ExcelToHtmlUtil.java",
    "chars": 1206,
    "preview": "package org.jeecgframework.poi.excel;\n\nimport org.apache.poi.ss.usermodel.Workbook;\nimport org.jeecgframework.poi.excel."
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/annotation/Excel.java",
    "chars": 4786,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/annotation/ExcelCollection.java",
    "chars": 1403,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/annotation/ExcelEntity.java",
    "chars": 1296,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/annotation/ExcelIgnore.java",
    "chars": 1022,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/annotation/ExcelTarget.java",
    "chars": 1043,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/annotation/ExcelVerify.java",
    "chars": 1712,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/entity/ExcelBaseParams.java",
    "chars": 1088,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/entity/ExportParams.java",
    "chars": 5931,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/entity/ImportParams.java",
    "chars": 4405,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/entity/TemplateExportParams.java",
    "chars": 6113,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/entity/enmus/CellValueType.java",
    "chars": 832,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/entity/enmus/ExcelStyleType.java",
    "chars": 1405,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/entity/enmus/ExcelType.java",
    "chars": 1399,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/entity/params/ExcelBaseEntity.java",
    "chars": 3207,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/entity/params/ExcelCollectionParams.java",
    "chars": 1595,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/entity/params/ExcelExportEntity.java",
    "chars": 6763,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/entity/params/ExcelForEachParams.java",
    "chars": 2386,
    "preview": "package org.jeecgframework.poi.excel.entity.params;\n\nimport java.io.Serializable;\nimport java.util.Stack;\n\nimport org.ap"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/entity/params/ExcelImportEntity.java",
    "chars": 2210,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/entity/params/ExcelTemplateParams.java",
    "chars": 1029,
    "preview": "package org.jeecgframework.poi.excel.entity.params;\n\nimport java.io.Serializable;\n\nimport org.apache.poi.ss.usermodel.Ce"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/entity/params/ExcelVerifyEntity.java",
    "chars": 2498,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/entity/params/MergeEntity.java",
    "chars": 1607,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/entity/result/ExcelImportResult.java",
    "chars": 1577,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/entity/result/ExcelVerifyHanlderResult.java",
    "chars": 1339,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/entity/sax/SaxReadCellEntity.java",
    "chars": 1419,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/entity/vo/PoiBaseConstants.java",
    "chars": 1069,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/export/ExcelBatchExportServer.java",
    "chars": 8014,
    "preview": "package org.jeecgframework.poi.excel.export;\nimport org.apache.poi.ss.usermodel.Drawing;\nimport org.apache.poi.ss.usermo"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/export/ExcelExportServer.java",
    "chars": 17911,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/export/base/ExcelExportBase.java",
    "chars": 28299,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/export/base/ExportBase.java",
    "chars": 25943,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/export/styler/AbstractExcelExportStyler.java",
    "chars": 2526,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/export/styler/ExcelExportStylerBorderImpl.java",
    "chars": 2701,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/export/styler/ExcelExportStylerColorImpl.java",
    "chars": 2978,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/export/styler/ExcelExportStylerDefaultImpl.java",
    "chars": 2319,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/export/styler/IExcelExportStyler.java",
    "chars": 1459,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/export/template/ExcelExportOfTemplateUtil.java",
    "chars": 39079,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *\n *  Licensed under the Apache License, Version 2.0 (the \"License\")"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/graph/builder/ExcelChartBuildService.java",
    "chars": 8333,
    "preview": "/**\n * \n */\npackage org.jeecgframework.poi.excel.graph.builder;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimp"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/graph/constant/ExcelGraphElementType.java",
    "chars": 268,
    "preview": "/**\n * \n */\npackage org.jeecgframework.poi.excel.graph.constant;\n\n/**\n * @Description 定义元素类型\n * @author liusq\n * @date  "
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/graph/constant/ExcelGraphType.java",
    "chars": 263,
    "preview": "/**\n * \n */\npackage org.jeecgframework.poi.excel.graph.constant;\n\n/**\n * @Description 定义图形类型\n * @author liusq\n * @date  "
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/graph/entity/ExcelGraph.java",
    "chars": 393,
    "preview": "/**\n * \n */\npackage org.jeecgframework.poi.excel.graph.entity;\n\nimport java.util.List;\n\n/**\n * @Description Excel 图形构造服务"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/graph/entity/ExcelGraphDefined.java",
    "chars": 1403,
    "preview": "/**\n * \n */\npackage org.jeecgframework.poi.excel.graph.entity;\n\nimport org.jeecgframework.poi.excel.graph.constant.Excel"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/graph/entity/ExcelGraphElement.java",
    "chars": 1160,
    "preview": "/**\n * \n */\npackage org.jeecgframework.poi.excel.graph.entity;\n\n\nimport org.jeecgframework.poi.excel.graph.constant.Exce"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/graph/entity/ExcelTitleCell.java",
    "chars": 544,
    "preview": "/**\n * \n */\npackage org.jeecgframework.poi.excel.graph.entity;\n\n/**\n * @Description Excel 图形构造服务\n * @author liusq\n * @da"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/graph/package-info.java",
    "chars": 129,
    "preview": "/**\n * \n */\n/**\n * @Description Excel 图形构造服务\n * @author liusq\n * @date  2022年1月4号\n */\npackage org.jeecgframework.poi.exc"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/html/ExcelToHtmlServer.java",
    "chars": 5405,
    "preview": "package org.jeecgframework.poi.excel.html;\n\nimport java.util.Formatter;\nimport java.util.Iterator;\n\nimport org.apache.po"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/html/helper/CellValueHelper.java",
    "chars": 4044,
    "preview": "package org.jeecgframework.poi.excel.html.helper;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\nimport org.apache.po"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/html/helper/MergedRegionHelper.java",
    "chars": 3964,
    "preview": "package org.jeecgframework.poi.excel.html.helper;\n\nimport java.util.HashMap;\nimport java.util.HashSet;\nimport java.util."
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/html/helper/StylerHelper.java",
    "chars": 8815,
    "preview": "package org.jeecgframework.poi.excel.html.helper;\n\n\nimport java.io.BufferedReader;\nimport java.io.IOException;\nimport ja"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/html/helper/excelStyle.css",
    "chars": 832,
    "preview": ".excelDefaults {\n\tbackground-color: white;\n\tcolor: black;\n\ttext-decoration: none;\n\tdirection: ltr;\n\ttext-transform: none"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/imports/CellValueServer.java",
    "chars": 14381,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/imports/ExcelImportServer.java",
    "chars": 24729,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/imports/base/ImportBaseService.java",
    "chars": 11894,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/imports/base/ImportFileServiceI.java",
    "chars": 350,
    "preview": "package org.jeecgframework.poi.excel.imports.base;\n\npublic interface ImportFileServiceI {\n\n    /**\n     * 上传文件 返回文件地址字符串"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/imports/package-info.java",
    "chars": 108,
    "preview": "/**\n * 导入类\n * @author JEECG\n * @date 2014年6月23日 下午11:05:59\n */\npackage org.jeecgframework.poi.excel.imports;"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/imports/sax/SaxReadExcel.java",
    "chars": 3311,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/imports/sax/SheetHandler.java",
    "chars": 3898,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/imports/sax/parse/ISaxRowRead.java",
    "chars": 1007,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/imports/sax/parse/SaxRowRead.java",
    "chars": 6557,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/imports/verifys/BaseVerifyHandler.java",
    "chars": 3941,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/excel/imports/verifys/VerifyHandlerServer.java",
    "chars": 2806,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/exception/excel/ExcelExportException.java",
    "chars": 1512,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/exception/excel/ExcelImportException.java",
    "chars": 1531,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/exception/excel/enums/ExcelExportEnum.java",
    "chars": 1051,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/exception/excel/enums/ExcelImportEnum.java",
    "chars": 1012,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/exception/word/WordExportException.java",
    "chars": 1117,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/exception/word/enmus/WordExportEnum.java",
    "chars": 1058,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/handler/impl/ExcelDataHandlerDefaultImpl.java",
    "chars": 1740,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/handler/impl/package-info.java",
    "chars": 126,
    "preview": "/**\n * 对接口的抽象的默认实现,避免用户实现过多方法\n * @author JEECG\n * @date 2014年6月20日 上午12:09:27\n */\npackage org.jeecgframework.poi.handler"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/handler/inter/IExcelDataHandler.java",
    "chars": 1970,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/handler/inter/IExcelDictHandler.java",
    "chars": 603,
    "preview": "package org.jeecgframework.poi.handler.inter;\n\n/**\n * 字典翻译处理\n * @author liusq\n * @date 2022-05-27\n */\npublic interface I"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/handler/inter/IExcelExportServer.java",
    "chars": 437,
    "preview": "package org.jeecgframework.poi.handler.inter;\n\nimport java.util.List;\n\n/**\n * 导出数据接口\n * @Description [LOWCOD-2521]【autop"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/handler/inter/IExcelExportServerEnhanced.java",
    "chars": 1323,
    "preview": "package org.jeecgframework.poi.handler.inter;\n\nimport java.util.List;\n\n/**\n * 增强的导出数据接口 - 支持游标分页,解决大数据量导出性能问题\n * for [QQ"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/handler/inter/IExcelReadRowHanlder.java",
    "chars": 864,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/handler/inter/IExcelVerifyHandler.java",
    "chars": 1303,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/handler/inter/IWriter.java",
    "chars": 519,
    "preview": "package org.jeecgframework.poi.handler.inter;\n\nimport java.util.Collection;\n/**\n * 大数据写出服务接口\n *\n * @Description [LOWCOD-"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/handler/package-info.java",
    "chars": 117,
    "preview": "/**\n * 数据处理中心,对导入导出进行数据处理\n * @author JEECG\n * @date 2014年6月20日 上午12:08:09\n */\npackage org.jeecgframework.poi.handler;"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/package-info.java",
    "chars": 215,
    "preview": "/**\n * @author JEECG\n * @date 2014年2月10日\n * @version 1.0\n * 对POI进行封装,通过注解的使用,完成POI的简易重复操作\n * 通过模板完成较为复杂的操作\n * 进阶步骤:<br/>"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/util/ExcelUtil.java",
    "chars": 10743,
    "preview": "package org.jeecgframework.poi.util;\n/**\n * @author Link Xue \n * @version 20171025\n * POI对EXCEL操作工具\n */\n\nimport java.io."
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/util/JsonParser.java",
    "chars": 14773,
    "preview": "package org.jeecgframework.poi.util;\n\nimport java.util.*;\nimport java.lang.reflect.*;\nimport java.math.BigDecimal;\nimpor"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/util/MyX509TrustManager.java",
    "chars": 734,
    "preview": "package org.jeecgframework.poi.util;\n\nimport java.security.cert.CertificateException;\nimport java.security.cert.X509Cert"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/util/PoiCellUtil.java",
    "chars": 3844,
    "preview": "/**\n *\n */\npackage org.jeecgframework.poi.util;\n\nimport org.apache.poi.ss.usermodel.Cell;\nimport org.apache.poi.ss.userm"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/util/PoiElUtil.java",
    "chars": 9499,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/util/PoiExcelGraphDataUtil.java",
    "chars": 1690,
    "preview": "package org.jeecgframework.poi.util;\n\nimport org.apache.poi.ss.usermodel.Drawing;\nimport org.apache.poi.ss.usermodel.She"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/util/PoiExcelTempUtil.java",
    "chars": 3411,
    "preview": "package org.jeecgframework.poi.util;\n\nimport org.apache.poi.hssf.usermodel.HSSFWorkbook;\nimport org.apache.poi.ss.usermo"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/util/PoiFunctionUtil.java",
    "chars": 4379,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/util/PoiMergeCellUtil.java",
    "chars": 7420,
    "preview": "package org.jeecgframework.poi.util;\n\nimport java.util.ArrayList;\nimport java.util.HashMap;\nimport java.util.List;\nimpor"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/util/PoiPublicUtil.java",
    "chars": 26385,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/util/PoiReflectorUtil.java",
    "chars": 13946,
    "preview": "package org.jeecgframework.poi.util;\n\nimport java.lang.reflect.Field;\nimport java.lang.reflect.Method;\nimport java.lang."
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/util/PoiSheetUtility.java",
    "chars": 2805,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/word/WordExportUtil.java",
    "chars": 1477,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/word/entity/MyXWPFDocument.java",
    "chars": 4349,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/word/entity/WordImageEntity.java",
    "chars": 1880,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/word/entity/params/ExcelListEntity.java",
    "chars": 2083,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/word/entity/params/ListParamEntity.java",
    "chars": 1804,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/word/parse/ParseWord07.java",
    "chars": 9011,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/word/parse/excel/ExcelEntityParse.java",
    "chars": 6690,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/main/java/org/jeecgframework/poi/word/parse/excel/ExcelMapParse.java",
    "chars": 2712,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi/src/test/java/DaoChuBigDataTest.java",
    "chars": 4538,
    "preview": "import org.apache.poi.ss.usermodel.Workbook;\nimport org.jeecgframework.poi.excel.ExcelExportUtil;\nimport org.jeecgframew"
  },
  {
    "path": "autopoi/src/test/java/DaoChuSheetTest.java",
    "chars": 3512,
    "preview": "import org.apache.poi.ss.usermodel.Workbook;\nimport org.jeecgframework.poi.excel.ExcelExportUtil;\nimport org.jeecgframew"
  },
  {
    "path": "autopoi/src/test/java/DaoChuTest.java",
    "chars": 7241,
    "preview": "import org.apache.poi.ss.usermodel.Workbook;\nimport org.jeecgframework.poi.excel.ExcelExportUtil;\nimport org.jeecgframew"
  },
  {
    "path": "autopoi/src/test/java/DaoChuWordTest.java",
    "chars": 3105,
    "preview": "import org.apache.poi.xwpf.usermodel.XWPFDocument;\nimport org.jeecgframework.poi.word.WordExportUtil;\n\nimport java.io.Fi"
  },
  {
    "path": "autopoi/src/test/java/ExcelToHtmlTest.java",
    "chars": 1841,
    "preview": "import org.apache.poi.hssf.usermodel.HSSFWorkbook;\nimport org.apache.poi.ss.usermodel.Workbook;\nimport org.jeecgframewor"
  },
  {
    "path": "autopoi/src/test/java/ImportExcelTest.java",
    "chars": 2102,
    "preview": "import org.apache.commons.lang3.builder.ReflectionToStringBuilder;\nimport org.jeecgframework.poi.excel.ExcelImportUtil;\n"
  },
  {
    "path": "autopoi/src/test/java/Poi541ApiCompatibilityTest.java",
    "chars": 9078,
    "preview": "import org.apache.poi.ss.usermodel.*;\nimport org.apache.poi.xssf.usermodel.XSSFWorkbook;\nimport org.junit.Assert;\nimport"
  },
  {
    "path": "autopoi/src/test/java/Poi541ComprehensiveTest.java",
    "chars": 12823,
    "preview": "import org.apache.poi.ss.usermodel.Workbook;\nimport org.jeecgframework.poi.excel.ExcelExportUtil;\nimport org.jeecgframew"
  },
  {
    "path": "autopoi/src/test/java/TestImageScale.java",
    "chars": 4994,
    "preview": "import org.apache.poi.ss.usermodel.Workbook;\nimport org.jeecgframework.poi.consts.ImageScaleMode;\nimport org.jeecgframew"
  },
  {
    "path": "autopoi/src/test/java/vo/TestDateEntity.java",
    "chars": 787,
    "preview": "package vo;\n\nimport org.jeecgframework.poi.excel.annotation.Excel;\n\nimport java.time.LocalDate;\nimport java.time.LocalDa"
  },
  {
    "path": "autopoi/src/test/java/vo/TestEntity.java",
    "chars": 548,
    "preview": "package vo;\n\nimport org.jeecgframework.poi.excel.annotation.Excel;\n\n/**\n * @Description: TODO\n * @author: lsq\n * @date: "
  },
  {
    "path": "autopoi-spring-boot-2-starter/pom.xml",
    "chars": 1831,
    "preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLoc"
  },
  {
    "path": "autopoi-spring-boot-2-starter/src/main/java/org/jeecgframework/poi/excel/def/BasePOIConstants.java",
    "chars": 970,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi-spring-boot-2-starter/src/main/java/org/jeecgframework/poi/excel/def/MapExcelConstants.java",
    "chars": 1026,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi-spring-boot-2-starter/src/main/java/org/jeecgframework/poi/excel/def/NormalExcelConstants.java",
    "chars": 1364,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi-spring-boot-2-starter/src/main/java/org/jeecgframework/poi/excel/def/TemplateExcelConstants.java",
    "chars": 1040,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi-spring-boot-2-starter/src/main/java/org/jeecgframework/poi/excel/def/TemplateWordConstants.java",
    "chars": 1031,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi-spring-boot-2-starter/src/main/java/org/jeecgframework/poi/excel/view/JeecgEntityExcelView.java",
    "chars": 5104,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi-spring-boot-2-starter/src/main/java/org/jeecgframework/poi/excel/view/JeecgMapExcelView.java",
    "chars": 2568,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi-spring-boot-2-starter/src/main/java/org/jeecgframework/poi/excel/view/JeecgTemplateExcelView.java",
    "chars": 2612,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi-spring-boot-2-starter/src/main/java/org/jeecgframework/poi/excel/view/JeecgTemplateWordView.java",
    "chars": 2551,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi-spring-boot-2-starter/src/main/java/org/jeecgframework/poi/excel/view/MiniAbstractExcelView.java",
    "chars": 1377,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi-spring-boot-3-starter/pom.xml",
    "chars": 1990,
    "preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLoc"
  },
  {
    "path": "autopoi-spring-boot-3-starter/src/main/java/org/jeecgframework/poi/excel/def/BasePOIConstants.java",
    "chars": 970,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi-spring-boot-3-starter/src/main/java/org/jeecgframework/poi/excel/def/MapExcelConstants.java",
    "chars": 1026,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi-spring-boot-3-starter/src/main/java/org/jeecgframework/poi/excel/def/NormalExcelConstants.java",
    "chars": 1364,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi-spring-boot-3-starter/src/main/java/org/jeecgframework/poi/excel/def/TemplateExcelConstants.java",
    "chars": 1040,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi-spring-boot-3-starter/src/main/java/org/jeecgframework/poi/excel/def/TemplateWordConstants.java",
    "chars": 1031,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi-spring-boot-3-starter/src/main/java/org/jeecgframework/poi/excel/view/JeecgEntityExcelView.java",
    "chars": 5110,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi-spring-boot-3-starter/src/main/java/org/jeecgframework/poi/excel/view/JeecgMapExcelView.java",
    "chars": 2574,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi-spring-boot-3-starter/src/main/java/org/jeecgframework/poi/excel/view/JeecgTemplateExcelView.java",
    "chars": 2618,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi-spring-boot-3-starter/src/main/java/org/jeecgframework/poi/excel/view/JeecgTemplateWordView.java",
    "chars": 2557,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "autopoi-spring-boot-3-starter/src/main/java/org/jeecgframework/poi/excel/view/MiniAbstractExcelView.java",
    "chars": 1379,
    "preview": "/**\n * Copyright 2013-2015 JEECG (jeecgos@163.com)\n *   \n *  Licensed under the Apache License, Version 2.0 (the \"Licens"
  },
  {
    "path": "deploy.bat",
    "chars": 57,
    "preview": "cmd /k mvn clean deploy -P release -Dmaven.test.skip=true"
  },
  {
    "path": "docs/修改日志.log",
    "chars": 9983,
    "preview": "-- author: liusq---date:20230407---for: [issue/4342]autopoi导出带副标题的数据表,副标题缺左边框\nautopoi\\src\\main\\java\\org\\jeecgframework\\p"
  },
  {
    "path": "install.bat",
    "chars": 36,
    "preview": "cmd /k mvn clean install -D skipTest"
  },
  {
    "path": "pom.xml",
    "chars": 7447,
    "preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLoca"
  },
  {
    "path": "打包构建.md",
    "chars": 2870,
    "preview": "# AutoPOI 打包构建指南\n\n## 📋 JDK 版本要求\n\n不同模块对 JDK 版本有严格要求:\n\n| 模块 | 编译 JDK | 运行 JDK | 说明 |\n|------|---------|---------|------|\n|"
  }
]

// ... and 6 more files (download for full content)

About this extraction

This page contains the full source code of the zhangdaiscott/autopoi GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 161 files (641.4 KB), approximately 192.1k tokens, and a symbol index with 1072 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!