Apache POI启用Excel编辑

我正在使用Apache POI编辑Java中的Excels。 编辑POI后无法保存文件,因为Excel始终受到保护。 如果你打开,它会显示选项来启用编辑。 将相同的文件复制到新的Excel将正常工作。 但有什么办法可以从Java的Excel编辑? 这是我的代码示例:

import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.Iterator; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class Test3 { public static void main(String args[]) { try { FileInputStream file = new FileInputStream(new File( "New Microsoft Excel Worksheet.xlsx")); // Document document = Jsoup.connect("http://www.google.com").get(); // Get the workbook instance for XLS file XSSFWorkbook workbook = new XSSFWorkbook(file); for (int i = 0; i < workbook.getNumberOfSheets(); i++) { // Get first sheet from the workbook XSSFSheet sheet = workbook.getSheetAt(i); // Iterate through each rows from first sheet Iterator<Row> rowIterator = sheet.iterator(); while (rowIterator.hasNext()) { XSSFRow row = (XSSFRow) rowIterator.next(); // For each row, iterate through each columns Iterator<Cell> cellIterator = row.cellIterator(); while (cellIterator.hasNext()) { // Do something } } } file.close(); FileOutputStream out = new FileOutputStream( "New Microsoft Excel Worksheet.xlsx"); workbook.write(out); out.close(); System.out.println("Done!!!!!!!!"); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } 

我正在使用Excel 2007。

所以,这原来是一个Office信任中心的设置。 当打开的文件中存在潜在的不安全内容时,无论设置什么POI设置,它都将在受保护的视图中打开。

我能够通过设置我的浏览器来解决它,将文件保存到一个文件夹,而不是直接打开(实际上将其保存到临时文件夹)。 然后,我将该文件夹添加到Office信任中心的受信任位置。 这告诉办公室,可以打开这个文件进行编辑,因为我相信它正在被打开的位置。

描述此设置的Office支持链接。

对于Excel 2013 – 单击File选项卡,然后selectOptionsTrust CenterTrust Center Settings

文件 - >选项

添加您的位置下载将被存储。

添加新的位置

确保您的目录已添加。

查看添加的新位置。

虽然我同意这不是一个兴趣点解决scheme,它是一个解决scheme。 是的,你可能不得不帮助你的最终用户设置。

也许很快,Apache POI团队将在未来的版本中添加一个POI解决scheme,以编程方式完成这一任务。