java导出excel中加入图片,不增加文件大小

 List<?> dataList = arumDataService.getDataList(dto);
        List<List<String>> head = arumDataService.getDataListExcel(dto);
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

        EasyExcel.write(byteArrayOutputStream,null).head(head)
                //给定工作表名称
                .sheet("居民用户工单")
                //给定导出数据
                .doWrite(dataList);

        ByteArrayInputStream swapStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
// Load Excel workbook
        Workbook workbook = new Workbook(swapStream);

// Access first worksheet
        Worksheet worksheet = workbook.getWorksheets().get(0);

// Add VBA Module
        int idx = workbook.getVbaProject().getModules().add(worksheet);

// Access the VBA Module, set its name and codes
        VbaModule module = workbook.getVbaProject().getModules().get(idx);
        module.setName("TestModule");
        String macroCode = "Sub AdjustImagesAndTextAutoSize()\n" +
                "    Dim ws As Worksheet\n" +
                "    Set ws = ActiveSheet\n" +
                "\n" +
                "    Dim dataRange As Range\n" +
                "    Set dataRange = ws.UsedRange\n" +
                "\n" +
                "    Dim cell As Range\n" +
                "    For Each cell In dataRange\n" +
                "        If Left(cell.Value, 4) = \"http\" Then\n" +
                "            Dim imageUrls() As String\n" +
                "            imageUrls = Split(cell.Value, \",\")\n" +
                "\n" +
                "            Dim imageUrl As Variant\n" +
                "            For Each imageUrl In imageUrls\n" +
                "                Dim pic As Picture\n" +
                "                Set pic = ws.Pictures.Insert(imageUrl)\n" +
                "\n" +
                "                With pic\n" +
                "                    .ShapeRange.LockAspectRatio = msoFalse\n" +
                "                    .ShapeRange.Width = 25\n" +
                "                    .ShapeRange.Height = 50\n" +
                "                    .Top = cell.Top\n" +
                "                    .Left = cell.Left\n" +
                "                End With\n" +
                "\n" +
                "                cell.Value = \"\"\n" +
                "            Next imageUrl\n" +
                "        Else\n" +
                "            cell.WrapText = True\n" +
                "            cell.EntireRow.AutoFit\n" +
                "            cell.EntireRow.RowHeight = 50\n" +
                "            cell.EntireColumn.AutoFit\n" +
                "        End If\n" +
                "    Next cell\n" +
                "End Sub";
        module.setCodes(macroCode);

// Save the workbook
        //workbook.save("output.xlsm", SaveFormat.XLSM);
        ByteArrayOutputStream byteArrayOutputStream1 = new ByteArrayOutputStream();
        workbook.save(byteArrayOutputStream1,SaveFormat.XLSM);


        ByteArrayInputStream swapStream1 = new    ByteArrayInputStream(byteArrayOutputStream1.toByteArray());

        //上传到阿里云 或者fastdfs都行
if(fastEnable) {

            StorePath storePath = fastFileStorageClient.uploadFile(swapStream1, swapStream1.available(), "xls", null);
            url = storePath.getFullPath();
        }else{

            UploadAliYunOSS.uploadStreamFileFromAliYunOSS(swapStream1, "test.xls");

        }

java导出excel 如果直接把图片写到excel会增大excel文件的大小,如果数据量非常多,会超级慢,所以可以 ,往excel中加入宏方法,导出excel 按alt+f8运行宏 就行了

Aspose.Cells for Java jar包下载,导入到项目里

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值