Merge pull request #1639 from nancheung97/excel

🚩 新增操作excel时快速获取Content-Type的方法
This commit is contained in:
Golden Looly 2021-06-08 12:06:09 +08:00 committed by GitHub
commit 80e0bbbbc1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 60 additions and 37 deletions

View File

@ -19,16 +19,26 @@ import java.io.InputStream;
/**
* Excel工具类,不建议直接使用index直接操作sheet在wps/excel中sheet显示顺序与index无关还有隐藏sheet
*
*
* @author Looly
*
*/
public class ExcelUtil {
/**
* xlx的ContentType
*/
public static final String XLS_CONTENT_TYPE = "application/vnd.ms-excel;charset=utf-8";
/**
* xlsx的ContentType
*/
public static final String XLSX_CONTENT_TYPE = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8";
// ------------------------------------------------------------------------------------ Read by Sax start
/**
* 通过Sax方式读取Excel同时支持03和07格式
*
*
* @param path Excel文件路径
* @param rid sheet rid-1表示全部Sheet, 0表示第一个Sheet
* @param rowHandler 行处理器
@ -52,7 +62,7 @@ public class ExcelUtil {
/**
* 通过Sax方式读取Excel同时支持03和07格式
*
*
* @param file Excel文件
* @param rid sheet rid-1表示全部Sheet, 0表示第一个Sheet
* @param rowHandler 行处理器
@ -78,7 +88,7 @@ public class ExcelUtil {
/**
* 通过Sax方式读取Excel同时支持03和07格式
*
*
* @param in Excel流
* @param rid sheet rid-1表示全部Sheet, 0表示第一个Sheet
* @param rowHandler 行处理器
@ -106,7 +116,7 @@ public class ExcelUtil {
/**
* Sax方式读取Excel07
*
*
* @param in 输入流
* @param rid Sheet rid-1表示全部Sheet, 0表示第一个Sheet
* @param rowHandler 行处理器
@ -125,7 +135,7 @@ public class ExcelUtil {
/**
* Sax方式读取Excel07
*
*
* @param file 文件
* @param rid Sheet rid-1表示全部Sheet, 0表示第一个Sheet
* @param rowHandler 行处理器
@ -144,7 +154,7 @@ public class ExcelUtil {
/**
* Sax方式读取Excel07
*
*
* @param path 路径
* @param rid Sheet rid-1表示全部Sheet, 0表示第一个Sheet
* @param rowHandler 行处理器
@ -163,7 +173,7 @@ public class ExcelUtil {
/**
* Sax方式读取Excel03
*
*
* @param in 输入流
* @param sheetIndex Sheet索引-1表示全部Sheet, 0表示第一个Sheet
* @param rowHandler 行处理器
@ -182,7 +192,7 @@ public class ExcelUtil {
/**
* Sax方式读取Excel03
*
*
* @param file 文件
* @param sheetIndex Sheet索引-1表示全部Sheet, 0表示第一个Sheet
* @param rowHandler 行处理器
@ -201,7 +211,7 @@ public class ExcelUtil {
/**
* Sax方式读取Excel03
*
*
* @param path 路径
* @param sheetIndex Sheet索引-1表示全部Sheet, 0表示第一个Sheet
* @param rowHandler 行处理器
@ -223,7 +233,7 @@ public class ExcelUtil {
/**
* 获取Excel读取器通过调用{@link ExcelReader}的read或readXXX方法读取Excel内容<br>
* 默认调用第一个sheet
*
*
* @param bookFilePath Excel文件路径绝对路径或相对于ClassPath路径
* @return {@link ExcelReader}
* @since 3.1.1
@ -235,7 +245,7 @@ public class ExcelUtil {
/**
* 获取Excel读取器通过调用{@link ExcelReader}的read或readXXX方法读取Excel内容<br>
* 默认调用第一个sheet
*
*
* @param bookFile Excel文件
* @return {@link ExcelReader}
*/
@ -245,7 +255,7 @@ public class ExcelUtil {
/**
* 获取Excel读取器通过调用{@link ExcelReader}的read或readXXX方法读取Excel内容
*
*
* @param bookFilePath Excel文件路径绝对路径或相对于ClassPath路径
* @param sheetIndex sheet序号0表示第一个sheet
* @return {@link ExcelReader}
@ -261,7 +271,7 @@ public class ExcelUtil {
/**
* 获取Excel读取器通过调用{@link ExcelReader}的read或readXXX方法读取Excel内容
*
*
* @param bookFile Excel文件
* @param sheetIndex sheet序号0表示第一个sheet
* @return {@link ExcelReader}
@ -276,7 +286,7 @@ public class ExcelUtil {
/**
* 获取Excel读取器通过调用{@link ExcelReader}的read或readXXX方法读取Excel内容
*
*
* @param bookFile Excel文件
* @param sheetName sheet名第一个默认是sheet1
* @return {@link ExcelReader}
@ -292,7 +302,7 @@ public class ExcelUtil {
/**
* 获取Excel读取器通过调用{@link ExcelReader}的read或readXXX方法读取Excel内容<br>
* 默认调用第一个sheet读取结束自动关闭流
*
*
* @param bookStream Excel文件的流
* @return {@link ExcelReader}
*/
@ -303,7 +313,7 @@ public class ExcelUtil {
/**
* 获取Excel读取器通过调用{@link ExcelReader}的read或readXXX方法读取Excel内容<br>
* 默认调用第一个sheet
*
*
* @param bookStream Excel文件的流
* @param closeAfterRead 读取结束是否关闭流
* @return {@link ExcelReader}
@ -320,7 +330,7 @@ public class ExcelUtil {
/**
* 获取Excel读取器通过调用{@link ExcelReader}的read或readXXX方法读取Excel内容<br>
* 读取结束自动关闭流
*
*
* @param bookStream Excel文件的流
* @param sheetIndex sheet序号0表示第一个sheet
* @return {@link ExcelReader}
@ -335,7 +345,7 @@ public class ExcelUtil {
/**
* 获取Excel读取器通过调用{@link ExcelReader}的read或readXXX方法读取Excel内容
*
*
* @param bookStream Excel文件的流
* @param sheetIndex sheet序号0表示第一个sheet
* @param closeAfterRead 读取结束是否关闭流
@ -355,7 +365,7 @@ public class ExcelUtil {
/**
* 获取Excel读取器通过调用{@link ExcelReader}的read或readXXX方法读取Excel内容<br>
* 读取结束自动关闭流
*
*
* @param bookStream Excel文件的流
* @param sheetName sheet名第一个默认是sheet1
* @return {@link ExcelReader}
@ -370,7 +380,7 @@ public class ExcelUtil {
/**
* 获取Excel读取器通过调用{@link ExcelReader}的read或readXXX方法读取Excel内容
*
*
* @param bookStream Excel文件的流
* @param sheetName sheet名第一个默认是sheet1
* @param closeAfterRead 读取结束是否关闭流
@ -391,7 +401,7 @@ public class ExcelUtil {
* 获得{@link ExcelWriter}默认写出到第一个sheet<br>
* 不传入写出的Excel文件路径只能调用ExcelWriter#flush(OutputStream)方法写出到流<br>
* 若写出到文件还需调用{@link ExcelWriter#setDestFile(File)}方法自定义写出的文件然后调用{@link ExcelWriter#flush()}方法写出到文件
*
*
* @return {@link ExcelWriter}
* @since 3.2.1
*/
@ -407,7 +417,7 @@ public class ExcelUtil {
* 获得{@link ExcelWriter}默认写出到第一个sheet<br>
* 不传入写出的Excel文件路径只能调用ExcelWriter#flush(OutputStream)方法写出到流<br>
* 若写出到文件还需调用{@link ExcelWriter#setDestFile(File)}方法自定义写出的文件然后调用{@link ExcelWriter#flush()}方法写出到文件
*
*
* @param isXlsx 是否为xlsx格式
* @return {@link ExcelWriter}
* @since 3.2.1
@ -422,7 +432,7 @@ public class ExcelUtil {
/**
* 获得{@link ExcelWriter}默认写出到第一个sheet
*
*
* @param destFilePath 目标文件路径
* @return {@link ExcelWriter}
*/
@ -433,10 +443,10 @@ public class ExcelUtil {
throw new DependencyException(ObjectUtil.defaultIfNull(e.getCause(), e), PoiChecker.NO_POI_ERROR_MSG);
}
}
/**
* 获得{@link ExcelWriter}默认写出到第一个sheet
*
*
* @param sheetName Sheet名
* @return {@link ExcelWriter}
* @since 4.5.18
@ -451,7 +461,7 @@ public class ExcelUtil {
/**
* 获得{@link ExcelWriter}默认写出到第一个sheet名字为sheet1
*
*
* @param destFile 目标文件
* @return {@link ExcelWriter}
*/
@ -465,7 +475,7 @@ public class ExcelUtil {
/**
* 获得{@link ExcelWriter}
*
*
* @param destFilePath 目标文件路径
* @param sheetName sheet表名
* @return {@link ExcelWriter}
@ -480,7 +490,7 @@ public class ExcelUtil {
/**
* 获得{@link ExcelWriter}
*
*
* @param destFile 目标文件
* @param sheetName sheet表名
* @return {@link ExcelWriter}
@ -498,7 +508,7 @@ public class ExcelUtil {
* 获得{@link BigExcelWriter}默认写出到第一个sheet<br>
* 不传入写出的Excel文件路径只能调用ExcelWriter#flush(OutputStream)方法写出到流<br>
* 若写出到文件还需调用{@link BigExcelWriter#setDestFile(File)}方法自定义写出的文件然后调用{@link BigExcelWriter#flush()}方法写出到文件
*
*
* @return {@link BigExcelWriter}
* @since 4.1.13
*/
@ -514,7 +524,7 @@ public class ExcelUtil {
* 获得{@link BigExcelWriter}默认写出到第一个sheet<br>
* 不传入写出的Excel文件路径只能调用ExcelWriter#flush(OutputStream)方法写出到流<br>
* 若写出到文件还需调用{@link BigExcelWriter#setDestFile(File)}方法自定义写出的文件然后调用{@link BigExcelWriter#flush()}方法写出到文件
*
*
* @param rowAccessWindowSize 在内存中的行数
* @return {@link BigExcelWriter}
* @since 4.1.13
@ -529,7 +539,7 @@ public class ExcelUtil {
/**
* 获得{@link BigExcelWriter}默认写出到第一个sheet
*
*
* @param destFilePath 目标文件路径
* @return {@link BigExcelWriter}
*/
@ -543,7 +553,7 @@ public class ExcelUtil {
/**
* 获得{@link BigExcelWriter}默认写出到第一个sheet名字为sheet1
*
*
* @param destFile 目标文件
* @return {@link BigExcelWriter}
*/
@ -557,7 +567,7 @@ public class ExcelUtil {
/**
* 获得{@link BigExcelWriter}
*
*
* @param destFilePath 目标文件路径
* @param sheetName sheet表名
* @return {@link BigExcelWriter}
@ -572,7 +582,7 @@ public class ExcelUtil {
/**
* 获得{@link BigExcelWriter}
*
*
* @param destFile 目标文件
* @param sheetName sheet表名
* @return {@link BigExcelWriter}
@ -587,7 +597,7 @@ public class ExcelUtil {
/**
* 将Sheet列号变为列名
*
*
* @param index 列号, 从0开始
* @return 0-A; 1-B...26-AA
* @since 4.1.20
@ -610,7 +620,7 @@ public class ExcelUtil {
/**
* 根据表元的列名转换为列号
*
*
* @param colName 列名, 从A开始
* @return A1-0; B1-1...AA1-26
* @since 4.1.20

View File

@ -382,6 +382,19 @@ public class ExcelWriter extends ExcelBase<ExcelWriter> {
return StrUtil.format("attachment; filename=\"{}\"; filename*={}''{}", fileName, charset.name(), fileName);
}
/**
* 获取Content-Type头对应的值可以通过调用以下方法快速设置下载Excel的头信息
*
* <pre>
* response.setContentType(excelWriter.getContentType());
* </pre>
*
* @return Content-Type值
*/
public String getContentType() {
return isXlsx() ? ExcelUtil.XLSX_CONTENT_TYPE : ExcelUtil.XLS_CONTENT_TYPE;
}
/**
* 设置当前所在行
*