当前位置: 首页 > 知识库问答 >
问题:

如何禁用保护模式的Excel文件生成使用Apache POI?

苏晓博
2023-03-14

只有当我将样式应用到单元格时,我才会得到错误消息

import java.io.File;
import java.io.FileOutputStream;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;

public class Test {

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

    HSSFWorkbook wb = new HSSFWorkbook();
    HSSFSheet sheet = null;

    HSSFDataFormat dtFormat = wb.createDataFormat();
    HSSFRow row_data = null;
    HSSFCell cell_data = null;

    HSSFCellStyle style = null;
    HSSFCellStyle styleSubHeader = null;
    HSSFCellStyle styleLeft = null;
    HSSFCellStyle styleCentre = null;
    HSSFCellStyle styleBRData = null;
    HSSFCellStyle styleRight = null;
    HSSFCellStyle styleRPrec = null;
    HSSFCellStyle styleBold = null;
    HSSFCellStyle styleBRight = null;
    HSSFCellStyle styleBRPrec = null;
    HSSFCellStyle styleBLeftHead = null;
    HSSFCellStyle styleBLeft = null;
    HSSFCellStyle styleBCentre = null;
    HSSFCellStyle styleRRight = null;
    HSSFCellStyle styleSubTitle = null;
    HSSFFont headBold = null;
    HSSFFont titleBold = null;
    HSSFDataFormat dtFmt = null;

    HSSFCellStyle styleCenter = wb.createCellStyle();
    HSSFFont fontCenter = wb.createFont();
    HSSFFont font = wb.createFont();
    HSSFFont fontBold = wb.createFont();
    HSSFFont fontsubTitle = wb.createFont();

    FileOutputStream out = new FileOutputStream(new File("sample.xls"));

    try {

        styleSubTitle = wb.createCellStyle();
        sheet = wb.createSheet("Pricing Report");
        row_data = sheet.createRow(sheet.getLastRowNum());

        style = wb.createCellStyle();
        style.setFillForegroundColor(HSSFColor.LIGHT_YELLOW.index);
        style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
        style.setBorderBottom(HSSFColor.TAN.index);
        style.setBorderLeft(HSSFColor.TAN.index);
        style.setBorderRight(HSSFColor.TAN.index);
        style.setBorderTop(HSSFColor.TAN.index);

        cell_data = row_data.createCell((short) 0);
        cell_data.setCellValue("Header 1");
        cell_data.setCellStyle(styleSubTitle);
        cell_data.setCellStyle(style);

        wb.write(out);

        out.close();

        System.out.println("Excel Generated");
    } catch (Exception e) {
        e.printStackTrace();
    }
 }

}

共有1个答案

裴韬
2023-03-14

所以你只是另一个使用古老版本的ApachePOI的用户。我建议您使用最新的稳定版本3.17,而不是6年前的3.9

所以对于所有稍后会发现这一点的人来说:这段代码使用的是apache poiversion3.10或更低版本,在当前版本中不会有更多工作。

你期望style.setBorderBottom(HSSFColor. TAN. index);会做什么?setBorderBottom会设置边框的厚度。这应该是style.setBorderBottom(HSSFCellStyle.BORDER_THICK);例如在您的版本中。边框颜色的设置将是style.setBottomBorderColor(HSSFColor. TAN. index);

这就是问题所在。intHSSFColor。棕褐色的索引0x2f,这是不允许的边界厚度。这就是为什么Excel拒绝将该文件用作安全的Excel文件的原因。

所以:

...
        style = wb.createCellStyle();
        style.setFillForegroundColor(HSSFColor.LIGHT_YELLOW.index);
        style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
        style.setBottomBorderColor(HSSFColor.TAN.index);
        style.setLeftBorderColor(HSSFColor.TAN.index);
        style.setRightBorderColor(HSSFColor.TAN.index);
        style.setTopBorderColor(HSSFColor.TAN.index);
        style.setBorderBottom(HSSFCellStyle.BORDER_THICK);
        style.setBorderLeft(HSSFCellStyle.BORDER_THICK);
        style.setBorderRight(HSSFCellStyle.BORDER_THICK);
        style.setBorderTop(HSSFCellStyle.BORDER_THICK);
...
 类似资料:
  • 我的: 编辑:我的: 我还尝试添加。 任何帮助都很感激。谢了! ...是的,我已经在配置更改后重新启动了守护进程。:)

  • 问题内容: 我正在尝试在excel中打开一个受密码保护的文件,而无需任何用户交互。我在线搜索,发现此代码使用win32com.client运行此程序时,仍然提示输入密码… 问题答案: 我认为命名参数在这种情况下不起作用。因此,您必须执行以下操作: 有关Workbooks.Open方法的详细信息,请参见http://msdn.microsoft.com/zh- cn/library/office/f

  • 问题内容: 我有一个密码保护Excel文件的问题。 情况是,我有一个zip文件,其中有一个Excel文件。我需要编写一个Java程序,以密码保护Excel文件。因此,用户应该能够解压缩文件(压缩文件无需密码保护)。但是,Excel需要使用密码保护。当用户尝试解压缩文件时,他应该能够解压缩。当他尝试打开Excel文件(位于解压缩的文件夹内)时,它必须要求输入密码。问题类似于使用Java保护excel

  • 问题内容: 我有一个受密码保护的Excel电子表格。我需要打开此电子表格并从中读取数据。我一直在尝试使用POI API无济于事。首选Java解决方案,但任何想法都会有所帮助。 编辑:是的,我有密码。该文件在excel中受密码保护;必须输入密码才能查看电子表格。 Edit2:我无法使用带有密码的POI打开它,我在寻找替代解决方案。 问题答案: 您可以使用JExcelApi。 自从我这样做已经有一段时

  • 我使用Apache POI框架生成了一个xlsx密码保护文件,下面添加了我的代码。然而,我无法使用Excel工具打开生成的文件。我可以使用Plan Maker免费工具打开它。欢迎任何建议。 我有以下jars使用,commons-collections4-4.4.jar,commons-compress-1.20.jar,commons-math3-3.0.jar,poi-4.1.2.jar,poi

  • 问题内容: 我们正在从具有打开保护并已启用写保留保护的客户端获取Excel文件。我想删除保护,因此可以使用python xlrd模块打开Excel文件。我已经安装了pywin32软件包以通过COM访问Excel文件,并且可以使用提供两个密码的程序打开它,保存并关闭文件而不会出现任何错误。我使用的是MSDN网络中所述的Unprotect命令,它们没有失败,但也没有删除保护。程序完成后,保存的文件仍然