我正在使用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。
答案 0 :(得分:0)
因此,这就是Office Trust Center设置。当正在打开的文件中存在可能不安全的内容时,无论POI设置到位,它都将在受保护的视图中打开。
我能够通过设置浏览器将文件保存到文件夹而不是直接打开它(实际上将其保存到临时文件夹)来解决这个问题。然后,我将该文件夹添加到Office信任中心的受信任位置。这告诉办公室打开这个文件进行编辑是可以的,因为我相信它的打开位置。
Office support link describing this setting.
对于Excel 2013 - 点击File
标签,然后选择Options
,Trust Center
,Trust Center Settings
。
添加存储下载的位置。
确保添加了您的目录。
虽然我同意这不是POI解决方案,但它是一种解决方案。是的,您可能需要帮助最终用户进行设置。
也许很快,Apache POI团队将在未来版本中添加POI解决方案,以便以编程方式执行此操作。