POI、JAVA、Excel,通过URL创建WorkBook

从文件的网络路径创建Workbook ,直接上代码,不清楚的可以留言

创建workBook的入口方法,方法内部调用的代码片段已经贴在下面。

// filePath是文件的网络路径,比如:http://hahaha.com/template.xlsx
protected static WorkBook createWorkBook(String filePath, String fileName) throws IOException {
    InputStream inputStream = FileUtils.getInputStream(filePath, fileName);
    Workbook workbook = WorkBookUtil.createWorkBook(inputStream, ExcelTypeEnum.XLSX);
    return workbook ;
}

FileUtils类,需要对URL中的文件名称进行URL转码处理

public static InputStream getInputStream(String url, String fileName) throws IOException {
    // url = url.replace(" ", "%20");
    String[] split = fileName.split("\\.");
    if (split.length > 0) {
        fileName = split[0];
    }
    // URLEncoder主要解决文件名称是中文的问题
    String newFileName = URLEncoder.encode(fileName, "UTF-8");
    url = url.replace(fileName, newFileName).replace(" ", "%20");
    HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
    connection.setReadTimeout(5000);
    connection.setConnectTimeout(5000);
    connection.setRequestMethod("GET");
    if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
        InputStream inputStream = connection.getInputStream();
        // new BufferedInputStream(inputStream)主要解决HttpInputStream不支持.mark(int)的问题
        return new BufferedInputStream(inputStream);
    }
    return null;
}

WorkBookUtil工具类代码片段,ExcelCommonException是自定义异常类

private static final int ROW_ACCESS_WINDOW_SIZE = 500;

public static Workbook createWorkBook(InputStream inputStream, ExcelTypeEnum excelType) throws IOException {
    if (ExcelTypeEnum.UNKNOWN.equals(excelType)) {
        throw new ExcelCommonException("未知的文件类型");
    }
    
    if (ExcelTypeEnum.XLSX.equals(excelType)) {
        return new SXSSFWorkbook(new XSSFWorkbook(inputStream), ROW_ACCESS_WINDOW_SIZE);
    }

    HSSFWorkbook workbook = new HSSFWorkbook(inputStream);
    return workbook;
}

ExcelTypeEnum 枚举类

public enum  ExcelTypeEnum {
    /**
     * xls
     */
    XLS(".xls"),

    /**
     * xlsx
     */
    XLSX(".xlsx"),

    /**
     * 未知
     */
    UNKNOWN("UNKNOWN"),
    ;

    ExcelTypeEnum(String value) {
        this.setValue(value);
    }

    private String value;

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }
}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值