栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

使用aspose.cells for java 操作excel

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用aspose.cells for java 操作excel

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;
    }


}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/959306.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号