Hi,

I have seen below statement in
20 November 2016 - POI 3.16-beta1 available (
https://poi.apache.org/download.html)This release includes improved VBA
support, better encryption support for password protected files and
encrypting temporary files.

I have used the beta version and tried setting password using below
code(Its working).
Is there any way we can set password for HSSFWorkbook using stable version
of Apache POI?
Point is I dont have the permission to filesystem, so cannot create the
workbook, then save workbook filesystem and then set password to file
created in filesystem. Its just that I want to set password to In memory
Workbook.

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.hssf.record.crypto.Biff8EncryptionKey;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class Poitest {

    public static void main(final String[] args) throws Exception {

        try {

            HSSFWorkbook workbook = new HSSFWorkbook();
            Biff8EncryptionKey.setCurrentUserPassword("test");
            HSSFSheet sheet = workbook.createSheet("sheet1");
            int rows = sheet.getLastRowNum();
            System.out.println("rows:" + rows);

            for (int i = 0; i <= rows; i++) {
                HSSFRow row = sheet.getRow(i);
                if (row == null)
                    continue;
                int cols = row.getLastCellNum();
                System.out.println("cols:" + cols);

                for (int j = 0; j <= cols; j++) {
                    HSSFCell cell = row.getCell((int) j);
                    if (cell == null)
                        continue;
                    if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
                        HSSFRichTextString val =
cell.getRichStringCellValue();
                        System.out.println(val);
                    }
                    if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
                        double val = cell.getNumericCellValue();
                        System.out.println(val);
                    }
                }
            }

            workbook.write(new FileOutputStream("test3_16Beta.xls"));
            workbook.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // try {
            // binput.close();
            // } catch (IOException e) {
            // e.printStackTrace();
            // }
        }
        System.out.println("done");

    }
}

Thanks,
Pavan

Reply via email to