1. 编写初衷:
*. 网上大多生成excel用的都是例如easyExcel这类工具, 对于一个项目仅快速生成excel来讲是很方便, 可在其他方面的拓展就很有局限性(Excel插入图片,Excel图表,Excel转换格式...) *. 经过比较后, 选择使用aspose, 在功能上比较全面, 也不需要在服务器上进行什么插件安装, 十分便利, 唯一的缺点就是它是收费的(这个缺点近乎于无...你懂的), *. aspose 在csdn上对他的直接使用博客不算多, 个人感觉在初学者来看, 很繁琐, 故此写一篇博客, 在记录的同时, 也让正在初学aspose的各位尽量简单些
2. 注意事项:
*. aspose 官方下载的jar, 需要付费后, 才能使用全部功能...不过你懂的 *. 本篇博文介绍的仅仅是 aspose.cells, 这只是aspose的一个部分, 其他功能如果需要记得多看看官方文档 *. 本篇博文仅仅是基础入门工具类, 具体 jar包 需要自行搜索
3. aspose.cells 3 个基础功能:
*. 生成简单excel(无复杂格式, 需要生成复杂格式, 请自行查看官方文档) *. 将多个 Excel 的sheet, 合并到 一个Excel 中 *. excel 转为 图片格式(PNG,JPEG...转换成其他格式, 请自行查看官方文档) 官方文档地址: https://docs.aspose.com/cells/java/
4. 代码实现:
package com.wheel.wltool.excel;
import com.aspose.cells.*;
import org.springframework.util.StringUtils;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
public class AsposeAuthentication {
private static String XLSX = "xlsx";
static ArrayList headList;
static ArrayList> contentList;
static ArrayList hideColumnList;
static {
// 表头
headList = new ArrayList() {{
for (int i = 0; i < 7; i++) {
add(i + "标题");
}
}};
// 内容
contentList = new ArrayList() {{
for (int i = 0; i < 100; i++) {
// 每一行
add(new ArrayList() {{
for (int i = 0; i < 7; i++) {
// 该行的每一列数据
add("aspose信息科技有限公司)");
}
}});
}
}};
// 需要隐藏第0列
hideColumnList = new ArrayList() {{
add(0);
}};
}
public static void main(String[] args) throws Exception {
long l = System.currentTimeMillis();
// 示例开关
int flag = 2;
// 开始示例
switch (flag) {
case 0:
// 工作簿: 生成(默认生成XLSX), 初始化时包含了一个 sheet 的工作簿
Workbook workbook = new Workbook(FileFormatType.XLSX);
// 删除工作簿默认的sheet
workbook.getWorksheets().clear();
// 生成[N个]工作表
for (int i = 0; i < 2; i++) {
createOneSheet(workbook, i + "", headList, contentList, hideColumnList);
}
// 最终生成: 1. 流文件; 2. 直接生成物理(File);
// 流
// ByteArrayOutputStream bos = new ByteArrayOutputStream();
// System.out.println("生成前: " + bos.size());
// saveSelect(bos, null, workbook);
// System.out.println("生成后: " + bos.size());
// 文件
saveSelect(null, "C:\Users\Administrator\Downloads\oneExcel" + System.nanoTime() + "." + XLSX, workbook);
break;
case 1:
Workbook workbook_merge = workbookCopy(new ArrayList() {{
add("C:\Users\Administrator\Downloads\oneExcel26003410651290.xlsx");
add("C:\Users\Administrator\Downloads\oneExcel26018562420101.xlsx");
}}, 0);
if (null != workbook_merge) {
// 最终生成: 1. 流文件; 2. 直接生成物理(File);
// 流
// ByteArrayOutputStream bos = new ByteArrayOutputStream();
// System.out.println("生成前: " + bos.size());
// saveSelect(bos, null, workbook_merge);
// System.out.println("生成后: " + bos.size());
// 文件
saveSelect(null, "C:\Users\Administrator\Downloads\合并." + XLSX, workbook_merge);
}
break;
case 2:
excelToPngPath("C:\Users\Administrator\Downloads\oneExcel17171955964266." + XLSX, null,
"C:\Users\Administrator\Downloads\Excel图片.jpeg", null);
break;
}
}
public static boolean createOneSheet(Workbook workbook, String sheetName,
ArrayList headList, ArrayList> contentList, ArrayList hideColumnList) {
// 创建一个sheet
try {
Worksheet worksheet = workbook.getWorksheets().add(sheetName);
// 赋值sheetName
if (StringUtils.hasText(sheetName)) {
worksheet.setName(sheetName);
}
// sheet的单元格
Cells cells = worksheet.getCells();
// 生成表头
cells.importArrayList(headList, 0, 0, false);
// 生成具体内容
for (int i = 0; i < contentList.size(); i++) {
cells.importArrayList(contentList.get(i), i + 1, 0, false);
}
// 样式(基础样式, 复杂的话需要看下aspose的官方文档)
cellStyle(worksheet, cells);
// 隐藏列
if (null != hideColumnList && hideColumnList.size() > 0) {
hideColumnList.forEach(e -> cells.hideColumn(e.intValue()));
}
} catch (Exception exception) {
exception.printStackTrace();
return false;
}
return true;
}
public static boolean cellStyle(Worksheet worksheet, Cells cells) {
try {
// 获取表页的最大行数
int maxRow = cells.getMaxRow() + 1;
// 获取表页的最大列数
int columnCount = cells.getMaxColumn() + 1;
for (int col = 0; col < columnCount; col++) {
worksheet.autoFitColumn(col, 0, maxRow);
}
Style style = cells.getStyle();
// 全局: 边框
style.setBorder(BorderType.TOP_BORDER, CellBorderType.THIN, Color.getBlack());
style.setBorder(BorderType.BOTTOM_BORDER, CellBorderType.THIN, Color.getBlack());
style.setBorder(BorderType.LEFT_BORDER, CellBorderType.THIN, Color.getBlack());
style.setBorder(BorderType.RIGHT_BORDER, CellBorderType.THIN, Color.getBlack());
// 全局: 单元格内容: 垂直/水平对齐
style.setVerticalAlignment(TextAlignmentType.CENTER);
style.setHorizontalAlignment(TextAlignmentType.CENTER);
// 全局: 单元格内容: 换行
style.setTextWrapped(true);
// 设置全局样式
Range range = worksheet.getCells().createRange(0, 0, maxRow, columnCount);
range.setStyle(style);
// 表头: 背景色(Pattern一定需要进行设置, 否则背景色无效)
style.setForegroundColor(Color.getYellow());
style.setPattern(BackgroundType.SOLID);
// 表头: 字体
Font font = style.getFont();
font.setSize(12);
// 设置第一行样式
Range range0 = worksheet.getCells().createRange(0, 0, 1, columnCount);
range0.setStyle(style);
} catch (Exception exception) {
exception.printStackTrace();
return false;
}
return true;
}
private static Workbook workbookCopy(ArrayList urls, int type) {
// 合并后的
Workbook workbookS = null;
// 流
InputStream ins = null;
try {
for (int i = 0; i < urls.size(); i++) {
String url = urls.get(i);
ins = 0 == type ? new FileInputStream(url) : getInputStreamByUrl(url);
if (i == 0) {
workbookS = new Workbook(ins);
continue;
} else {
// 准备合并的
Workbook workbookT = new Workbook(ins);
// 遍历准备合并的工作簿
int count = workbookT.getWorksheets().getCount();
for (int i1 = 0; i1 < count; i1++) {
// sheet信息
Worksheet worksheet = workbookT.getWorksheets().get(i1);
String name = worksheet.getName();
// 判断合并后的 工作簿中是否已经存在了该sheet名称, 重复则+ 1
String newSheetName = null != workbookS.getWorksheets().get(name) ? name + 1 : name;
// 开始合并
Worksheet worksheetS = workbookS.getWorksheets().add(newSheetName);
worksheetS.copy(worksheet);
}
}
}
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
// 关闭流
try {
ins.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return workbookS;
}
public static boolean excelToPngPath(String sourceFilePath, InputStream sourceStream,
String targetFilePath, ByteArrayOutputStream targetStream) {
Workbook book = null;
try {
if (StringUtils.hasText(sourceFilePath)) {
book = new Workbook(sourceFilePath);
} else if (null != sourceStream) {
book = new Workbook(sourceStream);
}
// 生成
Worksheet sheet = book.getWorksheets().get(0);
ImageOrPrintOptions imgOptions = new ImageOrPrintOptions();
imgOptions.setImageType(ImageType.PNG);
imgOptions.setCellAutoFit(true);
imgOptions.setOnePagePerSheet(true);
imgOptions.setVerticalResolution(300);
imgOptions.setHorizontalResolution(300);
SheetRender render = new SheetRender(sheet, imgOptions);
// 生成
if (StringUtils.hasText(targetFilePath)) {
// 具体png图片
render.toImage(0, targetFilePath);
} else {
// 流数据
render.toImage(0, targetStream);
}
} catch (Exception exception) {
exception.printStackTrace();
return false;
}
return true;
}
public static boolean saveSelect(ByteArrayOutputStream bos, String pathUrl, Workbook workbook) {
try {
// 获取合并后的数据
if (!"".equals(pathUrl) && null != bos) {
// 存储流
workbook.save(bos, FileFormatType.XLSX);
} else {
// 直接生成合并后的文件
workbook.save(pathUrl, FileFormatType.XLSX);
}
} catch (Exception exception) {
return false;
} finally {
try {
if (null != bos) {
bos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return true;
}
public static InputStream getInputStreamByUrl(String urlPath) {
URL url = null;
InputStream is = null;
try {
url = new URL(urlPath);
} catch (Exception e) {
e.printStackTrace();
}
try {
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true);
conn.connect();
is = conn.getInputStream();
} catch (IOException e) {
e.printStackTrace();
}
return is;
}
}



