Apache POI启用Excel编辑

时间:2014-03-10 07:49:11

标签: java excel apache-poi

我正在使用Apache POI编辑Java中的Excel。编辑后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。

1 个答案:

答案 0 :(得分:0)

因此,这就是Office Trust Center设置。当正在打开的文件中存在可能不安全的内容时,无论POI设置到位,它都将在受保护的视图中打开。

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

Office support link describing this setting.

对于Excel 2013 - 点击File标签,然后选择OptionsTrust CenterTrust Center Settings

File->Options

添加存储下载的位置。

Add new location

确保添加了您的目录。

See new location added.

虽然我同意这不是POI解决方案,但它是一种解决方案。是的,您可能需要帮助最终用户进行设置。

也许很快,Apache POI团队将在未来版本中添加POI解决方案,以便以编程方式执行此操作。